--- openjdk-6-6b16~pre5.orig/debian/JB-policytool.desktop.in +++ openjdk-6-6b16~pre5/debian/JB-policytool.desktop.in @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=@vendor@ Java @RELEASE@ Policy Tool +Name[fi]=@vendor@ Java @RELEASE@ - käytäntötyökalu +Comment=@vendor@ Java @RELEASE@ Policy Tool +Comment[fi]=@vendor@ Java @RELEASE@ - käytäntötyökalu +Exec=/@basedir@/bin/policytool +Terminal=false +Type=Application +Icon=@basename@ +Categories=Settings; --- openjdk-6-6b16~pre5.orig/debian/changelog +++ openjdk-6-6b16~pre5/debian/changelog @@ -0,0 +1,1312 @@ +openjdk-6 (6b16~pre5-0ubuntu1) karmic; urgency=low + + * Bump hotspot to hs14b16. + * Update IcedTea build infrastructure (20090805). + * patches/java-access-bridge-security.patch: Update. + * Build-depend on xulrunner-dev instead of xulrunner-1.9-dev on karmic. + * Don't recommend the jck fonts anymore, just suggest them; the appropriate + fonts are installed as dependencies of the language packs. + + -- Matthias Klose Thu, 06 Aug 2009 10:27:09 +0200 + +openjdk-6 (6b16~pre4-0ubuntu7) karmic; urgency=low + + * Build using GCC-4.4 on sparc as well, require 4.4.1. + + -- Matthias Klose Thu, 23 Jul 2009 18:23:14 +0200 + +openjdk-6 (6b16~pre4-0ubuntu6) karmic; urgency=low + + * Fix build failure building the zero VM. + + -- Matthias Klose Thu, 16 Jul 2009 09:49:36 -0400 + +openjdk-6 (6b16~pre4-0ubuntu5) karmic; urgency=low + + [Matthias Klose] + * Update IcedTea build infrastructure (20090715). + * Tighten build dependency on llvm-dev. + + [Edward Nevill] + * Add armv4 compatibility. + + -- Matthias Klose Wed, 15 Jul 2009 15:40:44 -0400 + +openjdk-6 (6b16~pre4-0ubuntu4) karmic; urgency=low + + [Edward Nevill] + * Added Bytecode Interpreter Generator. + * Added ARM templates for above. + * Removed old optimised ARM assebler. + * Added -g0 because of problems with ld linking -g. + * Changed alignment to 64 now that as bug is fixed. + + [Matthias Klose] + * Update IcedTea build infrastructure (20090710). + * Let the -jre package depend on the access-bridge package, not the + -jre-headless package. LP: #395074. + * Suggested by Ed Nevill: + - Pass -timeout:3 when running the jtreg testsuite on zero architectures. + - Pass -Xmx256M -vmoption:-Xmx256M on armel for the jtreg testsuite run. + * Tighten build dependency on llvm-dev. + + -- Matthias Klose Fri, 03 Jul 2009 18:32:50 +0200 + +openjdk-6 (6b16~pre4-0ubuntu3) karmic; urgency=low + + * Update zero-port-opt patch on armel. + + -- Matthias Klose Wed, 24 Jun 2009 10:48:48 +0200 + +openjdk-6 (6b16~pre4-0ubuntu2) karmic; urgency=low + + * Update IcedTea build infrastructure (20090623). + * Reapply the zero-port-opt patch on armel. + * Do not use the IPA Mona font family by default. Closes: #521233. + * Build cacao with -fno-strict-aliasing. + + -- Matthias Klose Tue, 23 Jun 2009 16:23:38 +0200 + +openjdk-6 (6b16-4) unstable; urgency=medium + + * Build the zero binary package when building with shark. + * Build-depend on cpio. Closes: #532963. + + -- Matthias Klose Tue, 16 Jun 2009 07:52:19 +0200 + +openjdk-6 (6b16-3) unstable; urgency=low + + * Update IcedTea build infrastructure (20090612). + * Install the libaccess-bridge-java* symlinks again. + * Build zero on ix86 architectures with JIT support (shark). To use the zero + build without shark, use the `-Xint' option to operate in interpreted-only + mode. + + -- Matthias Klose Fri, 12 Jun 2009 17:31:34 +0200 + +openjdk-6 (6b16-2) unstable; urgency=low + + * Don't install libaccess-bridge-java* symlinks until + libaccess-bridge-java-jni is available on all architectures. + * Add missing build dependency on cacao-source. + + -- Matthias Klose Mon, 18 May 2009 14:02:59 +0200 + +openjdk-6 (6b16-1) unstable; urgency=low + + * Upload to unstable, based in 6b16 and IcedTea 1.5. + + -- Matthias Klose Sun, 17 May 2009 23:02:46 +0200 + +openjdk-6 (6b16~pre3-0ubuntu1) karmic; urgency=low + + * Update to hotspot hs14b15. + * Provide symlink for libjava-access-bridge-jni.so. LP: #375347. + + -- Matthias Klose Fri, 15 May 2009 00:41:24 +0200 + +openjdk-6 (6b16~pre2-0ubuntu3) karmic; urgency=low + + * Update IcedTea build infrastructure (20090513). + * Fix build failure when xvfb-run doesn't work, trying to access a + non-existing directory. + + -- Matthias Klose Wed, 13 May 2009 23:01:23 +0200 + +openjdk-6 (6b16~pre2-0ubuntu2) karmic; urgency=low + + * Add libffi-dev as architecture independent build dependency. + + -- Matthias Klose Mon, 11 May 2009 08:41:42 +0200 + +openjdk-6 (6b16~pre2-0ubuntu1) karmic; urgency=low + + * Update to re-tagged code drop (b16). + * Update IcedTea build infrastructure (20090510). + * Remove patches integrated in IcedTea. + * Remove GCJ Web Plugin support. + * Remove build infrastructure to build additional VM's, integrated + in IcedTea. + * Stop building the openjdk-6-source-files package. + * README.Debian: Document using the different VM's. + * Use GCC-4.3 on sparc, ICE with GCC-4.4. + * Fix problem with the ARM assembler interpreter, when executing a 'new' + bytecode with a double on the top of the stack (Edward Nevill). + * Run the testsuite for the zero build on ix86 architectures. + + -- Matthias Klose Sun, 10 May 2009 23:37:42 +0200 + +openjdk-6 (6b16~pre1-0ubuntu1) karmic; urgency=low + + * New code drop (b16). + * Update IcedTea build infrastructure (20090429). + * Merge changes from 6b14-1.4.1. + * Fix section names (using the java section). + * Remove all UTF-8 sequence definitions from the font configuration. + + -- Matthias Klose Wed, 29 Apr 2009 11:33:07 +0200 + +openjdk-6 (6b14-1.4.1-0ubuntu9) jaunty; urgency=low + + * Reenable the testsuite (revert the change in last upload). + * Apply fix for the ARM bytecode interpreter (Edward Nevill). + + -- Matthias Klose Sat, 18 Apr 2009 11:24:27 +0200 + +openjdk-6 (6b14-1.4.1-0ubuntu7) jaunty; urgency=low + + * Don't use some indian fonts with diverging font metrics for the + latin-1.UTF-8 encoding. LP: #289784. + * Disable running the testsuite for this build (no code changes compared + to the previous upload). + + -- Matthias Klose Tue, 14 Apr 2009 11:46:25 +0200 + +openjdk-6 (6b14-1.4.1-0ubuntu6) jaunty; urgency=low + + * Fix native2ascii jdk test case, which let the jdk testsuite fail. + + -- Matthias Klose Fri, 10 Apr 2009 11:58:44 +0200 + +openjdk-6 (6b14-1.4.1-0ubuntu5) jaunty; urgency=low + + [Matthias Klose] + * Update to the final CACAO 0.99.4 release. + * Security Vulnerability Fixes for OpenJDK: + - 6522586: Enforce limits on Font creation. + - 6536193: flaw in UTF8XmlOutput. + - 6610888: Potential use of cleared of incorrect acc in JMX Monitor. + - 6610896: JMX Monitor handles thread groups incorrectly. + - 6630639: lightweight HttpServer leaks file descriptors on no-data + connections. + - 6632886: Font.createFont can be persuaded to leak temporary files. + - 6636360: compiler/6595044/Main.java test fails with 64bit java on + solaris-sparcv9 with SIGSEGV. + - 6652463: MediaSize constructors allow to redefine the mapping of + standard MediaSizeName values. + - 6652929: Font.createFont(int,File) trusts File.getPath. + - 6656633: getNotificationInfo methods static mutable (findbugs). + - 6658158: Mutable statics in SAAJ (findbugs). + - 6658163: txw2.DatatypeWriter.BUILDIN is a mutable static (findbugs). + - 6691246: Thread context class loader can be set using JMX remote + ClientNotifForwarded. + - 6717680: LdapCtx does not close the connection if initialization fails. + - 6721651: Security problem with out-of-the-box management. + - 6737315: LDAP serialized data vulnerability. + - 6792554: Java JAR Pack200 header checks are insufficent. + - 6804996: JWS PNG Decoding Integer Overflow [V-flrhat2ln8]. + - 6804997: JWS GIF Decoding Heap Corruption [V-r687oxuocp]. + - 6804998: JRE GIF Decoding Heap Corruption [V-y6g5jlm8e1]. + * Add security patch for the lcms library. + * Add accessibility patches java-access-bridge-security.patch and + accessible-toolkit.patch. + * Merge fixes for testsuite failures from the IcedTea6 branch. + * Merge the proxy support for the plugin from the IcedTea6 branch. + * Merge http://icedtea.classpath.org/hg/release/icedtea6-1.4.1/rev/546ef0cdee06 + (TJ). LP: #344705. + * Add a Xb-Npp-Description for the IcedTea plugin. LP: #272010. + + [Edward Nevill] + * Put VFP back in - selects VFP / novfp autmatically + * More assembler optimisations + + -- Matthias Klose Thu, 09 Apr 2009 14:14:12 +0200 + +openjdk-6 (6b14-1.4.1-0ubuntu4) jaunty; urgency=low + + * Disable the additional zero JVM on sparc. + * patches/hotspot/default/icedtea-includedb.patch: Add missing include in + openjdk/hotspot/src/share/vm/includeDB_core. + * Fix build failure of the zero VM on lpia with a fixed GCC. + + -- Matthias Klose Fri, 13 Mar 2009 16:39:27 +0100 + +openjdk-6 (6b14-1.4.1-0ubuntu3) jaunty; urgency=low + + * Build the Zero/Shark VM as an additional JVM (call as `java -zero'). + + -- Matthias Klose Sat, 07 Mar 2009 20:54:28 +0100 + +openjdk-6 (6b14-1.4.1-0ubuntu2) jaunty; urgency=low + + * Fix zero-port-opt patching (build failure on armel). + + -- Matthias Klose Thu, 05 Mar 2009 18:19:18 +0100 + +openjdk-6 (6b14-1.4.1-0ubuntu1) jaunty; urgency=low + + * Update IcedTea to the 1.4.1 release. + * Build the Cacao VM as an additional JVM (call as `java -cacao'). + * Build in separate build directory. + + -- Matthias Klose Thu, 05 Mar 2009 15:16:02 +0100 + +openjdk-6 (6b14-1.5~pre1-5) unstable; urgency=low + + * Fix build failure on armel. + * Require the final cacao-0.99.4 release. + * Add /usr/lib/jni to the library path. Closes: #517338. + + -- Matthias Klose Tue, 17 Mar 2009 09:37:20 +0100 + +openjdk-6 (6b14-1.5~pre1-4) unstable; urgency=low + + * Disable the additional zero JVM on sparc. + * Fix casts in hotspot on s390. Closes: #518823. + * Add special flags for javac on s390 to work around a VM problem with bad + code generation during inlining. + * Run the testsuites for the default VM on all architectures. + * Update IcedTea (20090314). + + -- Matthias Klose Sat, 14 Mar 2009 18:29:49 +0100 + +openjdk-6 (6b14-1.5~pre1-3) unstable; urgency=low + + * Don't configure the additional zero JVM with --enable-shark, currently + fails to build. + * Don't build the JDK when building the additional zero JVM. + + -- Matthias Klose Sat, 07 Mar 2009 21:11:16 +0100 + +openjdk-6 (6b14-1.5~pre1-2) experimental; urgency=low + + * Build the Zero/Shark VM as an additional JVM (call as `java -zero'). + + -- Matthias Klose Fri, 06 Mar 2009 11:16:07 +0100 + +openjdk-6 (6b14-1.5~pre1-0ubuntu1) jaunty; urgency=low + + * Update hotspot to 14.0-b10. + * Update IcedTea (20090305). + * Build the Cacao VM as an additional JVM (call as `java -cacao'). + * Build in separate build directory. + + -- Matthias Klose Thu, 05 Mar 2009 15:16:02 +0100 + +openjdk-6 (6b14-0ubuntu17) jaunty; urgency=low + + [ Edward Nevill ] + * Remove VFP from asm loop + * Disble the mauve testsuite for armel. + + [Matthias Klose] + * Update IcedTea (20090302). + + -- Matthias Klose Mon, 02 Mar 2009 16:18:01 +0100 + +openjdk-6 (6b14-0ubuntu16) jaunty; urgency=low + + * Regenerate auto files. + + -- Matthias Klose Wed, 18 Feb 2009 15:20:10 +0100 + +openjdk-6 (6b14-0ubuntu15) jaunty; urgency=low + + [ Edward Nevill ] + * Added ARM assembler interpreter loop + * mauve and jtreg removed again for alpha release + + [Matthias Klose] + * Update IcedTea (20090218). + + -- Matthias Klose Wed, 18 Feb 2009 13:35:02 +0100 + +openjdk-6 (6b14-0ubuntu14) jaunty; urgency=low + + * Configure with --disable-nio2 on armel as well. + + -- Matthias Klose Fri, 13 Feb 2009 10:13:55 +0100 + +openjdk-6 (6b14-0ubuntu13) jaunty; urgency=low + + * Really configure with --disable-nio2. + + -- Matthias Klose Thu, 12 Feb 2009 17:26:43 +0100 + +openjdk-6 (6b14-0ubuntu12) jaunty; urgency=low + + * Configure with --disable-nio2. + * Run mauve and jtreg testsuites on armel. + + -- Matthias Klose Wed, 11 Feb 2009 13:00:15 +0100 + +openjdk-6 (6b14-0ubuntu11) jaunty; urgency=low + + [Edward Nevill] + * Performance improvements for the zero build (currently applied + on armel only). + + [Matthias Klose] + * Update IcedTea (20090210). + + -- Matthias Klose Tue, 10 Feb 2009 15:29:22 +0100 + +openjdk-6 (6b14-0ubuntu10) jaunty; urgency=low + + * Explicitely remove PulseAudioMuteControl.java. + + -- Matthias Klose Mon, 26 Jan 2009 22:09:21 +0100 + +openjdk-6 (6b14-0ubuntu9.1) jaunty; urgency=low + + * Test build. + + -- Matthias Klose Sun, 25 Jan 2009 17:03:51 +0100 + +openjdk-6 (6b14-0ubuntu9) jaunty; urgency=low + + * Update IcedTea build infrastructure (20090125). + * Run the jtreg testsuite for cacao builds, save all test logs. + + -- Matthias Klose Sun, 25 Jan 2009 15:40:52 +0100 + +openjdk-6 (6b14-0ubuntu8) jaunty; urgency=low + + * Fix merge error, don't apply patches twice. + + -- Matthias Klose Mon, 19 Jan 2009 01:15:19 +0100 + +openjdk-6 (6b14-0ubuntu7) jaunty; urgency=low + + * debian/rules: Call dh_desktop. LP: #309999. + * Add dependency on libjpeg62 for the -headless package. LP: #318383. + * Test some jtreg tests which fail in samevm mode in a separate VM. + * Build all with -fno-stack-protector -U_FORTIFY_SOURCE. + * Include jtr files of failed tests in the -jdk package. + + -- Matthias Klose Mon, 19 Jan 2009 00:23:22 +0100 + +openjdk-6 (6b14-0ubuntu6) jaunty; urgency=low + + * The -source package now contains all source files. Closes: #504568. + * The 6b14 build fixes the following security related issues (sun bug number, + CVE, description): + - 6588160, CVE-2008-5348: jaas krb5 client leaks OS-level UDP sockets. + - 6497740, CVE-2009-5349: Limit the size of RSA public keys. + - 6484091, CVE-2008-5350: FileSystemView leaks directory info. + - 4486841, CVE-2008-5351: UTF-8 decoder needed adhere to Unicode 3.0.1 + fixes. + - 6755943, CVE-2008-5352: JAR decompression should enforce stricter header + checks. + - 6734167, CVE-2008-5353: Calendar.readObject allows elevation of + privileges. + - 6733959, CVE-2008-5354: Insufficient checks for "Main-Class" manifest + entry in JAR files + - 6751322, CVE-2008-5356: Sun Java JRE TrueType Font Parsing Heap Overflow. + - 6733336, CVE-2008-5357: Crash on malformed font. + - 6766136, CVE-2008-5358: corrupted gif image may cause crash in java + splashscreen library. + - 6726779, CVE-2008-5359: ConvolveOp on USHORT raster can cause the JVM + crash. + - 6721753, CVE-2008-5360: File.createTempFile produces guessable file names. + - 6592792: Add com.sun.xml.internal to the "package.access" property in + $JAVA_HOME/lib/security/java.security. + * Regenerate the control file. + + -- Matthias Klose Tue, 13 Jan 2009 15:04:36 +0100 + +openjdk-6 (6b14-0ubuntu2~ppa1) intrepid; urgency=low + + * Upload to the OpenJDK PPA for intrepid. + + -- Matthias Klose Tue, 13 Jan 2009 13:28:38 +0100 + +openjdk-6 (6b14-0ubuntu5) jaunty; urgency=low + + * Update IcedTea build infrastructure (20090113). + * Rebuild with updated nss/nspr packages. + * Update debug patches. + * debian/patches/nonreparenting-wm.diff: If the _JAVA_AWT_WM_NONREPARENTING + environment variable is set, disable all workarounds causing blank windows + in non-reparentizing window managers (Bernhard R. Link). Closes: #508650. + * Fix location of plugin for Debian. Closes: #505726. + * Let the -jdk package provide java-compiler. Closes: #507641. + + -- Matthias Klose Tue, 13 Jan 2009 10:18:44 +0100 + +openjdk-6 (6b14-0ubuntu4) jaunty; urgency=low + + * Use a default jvm.cfg not only for java, but for all jdk tools. + LP: #288616. + * Update IcedTea build infrastructure (20081223). + + -- Matthias Klose Tue, 23 Dec 2008 09:24:23 +0100 + +openjdk-6 (6b14-0ubuntu3) jaunty; urgency=low + + * Update IcedTea build infrastructure (20081217). + * Add support for PARISC. + * Use a default jvm.cfg if the jvm.cfg doesn't yet exist after unpacking + the runtime package. LP: #288616. + + -- Matthias Klose Wed, 17 Dec 2008 09:58:26 +0100 + +openjdk-6 (6b14~pre1-0ubuntu2) jaunty; urgency=low + + * Install hotspot tarball in -source-files package. + * Fix build failure on sparc. + + -- Matthias Klose Fri, 05 Dec 2008 09:43:51 +0100 + +openjdk-6 (6b14~pre1-0ubuntu1) jaunty; urgency=low + + * New code drop (b14). + * Update IcedTea build infrastructure (20081204). + + -- Matthias Klose Thu, 04 Dec 2008 11:40:56 +0100 + +openjdk-6 (6b13~pre2-0ubuntu2) jaunty; urgency=low + + * Update IcedTea build infrastructure (20081203). + - Fix build failures on zero based architectures. + * Add build dependency on libxrender-dev. + * Don't use fastjar on ia64, working around a build failure. + + -- Matthias Klose Wed, 03 Dec 2008 18:43:23 +0100 + +openjdk-6 (6b13~pre2-0ubuntu1) jaunty; urgency=low + + * Update IcedTea build infrastructure (20081202). + - Add Dec 3 OpenJDK security patches + * Build with --with-hotspot-build, update patches for this config. + + -- Matthias Klose Wed, 03 Dec 2008 01:05:54 +0100 + +openjdk-6 (6b13~pre1-0ubuntu4) jaunty; urgency=low + + * Update IcedTea build infrastructure (20081122). + - Fixes for the IcedTeaPlugin. LP: #300254. + + -- Matthias Klose Sat, 22 Nov 2008 10:42:10 +0100 + +openjdk-6 (6b13~pre1-0ubuntu3) jaunty; urgency=low + + * Fix versioned conflict on icedtea-gcjwebplugin. LP: #284299. + * Update IcedTea build infrastructure (20081121). + - Fixes for the IcedTeaPlugin. + * Configure with pulseaudio in jaunty. + + -- Matthias Klose Fri, 21 Nov 2008 07:46:10 +0100 + +openjdk-6 (6b13~pre1-0ubuntu2) jaunty; urgency=low + + * Update IcedTea build infrastructure (20081117). + * Use openjdk-6 as stage1 compiler on armel for a faster build. + + -- Matthias Klose Mon, 17 Nov 2008 18:43:17 +0100 + +openjdk-6 (6b13~pre1-0ubuntu1) jaunty; urgency=low + + * New code drop (b13). + - In the langtools area, besides a few miscellaneous bug fixes (6760834, + 6725036, 6657499), all the langtools regression tests now pass out of + the box (6728697, 6707027) and if using the most recent version of + jtreg, the langtools regression tests can be run in the much faster + "same vm" mode of jtreg, enabled with the -s option (6749967, 6748541, + 6748546, 6748601, 6759775, 6759795, 6759796, 6759996, 6760805, 6760930). + - Gervill update, including applying a patch from IcedTea (6758986, + 6748247, 6748251). + - Publishing a few dozen additional existing regression tests as open + source (6601457, 6759433, 6740185). + - JMX and monitoring fixes (6651382, 6616825, 6756202, 6754672). + - Man page updates (6757036, 6392810, 6504867, 6326773). + - Assorted other fixes (6746055, 6621697, 6756569, 6356642, 6761678). + * Update IcedTea build infrastructure (20081111). + - Fix freeze in midi app, LP: #275672. + - Fixes in the IcedTeaPlugin: LP: #282570, LP: #282570, LP: #285729, + LP: #291377, LP: #37330, LP: #239533. + - Fix vertical text metrics with freetype scaler. LP: #289784. + * Build-depend on ecj-gcj instead of ecj on architectures using + gij/gcj as the bootstrap system. + * Fixed in 6b12: Stack overflow running Kea. LP: #244731. + + -- Matthias Klose Tue, 11 Nov 2008 12:39:16 +0100 + +openjdk-6 (6b12-1~exp1) experimental; urgency=low + + * Update IcedTea build infrastructure (20081025). + + -- Matthias Klose Sat, 25 Oct 2008 23:35:14 +0200 + +openjdk-6 (6b12-0ubuntu6) intrepid; urgency=low + + * Make the dependency on ca-certificates-java unversioned. + * Merge from IcedTea: + - plugin/icedtea/netscape/javascript/JSObject.java: Make + long constructor public. + + -- Matthias Klose Fri, 24 Oct 2008 23:06:32 +0200 + +openjdk-6 (6b12-0ubuntu5) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081024). + - Add --pkgversion= configure option. + - IcedTeaPlugin fixes. + - Fix xjc regressions. + * openjdk-jre-headless: Depend on ca-certificates-java. + * Configure with --pkgversion= to encode the package + version in the -version output and in vm dumps. + * cacao: Handle VM options Xverify:all and Xverify:none. + + -- Matthias Klose Fri, 24 Oct 2008 13:39:29 +0200 + +openjdk-6 (6b12-0) experimental; urgency=low + + * Upload to experimental. + * Pretend the availability of at least 384MB RAM; better swap on the + buildds than failing the build. + + -- Matthias Klose Sun, 19 Oct 2008 11:15:28 +0200 + +openjdk-6 (6b12-0ubuntu4) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081019). + - plugin fix (Make applet size factors doubles instead of ints). + * Don't fail the build when the jtreg summary is missing. + * openjdk-6-source-files: Fix priority and section of the binary package. + * Fix section of the plugin package. + + -- Matthias Klose Sun, 19 Oct 2008 09:29:03 +0200 + +openjdk-6 (6b12-0ubuntu3) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081018). + - Fix LiveConnect issues in the web plugin. LP: #282762. + - Fail the build, if patches don't apply. + * Show xvfb and xauth failures in the build log, when running the testsuites. + * Kill processes which still hang after running the testsuite. Closes: #493339. + * Run the testsuite in parallel, reducing build time. + * openjdk-headless: Depend instead of recommending tzdata-java. + + -- Matthias Klose Sat, 18 Oct 2008 17:15:14 +0200 + +openjdk-6 (6b12-0ubuntu2) intrepid; urgency=low + + * icedtea6-plugin: Versioned conflict with icedtea-gcjwebplugin. LP: #184299. + * Don't configure --with-alt-jar=/usr/bin/fastjar on hotspot archs + and cacao builds. Working around a problem generating rt.jar. Manually + add the netscape/javascript files in zero builds. + * Update IcedTea build infrastructure (20081017). + - configury updates. + - IcedTeaPlugin update. + * openjdk-6-jdk: Suggest visualvm. + * Remove cacao patches found in cacao 0.99.4~20081012. + + -- Matthias Klose Fri, 17 Oct 2008 13:25:45 +0200 + +openjdk-6 (6b12-0ubuntu1) intrepid; urgency=low + + * Update IcedTea to the 1.3.0 release. + * Apply upstream patch to fix upstream issue 6758986. + + -- Matthias Klose Wed, 15 Oct 2008 19:49:05 +0000 + +openjdk-6 (6b12~pre2-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Sun, 12 Oct 2008 11:16:03 +0000 + +openjdk-6 (6b12~pre2-0ubuntu3) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081015). + * Add netscape/javascript class files to rt.jar. LP: #282762. + * Be more verbose in the icedtea6-plugin package description. + * Fix some lintian warnings. + + -- Matthias Klose Wed, 15 Oct 2008 12:45:59 +0200 + +openjdk-6 (6b12~pre2-0ubuntu2) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081012). + * When building as cacao, build a cacao-oj6-plugin package. + * When building as cacao, run the testsuite on amd64, i386, sparc. + * Add finnish translations to the desktop files (Timo Jyrinki). + Closes: #494354. + * Fix font paths (Rob Gom). Closes: #495988. + * Reenable running the testsuite. + * Fix pulse-java build failure on amd64. + + -- Matthias Klose Sun, 12 Oct 2008 13:05:49 +0200 + +openjdk-6 (6b12~pre2-0ubuntu1) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081011). + * debian/copyright: Add copyright notice for pulseaudio sound files. + * Add support to build with pulseaudio support. + + -- Matthias Klose Sat, 11 Oct 2008 15:44:50 +0200 + +openjdk-6 (6b12~pre1-0ubuntu5) intrepid; urgency=low + + * Move the plugin from the -jre package into the -plugin package. + + -- Matthias Klose Fri, 10 Oct 2008 06:55:34 +0000 + +openjdk-6 (6b12~pre1-0ubuntu4) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081009). + * Configure with --enable-liveconnect, build an icedtea6-plugin package. + Thanks to Deepak Bhole. + LP: #207064, #195783, #199680, #202762, #220241, #242263, #242496, + #242496, #250292, #269885, #274356, #274360, #259313. + * Build an icedtea6-plugin package. + * Merge changes from 6b11-9 packaging. + * Build a openjdk-6-source-files packages (used as a build dependency + of cacao-oj6). + * Build depend on cacao-source for cacao-oj6 builds. + + -- Matthias Klose Thu, 09 Oct 2008 15:04:27 +0200 + +openjdk-6 (6b12~pre1-0ubuntu3) intrepid; urgency=low + + * Update IcedTea build infrastructure (20080915). + * Reapply: openjdk-6-jre-headless: Make libnss-mdns a suggestion + instead of a recommendation. LP: #261847. + * Build-depend against fixed fastjar. LP: #267177. + + -- Matthias Klose Mon, 15 Sep 2008 20:16:51 +0200 + +openjdk-6 (6b12~pre1-0ubuntu2) intrepid; urgency=low + + * Update the icedtea-hotspot patch to b12, fixing build failures + on zero archs (ia64, powerpc). + + -- Matthias Klose Sat, 13 Sep 2008 11:48:44 +0200 + +openjdk-6 (6b12~pre1-0ubuntu1) intrepid; urgency=low + + * New code drop (b12). + * Update IcedTea build infrastructure (20080912). + + -- Matthias Klose Sat, 13 Sep 2008 00:41:42 +0200 + +openjdk-6 (6b11-6) unstable; urgency=low + + * Set minimum heap size independent of available memory for cacao builds. + * Link the wrapper tools with -rdynamic for cacao builds. + * Update cacao based builds: + - Update cacao to 0.99.3, remove patches applied upstream. + - Fix build failures on mipsel-linux. + * Allow setting of the bootstrap compiler per architecture. + * Configure --with-alt-jar set to fastjar to speed up builds. + * Update IcedTea build infrastructure (20080815), remove local patches + integrated in IcedTea. + - Make use of unsigned/signed types explicit. + - Fix PR icedtea/184, adding support for returning floats and doubles + for zero builds. + - Fix Fix PR icedtea/181, class type checks. + + -- Matthias Klose Fri, 15 Aug 2008 16:59:48 +0000 + +openjdk-6 (6b11-5) unstable; urgency=low + + * debian/rules (stamps/mauve-build): Configure with --host and --build. + * openjdk-6-jdk: Recommend libxt-dev (jawt_md.h header includes). + * Fix build issues on s390 (size_t is unsigned long). + + -- Matthias Klose Sun, 03 Aug 2008 20:05:44 +0200 + +openjdk-6 (6b11-4) unstable; urgency=low + + * Update IcedTea build infrastructure (20080801). + - Fix typo, causing build failure on mipsel. + + -- Matthias Klose Fri, 01 Aug 2008 01:25:51 +0200 + +openjdk-6 (6b11-3) unstable; urgency=low + + * Include the name of the VM used in the package description. + * Update IcedTea build infrastructure (20080731). + * Build for alpha, arm, mips and mipsel. + * Switch from libcupsys2(-dev) to libcups2(-dev) for newer releases. + (Closes: #492384) + * Add symlinks for header files found in JAVA_HOME/include/linux in + JAVA_HOME/include. + * openjdk-6-jre: Don' recommend lesstif2 anymore. + + -- Matthias Klose Thu, 31 Jul 2008 17:16:59 +0200 + +openjdk-6 (6b11-2ubuntu1) intrepid; urgency=low + + * xvfb seems to be broken when running with intrepid and an intrepid kernel. + Nevertheless, run xvfb-run -s "-extension GLX" on the buildds (hardy kernels). + * Stop the buildwatch process after the testsuite finishes. + + -- Matthias Klose Fri, 25 Jul 2008 12:33:44 +0200 + +openjdk-6 (6b11-2) unstable; urgency=low + + * Update IcedTea build infrastructure (20080724). + * debian/buildwatch.sh: Track long building files with no visible output. + * Fix build failure when not running the mauve testsuite. + * Disable running the testsuite for cacao builds (leaving processes around). + * Don't set a soversion for the cacao libjvm. + * Configure with --host and --build. + * Call xvfb-run with -s "-extension GLX". + + -- Matthias Klose Thu, 24 Jul 2008 22:25:30 +0200 + +openjdk-6 (6b11-1ubuntu2) intrepid; urgency=low + + * Update IcedTea build infrastructure (20080724). + * debian/buildwatch.sh: Track long building files with no visible output. + * Fix build failure when not running the mauve testsuite. + * Disable running the testsuite for cacao builds (leaving processes around). + * Don't set a soversion for the cacao libjvm. + * Configure with --host and --build. + + -- Matthias Klose Thu, 24 Jul 2008 17:58:53 +0200 + +openjdk-6 (6b11-1ubuntu1) intrepid; urgency=low + + * Regenerate the control file. + + -- Matthias Klose Wed, 23 Jul 2008 00:42:16 +0200 + +openjdk-6 (6b11-1) unstable; urgency=low + + * New code drop (b11). + * Update IcedTea build infrastructure (20080721). + * debian/generate-dfsg.sh: Update for b11. + * debian/patches/const_strings.patch, debian/patches/issue-6659207.diff: + Remove, applied upstream. + * debian/generate-debian-orig.sh: Fix /proc check. + * debian/control.in: Loosen dependency of -jre-lib on -jre. + * Support `nodocs' in DEB_BUILD_OPTIONS. + * Remove build-dependency on lesstif2-dev. + * Bootstrap using gcj on all archs; the 6b10dfsg-2 packages are broken. + * Run the jtreg harness in a virtual X environment. + * Install javazic.jar in the jre-lib package. + * Don't run the testsuite on arm; the build already takes days; only + run the testsuite on hotspot archs and powerpc. + + -- Matthias Klose Wed, 23 Jul 2008 00:28:12 +0200 + +openjdk-6 (6b10dfsg-2) unstable; urgency=low + + * Update IcedTea build infrastructure (20080714). + * On arm configure cacao builds with --enable-softfloat. + * Don't run the mauve testsuite for cacao builds (hangs the test runner + process). + * Don't configure cacao builds with --enable/-disable-zero. + * Don't remove alternatives on upgrade. + * debian/copyright: Add license for NanoXML. + * Do recommends ttf-indic-fonts instead of ttf-indic-fonts-core for + lenny and sid. Closes: #490619. + * Ignore errors when registering the jar binfmt. The alternative may + already be registered by another JVM. Closes: #490594. + * openjdk-6-jre-headless: Depend on ttf-dejavu-core instead of ttf-dejavu. + * On amd64, i386 and sparc, bootstrap using openjdk. + + -- Matthias Klose Mon, 14 Jul 2008 19:41:19 +0200 + +openjdk-6 (6b10dfsg-1ubuntu2) intrepid; urgency=low + + * Update IcedTea build infrastructure (20080702). + - Do not configure --with-shark by default. + - Update license headers from jdk7. + * Start debian/buildwatch.sh for armel and sparc builds as well. + * Allow configuration with --with-cacao. + + -- Matthias Klose Mon, 30 Jun 2008 13:30:06 +0200 + +openjdk-6 (6b10dfsg-1ubuntu1) intrepid; urgency=low + + * The rebuilt upstream tarball now has GPL-compatible free software licenses + and documented copyrights and licenses. LP: #238569. + * Fixed name of the xulrunner-1.9-javaplugin.so in the .jinfo file. + LP: #226911. + * Ignore errors during activation of class data sharing. Closes: #490617, + #490672. + + -- Matthias Klose Mon, 30 Jun 2008 13:30:06 +0200 + +openjdk-6 (6b10dfsg-1) unstable; urgency=low + + * Rebuild the upstream tar ball: + - Remove the jscheme jar files. + - Apply the patch from Iris Clark (Sun) for the copyright headers + (http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=141#c4). + - Remove jdk/src/share/classes/java/lang/instrument/package.html. + - Upload to main. + * Update IcedTea build infrastructure (20080628). + * Build an openjdk-6-dbg package. + * patches/gcc-mtune-generic.diff: Fix typo. + * openjdk-6-jre: Depend on ttf-dejavu. + * debian/copyright: Add two more copyright holders, not directly + mentioned in the third party readme. + Replace Apache 2.0 license with pointer to common-licenses. + * Fix more lintian warnings. + * debian/sun_java_app.xpm: Downsize icon to 32x32 pixels. + * Build-depend/depend on rhino. + + -- Matthias Klose Sun, 29 Jun 2008 17:42:51 +0200 + +openjdk-6 (6b10-1) unstable; urgency=low + + * New code drop (b10). + - Still some non-compliant license headers found in + openjdk/corba/src/share/classes/com/sun/tools/corba/se/idl. + - Upload to non-free. + * Update IcedTea build infrastructure (20080603). + * In fontconfig.properties, fix Korean font names and add paths to the Luxi + fonts for Motif. Add fonts for Indic languages. + * Install compilefontconfig.jar in openjdk-6-jre-lib package. + * Run the testsuites of hotspot, langtools and jdk. + * Include the jscheme-5.0 sources in the tarball, mention the jscheme + licenses in debian/copyright. + * Use the certificates provided by the ca-certificates-java package. + * More fontconfig updates (Arne Goetje). + * Fix some lintian warnings. + * Correct build-dependency for openjdk based bootstraps. + + -- Matthias Klose Wed, 04 Jun 2008 01:46:52 +0200 + +openjdk-6 (6b09-1~pre1) unstable; urgency=low + + [ Matthias Klose ] + * New code drop (b09). + * Update IcedTea build infrastructure (20080528). + - Add missing color profiles. LP: #225174. + - Moved system properties defined in hotspot to TrustManagerFactoryImpl. + LP: #224455. + * 6636469_v4.diff: Remove, committed in IcedTea. + * debian/control: Update Vcs-* attributes. + * debian/JB-jre-headless.p*.in: Fix update-binfmts calls. + * Compress the man pages, fixing the slave symlinks of the alternatives. + * javaws.desktop: Add `%u' to the Exec key, remove -viewer option. + * openjdk-6-jre-headless: Recommends libnss-mdns. + * openjdk-6-jre-headless: Warn about unmounted /proc file system. + * debian/JB-jre.mime.in: Remove the -viewer option from command (Tan Rui + Boon). + * Add a `docs' symlink pointing to /usr/share/doc/openjdk-6. LP: #218405. + * Set maintainer to the team list. + * Add copyright notices for patches and generated files. + * Add helper scripts to modify upstream tarball and generate the debian + tarball. + * Fix names for browser alternatives in jinfo file, set browser_plugin_dirs + unconditionally. + * Recommend the ttf-wqy-zenhei font instead of ttf-arphic-uming, if the + latter is available in Truetype Collection (TTC) format only, add the + fontconfig changes as a patch. + * Make the cjk font packages configurable in the control file. + * Use GCC-4.3 on all platforms where available. + * Install a config file swing.properties, allowing a user to change + the default look and feel. LP: #229112. + * When trying to determine the executable name reading /proc/self/exe, + discard known prefixes used for unionfs mounts. LP: #224110. + * Explicitely configure with --disable-zero on hotspot architectures. + * Add fix for issue 6659207, access violation in CompilerThread0. + Addresses #478560. Needs checking: LP: #229207. + * Disable building the docs on ia64, powerpc and sparc, we don't build + architecture independent packages on these architectures. + * Explicitely configure --with-parallel-jobs, needed by the updated IcedTea. + * Backport the linux-sparc patches, enable building on sparc. LP: #154080. + * Don't use an absolute path calling the compiler. + * Replace the OpenJDK version in desktop and menu files. + * Install menu files. + * Install openjdk-6-java.desktop in -jre, instead of -jre-headless. + + -- Matthias Klose Wed, 14 May 2008 08:49:54 +0200 + +openjdk-6 (6b08-1) unstable; urgency=low + + [ Torsten Werner ] + * first upload to Debian (Closes: #452750) + * Regenerate debian/control. + * Switch to bzip2 package compression in Debian but leave lzma compression + in Ubuntu. + * Temporarily downgrade Depends: tzdata-java to Recommends until the package + becomes available in Debian. + * Add myself to Uploaders. + * Do not install extras license file in openjdk-6-jre-lib. + * Add patch shebang.diff to fix a lintian warning. + * Install openjdk-6-java.desktop into the correct binary package. + * Improve some package descriptions. + * Remove some empty directories from binary packages. + * Install README.Debian in every binary package and give it some useful + content. + * Install java-rmi.cgi in package openjdk-6-jre-headless and mention it in + README.Debian. + * Install /usr/bin/jexec via update-alternatives. + * Downgrade Depends: java-common (>= 0.28). + * Add patch jexec.diff to make the jexec binary executable without + specifying an absolute path. + * Add Build-Depends: xauth and xfonts-base for mauve. + * Update and install the lintian override files. + * Replace all occurences of binary:Version and source:Version by + Source-Version to be compatible with Ubuntu release 6.06. + * Remove Conflicts: gcjwebplugin. + + [ Michael Koch ] + * Fixed Vcs-Bzr and Vcs-Browser fields. + * Removed Encoding entry from all debian/*.desktop.in files. + + [ Matthias Klose ] + * Make Java Full Screen Exclusive Mode work again with Xorg Server 1.3 + and above (Dan Munckton). LP: #154613 (Java bug 6636469). + * Configure with --enable-zero on all archs except amd64, i386, lpia. + * Update IcedTea build infrastructure. + * Handle binary files in updates of the build infrastructure. + * Enable bootstrap/normal builds per architecture. + * javaws-wrapper.sh: Use readlink --canonicalize. LP: #211515. + * binfmt-support: Handle /usr/share/binfmts/jar as a slave symlink of + the jexec alternative, install the binfmt file in the jre libdir. + Use the jexec alternative in the binfmt file. + * JB-jre-headless.postinst.in: Remove sun-java6 specific chunks. + * Differentiate between the openjdk version required as dependency and + as build dependency. + + -- Torsten Werner Wed, 09 Apr 2008 10:12:55 +0200 + +openjdk-6 (6b08-0ubuntu1) hardy; urgency=low + + * New code drop (b08). + * Update IcedTea build infrastructure. + * Move binfmt-support references from -jre to -jre-headless package. + * Don't fail on purge, if /var/lib/binfmts/openjdk-6 is missing. LP: #206721. + * Only use the basename for icons in desktop files. LP: #207413. + * Install javaws(1). LP: #191297. + * Install a wrapper script for javaws, which calls `javaws -viewer' if no + arguments are given (or else starting javaws from the desktop menu + would not do anything). + * debian/JB-web-start.applications.in: Remove the -viewer option from command. + + -- Matthias Klose Fri, 28 Mar 2008 16:10:32 +0000 + +openjdk-6 (6b07-0ubuntu1) hardy; urgency=low + + * New code drop (b07). + * Update IcedTea build infrastructure. + * debian/copyright: Update to OpenJDK Trademark Notice v1.1. + + -- Matthias Klose Sat, 22 Mar 2008 22:41:42 +0100 + +openjdk-6 (6b06-0ubuntu12) hardy; urgency=low + + * Update icon locations in menu files. + * openjdk-6-jre-headless: Provide java-virtual-machine. LP: #189953. + * openjdk-6-jre-headless: Add a conflict to gcjwebplugin; for openjdk + use the icetea-gcjwebplugin, for gij the java-gcj-compat-plugin. + + -- Matthias Klose Sat, 22 Mar 2008 20:12:41 +0100 + +openjdk-6 (6b06-0ubuntu11) hardy; urgency=low + + * Update IcedTea to 20080319. + * Move rt.jar into the openjdk-6-jre-headless package; sun/awt/X11 + class files differ between amd64 and i386. + * Install all desktop files in /usr/share/applications. + + -- Matthias Klose Wed, 19 Mar 2008 23:53:36 +0100 + +openjdk-6 (6b06-0ubuntu10) hardy; urgency=low + + * Remove print-lsb-release.patch, forwarded to IcedTea. + * Fix IcedTea configure to detect libffi without pkg-config. + + -- Matthias Klose Wed, 12 Mar 2008 20:28:55 +0100 + +openjdk-6 (6b06-0ubuntu9) hardy; urgency=low + + * Build-depend on libffi4-dev on architectures other than amd64, i386, lpia. + * Install icons in /usr/share/pixmaps, not /usr/share/icons. + * debian/rules: Call dh_icons. + + -- Matthias Klose Wed, 12 Mar 2008 11:34:44 +0100 + +openjdk-6 (6b06-0ubuntu8) hardy; urgency=low + + * Tighten dependency on java-common. + * debian/copyright: Include trademark notice. + * debian/control: Mention IcedTea in the package descriptions. + * Update IcedTea to 20080311. + + -- Matthias Klose Tue, 11 Mar 2008 21:39:27 +0100 + +openjdk-6 (6b06-0ubuntu7) hardy; urgency=low + + * Build-depend on unzip. + + -- Matthias Klose Fri, 07 Mar 2008 16:47:43 +0100 + +openjdk-6 (6b06-0ubuntu6) hardy; urgency=low + + * Build-depend on zip. + + -- Matthias Klose Fri, 07 Mar 2008 16:16:52 +0100 + +openjdk-6 (6b06-0ubuntu5) hardy; urgency=low + + * debian/mauve_tests: javax.swing.text.html.HTML.ElementTagAttributeTest, + removed, tries to access the network. + * debian/README.alternatives.in: Update for --jre-headless. + * debian/rules: Fix paths for OpenJDK based bootstrap. + * Compress packages using lzma. + * Drop build dependency on zip, unzip. + * Fix build infrastructure to bootstrap with OpenJDK instead of ecj. + * Do not build the gcjwebplugin from the OpenJDK source. + + -- Matthias Klose Fri, 07 Mar 2008 13:53:15 +0100 + +openjdk-6 (6b06-0ubuntu4) hardy; urgency=low + + * Don't register a java-rmi.cgi alternative in /usr/bin. + + -- Matthias Klose Thu, 06 Mar 2008 17:59:35 +0100 + +openjdk-6 (6b06-0ubuntu3) hardy; urgency=low + + * Split out a openjdk-6-jre-headless package, depend on java-common, + supporting update-java-alternatives --jre-headless. + * Make openjdk-6-jre-headless and openjdk-6-jre architecture any. + * New package openjdk-6-jre-lib (arch all). + * Remove openjdk-6-bin package. + * debian/patches/openjdk-ubuntu-branding.patch: New patch. + * Install images/cursors/cursors.properties as a config file. + * Do not compress demos and examples in the -demo package. + * openjdk-6-jre: Add dependency on libxinerama1. + * Update IcedTea to 20080305. + * Don't generate cacerts ourself, but depend on ca-certificates, + fix location of javax.net.ssl.trustStore property. + * Build-depend on mauve and xvfb; run some mauve tests (the list of + tests taken from the Fedora package). + * Keep a backup of the `generated' directory; some files are regenerated + differently, increasing the size of the diff. + + -- Matthias Klose Thu, 06 Mar 2008 10:05:39 +0100 + +openjdk-6 (6b06-0ubuntu2) hardy; urgency=low + + * Re-add gawk and pkg-config as build dependencies. + + -- Matthias Klose Tue, 04 Mar 2008 12:20:21 +0100 + +openjdk-6 (6b06-0ubuntu1) hardy; urgency=low + + * New code drop (b06). + * Remove java-access-bridge tarball, use an externally built package. + * Update IcedTea to 20080304. + * Don't use any compiler flags from the environment. + + -- Matthias Klose Tue, 04 Mar 2008 09:16:59 +0100 + +openjdk-6 (6b05-0ubuntu1) hardy; urgency=low + + * First public OpenJDK upstream code drop (b05). + * Depend on tzdata-java. + + -- Matthias Klose Fri, 29 Feb 2008 19:05:42 +0100 + +icedtea-java7 (7~b24-1.5+20080118-2) UNRELEASED; urgency=low + + * Fix removal of alternatives. + + -- Matthias Klose Sat, 26 Jan 2008 18:41:40 +0100 + +icedtea-java7 (7~b24-1.5+20080118-1) hardy; urgency=low + + * Fix installation of the plugin for firefox-3.0. + + -- Matthias Klose Sat, 19 Jan 2008 15:10:18 +0100 + +icedtea-java7 (7~b24-1.5+20080118-1~ppa1) hardy; urgency=low + + * Update IcedTea to 20080118. + * Fix another build failure when gcc version != gcj version. + * Use the versioned compiler to build the corba parts. + * Register plugin for firefox-3.0. + * Build using GCC-4.3. + + -- Matthias Klose Fri, 18 Jan 2008 21:15:08 +0100 + +icedtea-java7 (7~b24-1.5-2) UNRELEASED; urgency=low + + * First upload to Debian. Closes: #452750. + * debian/control.in: + - Moved package from universe/devel section to devel. + - Put icedtea-java7-doc into doc section. + - Added Homepage field and removed Homepage pseudo field from + descriptions. + - Updated Standards-Version to 3.7.3. + * debian/rules: + - Check if Makefile exists before called clean in clean target. + * debian/copyright: Converted to UTF-8. + + -- Michael Koch Sat, 05 Jan 2008 13:34:46 -0100 + +icedtea-java7 (7~b24-1.5-1) hardy; urgency=low + + * Update to IcedTea-1.5. + * debian/patches/ssp-interpreter.diff: Use bash to call the ssp script, + backslash handling differs betweend dash and bash. + + -- Matthias Klose Fri, 04 Jan 2008 09:58:27 +0100 + +icedtea-java7 (7~b24-1.5~20071214-1) hardy; urgency=low + + * New upstream snapshot (b24). + * Update java-access-bridge to 1.21.1. + * On powerpc keep the build alive using buildwatch script. + * Do not install menu entries for javaws, ControlPanel. LP: #155553, #156673. + * README.alternatives: Fix example. LP: #157063. + + -- Matthias Klose Fri, 14 Dec 2007 11:09:22 +0100 + +icedtea-java7 (7~b23-1.5~20071124-4) hardy; urgency=low + + * Allow libungif4-dev as alternative build dependency. + * On powerpc keep the build alive using buildwatch script. + * Always build the plugin using libxul-dev. + + -- Matthias Klose Mon, 10 Dec 2007 15:20:16 +0100 + +icedtea-java7 (7~b23-1.5~20071124-3) hardy; urgency=low + + * Lower optimization to -O2 for building the jdk on amd64. + * Reenable parallel build. + * Link using -Bsymbolic-functions. + * debian/patches/arguments.patch, debian/patches/const_strings.patch: + New patches (Arnaud Vandyck). + + -- Matthias Klose Thu, 29 Nov 2007 18:50:41 +0100 + +icedtea-java7 (7~b23-1.5~20071124-2) hardy; urgency=low + + * Bootstrap using ecj/gcj. + * Build using g++-4.1 on i386, lpia, powerpc. + + -- Matthias Klose Wed, 28 Nov 2007 14:46:48 +0000 + +icedtea-java7 (7~b23-1.5~20071124-1) hardy; urgency=low + + * New upstream snapshot (b23). + + -- Matthias Klose Tue, 27 Nov 2007 15:48:08 +0100 + +icedtea-java7 (7~b22-1.5~20071018-0ubuntu3) hardy; urgency=low + + * Revert the previous change, require 7~b22 versions again. + + -- Matthias Klose Sat, 20 Oct 2007 14:33:26 +0000 + +icedtea-java7 (7~b22-1.5~20071018-0ubuntu2) hardy; urgency=low + + * Loosen dependencies to 7~b21, until package is built on all archs. + + -- Matthias Klose Sat, 20 Oct 2007 07:48:36 +0000 + +icedtea-java7 (7~b22-1.5~20071018-0ubuntu1) hardy; urgency=low + + * New upstream snapshot (b22). + * Don't use parallel builds to make the build log better comparable. + + -- Matthias Klose Fri, 19 Oct 2007 19:49:51 +0200 + +icedtea-java7 (7~b21-1.4+20071007-0ubuntu5) gutsy; urgency=low + + * Update icedtea to vcs 20071012 (1.4 release), checked that the plugin + works on amd64. + * debian/copyright: Update "License Headers" section. + + -- Matthias Klose Sun, 14 Oct 2007 19:55:12 +0200 + +icedtea-java7 (7~b21-1.4+20071007-0ubuntu4) gutsy; urgency=low + + * Bootstrapping trigger upload for final step of bootstrapping i386, amd64, + lpia. + + -- LaMont Jones Wed, 10 Oct 2007 22:04:25 -0600 + +icedtea-java7 (7~b21-1.4+20071007-0ubuntu3) gutsy; urgency=low + + * Add build dependency on bzip2. + + -- Matthias Klose Wed, 10 Oct 2007 09:00:40 +0000 + +icedtea-java7 (7~b21-1.4+20071007-0ubuntu2) gutsy; urgency=low + + * Add build dependency on ant. + + -- Matthias Klose Wed, 10 Oct 2007 06:33:14 +0000 + +icedtea-java7 (7~b21-1.4+20071007-0ubuntu1) gutsy; urgency=low + + * Update icedtea to vcs 20071007. + * Update java-access-bridge to 1.20.0. + * Add build-dependency on libxinerama-dev. + * Add Xb-Npp-xxx tags for the -plugin package. + * Name the plugin "GCJ Web Browser Plugin (using IcedTea)", GCJ now + "Great Cool Java" (according to Michael Koch). + * Compress binary-indep packages using bzip2. + + -- Matthias Klose Sun, 7 Oct 2007 23:43:28 +0200 + +icedtea-java7 (7~b21-1.4+20071002-0ubuntu2) gutsy; urgency=low + + * Rebuild using icedtea 7~b21. + + -- Matthias Klose Tue, 02 Oct 2007 19:45:21 +0200 + +icedtea-java7 (7~b21-1.4+20071002-0ubuntu1) gutsy; urgency=low + + * New upstream snapshot (b21). + * Correctly unregister the executable binary format in the -bin package. + * Assemble the debian/copyright file. + + -- Matthias Klose Tue, 2 Oct 2007 09:59:37 +0200 + +icedtea-java7 (7~b19-1.3+20070905-0ubuntu1) gutsy; urgency=low + + * New upstream snapshot (b19). + * Build using g++-4.2 on amd64, using g++-4.1 on i386 and lpia. + * Build without -Werror, upstream source is not yet warning clean. + * Support DEB_BUILD_OPTIONS=parallel=. + * Add build dependency on wget. + * Add font suggestions. + * Changed font configuration to fix CJK font support (Arne Goetje). + * Fix location of the plugin, when registering the plugin alternatives. + + -- Matthias Klose Thu, 6 Sep 2007 00:46:40 +0200 + +icedtea-java7 (7~b18-1.2+20070822-0ubuntu2) gutsy; urgency=low + + * Create browser plugin directories. + * Build-depend on liblcms1-dev. + * Recommend packages with dlopened libraries: liblcms1, lesstif2, libcupsys2, + libgtk2.0-0, libgnome2-0, libgnomevfs2-0, libgconf2-4, libxrandr2, + libgl1-mesa-glx. + + -- Matthias Klose Tue, 21 Aug 2007 17:21:00 +0200 + +icedtea-java7 (7~b18-1.2+20070822-0ubuntu1) gutsy; urgency=low + + * New upstream version. + * Include java-access-bridge. + * Build -doc, -plugin packages. + * Register alternatives, priority 1060. + + -- Matthias Klose Tue, 21 Aug 2007 17:21:00 +0200 + +icedtea-java7 (7~b17-1.2+20070808-1) gutsy; urgency=low + + * Initial release, discard the initial packaging based on cdbs. + * Base the packaging on the sun-javaX packages. + + -- Matthias Klose Wed, 08 Aug 2007 15:55:39 +0200 + +icedtea (7~b16-20070724-1) UNRELEASED; urgency=low + + * Update upstream tarball to 7~b16, update icedtea to 20070724. + * debian/control: Build-depend on libfreetype6-dev. + * debian/rules: Configure --with-jar=/usr/bin/fastjar. + * Build using gcj-4.2. + + -- Matthias Klose Tue, 24 Jul 2007 11:24:55 +0200 + +icedtea (7~b14-20070704-1) unstable; urgency=low + + * Initial version. + + -- Michael Koch Wed, 04 Jul 2007 08:25:31 -0100 --- openjdk-6-6b16~pre5.orig/debian/JB-demo.overrides.in +++ openjdk-6-6b16~pre5/debian/JB-demo.overrides.in @@ -0,0 +1,2 @@ +# /bin/sh is a known, and available interpreter +@basename@-demo: menu-command-not-in-package --- openjdk-6-6b16~pre5.orig/debian/JB-jre-headless.prerm.in +++ openjdk-6-6b16~pre5/debian/JB-jre-headless.prerm.in @@ -0,0 +1,25 @@ +#!/bin/sh -e + +basedir=/@basedir@ +basediralias=/@basediralias@ +jre_tools='@jre_hl_tools@' + +rm -f $basedir/jre/lib/@archdir@/client/classes.jsa + +if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then + for i in $jre_tools; do + update-alternatives --remove $i $basediralias/jre/bin/$i + done + + if which update-binfmts >/dev/null; then + # try to remove and ignore the error + if [ -e /var/lib/binfmts/@basename@ ]; then + update-binfmts --package @basename@ \ + --remove jar /usr/bin/jexec || true + fi + fi + + update-alternatives --remove jexec $basediralias/jre/lib/jexec +fi + +#DEBHELPER# --- openjdk-6-6b16~pre5.orig/debian/javaws-wrapper.sh +++ openjdk-6-6b16~pre5/debian/javaws-wrapper.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +prog="$0" +while [ -h "$prog" ]; do prog=$(readlink -f $prog); done +[ $# -eq 0 ] && set -- -viewer +exec $(dirname $prog)/javaws.real "$@" --- openjdk-6-6b16~pre5.orig/debian/control.cacao-jre +++ openjdk-6-6b16~pre5/debian/control.cacao-jre @@ -0,0 +1,13 @@ + +Package: icedtea-6-jre-cacao +Architecture: @cacao_archs@ +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre-headless (= @pkg_version@), ${shlibs:Depends}, ${misc:Depends} +Provides: icedtea6-jre-cacao +Description: Alternative JVM for OpenJDK, using Cacao + The package provides an alternative runtime using the Cacao VM and the + Cacao Just In Time Compiler (JIT). This is a somewhat faster alternative + than the Zero port on architectures like alpha, armel, m68k, mips, mipsel, + powerpc and s390. + . + The VM is started with the option `-cacao'. See the README.Debian for details. --- openjdk-6-6b16~pre5.orig/debian/sun_java.xpm +++ openjdk-6-6b16~pre5/debian/sun_java.xpm @@ -0,0 +1,194 @@ +/* XPM */ +static char *sun_java[] = { +/* columns rows colors chars-per-pixel */ +"32 32 156 2", +" c #34479E", +". c #4152A3", +"X c #4153A2", +"o c #4153A3", +"O c #4D5EA8", +"+ c #4D5EA9", +"@ c #4E5EA9", +"# c #5A69AD", +"$ c #5A69AE", +"% c #5A69AF", +"& c #5A6AAD", +"* c #6675B3", +"= c #6775B2", +"- c #6775B3", +"; c #6776B3", +": c #6775B5", +"> c #6776B4", +", c #7480B7", +"< c #7380B8", +"1 c #7381B8", +"2 c #7380BA", +"3 c #7481B8", +"4 c #D12124", +"5 c #D42F31", +"6 c #D73D3E", +"7 c #D94A4A", +"8 c #D94A4B", +"9 c #DA4A4A", +"0 c #DA4B4B", +"q c #DC5957", +"w c #DC5858", +"e c #DD5859", +"r c #DD5959", +"t c #DF6664", +"y c #E06664", +"u c #E27471", +"i c #E27570", +"p c #E27472", +"a c #E37472", +"s c #E27574", +"d c #E37474", +"f c #E5827E", +"g c #E5837F", +"h c #818BBD", +"j c #818CBC", +"k c #808CBE", +"l c #818DC0", +"z c #8D97C2", +"x c #8D97C3", +"c c #8D97C5", +"v c #8E98C5", +"b c #99A2C7", +"n c #99A3C7", +"m c #99A2C8", +"M c #99A3C8", +"N c #99A2CA", +"B c #99A2CB", +"V c #A6AECD", +"C c #A5AED2", +"Z c #A6AED0", +"A c #B3B9D3", +"S c #B2B9D4", +"D c #B3B9D5", +"F c #B2B9D6", +"G c #B3BAD5", +"H c #BFC4D6", +"J c #BFC5D7", +"K c #BFC5D8", +"L c #BFC5D9", +"P c #BFC5DA", +"I c #BFC5DB", +"U c #BFC5DC", +"Y c #BFC5DD", +"T c #E58381", +"R c #E68380", +"E c #E88F89", +"W c #E88F8B", +"Q c #E8908A", +"! c #EB9D99", +"~ c #EB9D9A", +"^ c #EB9D9D", +"/ c #EDABA2", +"( c #EEABA6", +") c #EDACA6", +"_ c #F0B9B1", +"` c #F1B9B1", +"' c #F0B9B6", +"] c #F3C7BD", +"[ c #CCD0DA", +"{ c #CCD1DA", +"} c #CDD0DA", +"| c #CCD0DC", +" . c #CCD0DD", +".. c #CCD1DD", +"X. c #CCD0DE", +"o. c #CCD1DE", +"O. c #CCD1DF", +"+. c #D8DBDF", +"@. c #CCD0E0", +"#. c #D8DCE1", +"$. c #D9DCE1", +"%. c #D9DCE3", +"&. c #D9DCE4", +"*. c #D9DCE5", +"=. c #D9DCE6", +"-. c #D9DCE7", +";. c #D9DCE8", +":. c #F6D5CB", +">. c #F6D5CD", +",. c #F6D5D3", +"<. c #F9E3D7", +"1. c #F9E3DA", +"2. c #F9E3DB", +"3. c #E6E7E7", +"4. c #E5E7E9", +"5. c #E5E7EC", +"6. c #E5E8E8", +"7. c #E6E8E9", +"8. c #E6E8EA", +"9. c #E6E8EB", +"0. c #E5E8EC", +"q. c #E6E8EC", +"w. c #F9E3E1", +"e. c #F2F3EC", +"r. c #FCF0E1", +"t. c #FCF0E3", +"y. c #FCF1E5", +"u. c #FCF0E7", +"i. c #FCF1E6", +"p. c #FCF1E7", +"a. c #FCF1E8", +"s. c #FFFEED", +"d. c #FFFEEE", +"f. c #FFFEEF", +"g. c #F2F3F0", +"h. c #F2F3F1", +"j. c #F2F3F2", +"k. c #F2F3F4", +"l. c #FFFEF0", +"z. c #FFFEF1", +"x. c #FFFEF2", +"c. c #FFFEF3", +"v. c #FFFFF3", +"b. c #FFFFF4", +"n. c #FFFFF5", +"m. c #FFFFF6", +"M. c #FFFFF7", +"N. c #FFFFF8", +"B. c #FFFFF9", +"V. c #FFFFFA", +"C. c #FFFFFB", +"Z. c #FFFFFC", +"A. c #FFFFFD", +"S. c #FFFFFE", +"D. c gray100", +"F. c None", +/* pixels */ +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.w.~ F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.r F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.' q F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.M.q u F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.M.M.! 4 1.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.M.M.f 4 E M.M.F.w.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.M.i.t 4 i x.1.g u ,.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.M.>.7 4 f r.f 5 ! C.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.1.5 4 / r.7 5 >.M.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.M.q 4 E d.i 4 >.M.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.M.4 5 d.d.4 6 x.x.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.7 7 d.d.4 4 :.M.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.M./ 4 <.x.q 4 7 i.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.M.u t x.] 4 4 ) M.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.u.7 _ x.E 4 ! M.M.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.h.@.4.M.i.u i._ 5 i.M.F.-.N : c @.M.F.F.F.F.F.", +"F.F.F.F.F.F.k.B O h P x.x.M.x.i.a :.x.M.9.L @.L O c M.F.F.F.F.", +"F.F.F.F.F.F.> X c n b n n n n h = & X v M.M.M.8. M.F.F.F.F.", +"F.F.F.F.F.F.F.+...N n n n N N n J ..4.M.M.M.x.M.M. M.F.F.F.F.", +"F.F.F.F.F.F.F.M.+.O ..x.d.x.d.x.x.3.L 8.M.M.M.x. . X M.F.F.F.F.", +"F.F.F.F.F.F.F.M.F X = = = = O 8.M.M.h.& S M.F.F.F.F.", +"F.F.F.F.F.F.F.M.M...z = = = = = j V %.x.F.M.9.% S M.F.F.F.F.F.", +"F.F.F.F.F.F.F.M.M.4.n d.d.d.d.x.d.x.M.M.M.S X l 5.F.M.F.F.F.F.F.", +"F.F.F.F.F.F.M.M.x.= O = = = = o = -.-.S h.M.F.M.F.F.F.F.F.F.", +"F.F.F.F.F.M.-.{ { %., , A x.M.M.M.M.M.F.F.F.F.F.F.F.", +"F.F.F.F.F O , J e.x.d.d.{ { { +.x.x.x.M.M.M.M.M.=.Y F.F.F.F.F.F.", +"F.F.F.F. O z H %.d.x.x.d.d.d.d.x.x.x.x...K N O C C.F.F.F.F.F.", +"F.F.F.F.N O # = = = = = O O L C.F.F.F.F.F.F.", +"F.F.F.F.M.M.%.V > & O = N =.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.M.M.M.M.x.x.M.M.M.M.M.M.M.M.M.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F." +}; --- openjdk-6-6b16~pre5.orig/debian/control.in +++ openjdk-6-6b16~pre5/debian/control.in @@ -0,0 +1,120 @@ +Source: @basename@ +Section: java +Priority: extra +Maintainer: OpenJDK Team +Uploaders: Michael Koch , Torsten Werner , Matthias Klose +Build-Depends: debhelper (>= 5), autotools-dev, @bd_compress@, m4, lsb-release, wget, zip, unzip, sharutils, gawk, cpio, pkg-config, procps, automake, autoconf, ant, @bd_cacao@ @bd_gcc@ @bd_bootstrap@ @bd_openjdk@ @bd_zero@ @bd_shark@ @bd_syslibs@ @bd_plugin@ @bd_netx@ @bd_pulsejava@ @bd_systemtap@ @bd_mauve@ +Standards-Version: 3.8.2 +Homepage: http://openjdk.java.net/ +Vcs-Bzr: bzr+ssh://@bazaar.launchpad.net/~openjdk/openjdk/openjdk6 +Vcs-Browser: https://code.launchpad.net/~openjdk/openjdk/openjdk6 + +Package: @basename@-jdk +Architecture: any +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre (>= @pkg_version@), ${shlibs:Depends}, ${misc:Depends} +Recommends: libxt-dev +Suggests: @basename@-demo, @basename@-source, visualvm +Provides: java-sdk, java2-sdk, java5-sdk, java6-sdk, java-compiler +Description: OpenJDK Development Kit (JDK) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: @basename@-jre-headless +Architecture: any +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre-lib (>= @pkg_version@), ca-certificates-java, tzdata-java, rhino, java-common (>= 0.28), ${dlopenhl:Depends}, ${shlibs:Depends}, ${misc:Depends} +Recommends: ${dlopenjl:Recommends}, ${cacao:Recommends} +Suggests: libnss-mdns, sun-java6-fonts, @core_fonts@, @cjk_fonts@ +Provides: java-virtual-machine, java-runtime-headless, java2-runtime-headless, java5-runtime-headless, java6-runtime-headless +Replaces: @basename@-jre-lib (<< 6b06-0ubuntu11), @basename@-jre (<< 6b09dfsg-0ubuntu2) +Description: OpenJDK Java runtime, using ${vm:Name} (headless) + Minimal Java runtime - needed for executing non GUI Java programs. + Using ${vm:Name}. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: @basename@-jre +Architecture: any +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre-headless (>= @pkg_version@), ${xandsound:Depends}, ${shlibs:Depends}, ${dlopenjre:Depends}, ${misc:Depends}, ${dep:bridge} +Recommends: ${dlopenjre:Recommends}, ${pkg:pulseaudio} +Suggests: icedtea6-plugin +Conflicts: icedtea-gcjwebplugin (<< 1.0-1ubuntu4) +Replaces: openjdk-6-jre-headless (<< 6b16~pre3) +Provides: java-runtime, java2-runtime, java5-runtime, java6-runtime +Description: OpenJDK Java runtime, using ${vm:Name} + Full Java runtime environment - needed for executing Java GUI and Webstart + programs. Using ${vm:Name}. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: @basename@-jre-lib +Architecture: @lib_arch@ +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre-headless (>= ${base:Version}), ${misc:Depends} +Recommends: ${dlopen:Recommends} +Description: OpenJDK Java runtime (architecture independent libraries) + OpenJDK Java runtime, using ${vm:Name}. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: @basename@-demo +Architecture: any +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre (>= @pkg_version@), ${shlibs:Depends}, ${misc:Depends} +Description: Java runtime based on OpenJDK (demos and examples) + OpenJDK Java runtime + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: @basename@-source +Architecture: all +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre (>= @pkg_version@), @basename@-jdk (>= @pkg_version@) +Description: OpenJDK Development Kit (JDK) source files + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the Java programming language source files + (src.zip) for all classes that make up the Java core API. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: @basename@-doc +Section: doc +Pre-Depends: ${dpkg:Depends} +Architecture: all +Suggests: @basename@-jdk +Description: OpenJDK Development Kit (JDK) documentation + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the API documentation. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: @basename@-dbg +Architecture: any +Section: debug +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre-headless (= @pkg_version@) +Recommends: @basename@-jre (= @pkg_version@) +Suggests: @basename@-jdk (= @pkg_version@) +Description: Java runtime based on OpenJDK (debugging symbols) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the debugging symbols. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. --- openjdk-6-6b16~pre5.orig/debian/swing.properties +++ openjdk-6-6b16~pre5/debian/swing.properties @@ -0,0 +1,2 @@ +# uncomment to set the default look and feel to GTK +#swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel --- openjdk-6-6b16~pre5.orig/debian/JB-jre.mime.in +++ openjdk-6-6b16~pre5/debian/JB-jre.mime.in @@ -0,0 +1 @@ +application/x-java-jnlp-file; /@basedir@/jre/javaws/javaws %s --- openjdk-6-6b16~pre5.orig/debian/JB-jre-lib.overrides.in +++ openjdk-6-6b16~pre5/debian/JB-jre-lib.overrides.in @@ -0,0 +1,6 @@ +# The package *-jre-lib depends on *-jre via *-jre-headless and +# libaccess-bridge-java. Lintian is wrong here. +@basename@-jre-lib binary: usr-share-doc-symlink-without-dependency @basename@-jre + +# no separate directory for image files +@basename@-jre-lib binary: image-file-in-usr-lib --- openjdk-6-6b16~pre5.orig/debian/JB-jconsole.desktop.in +++ openjdk-6-6b16~pre5/debian/JB-jconsole.desktop.in @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=@vendor@ Java @RELEASE@ Console +Name[fi]=@vendor@ Java @RELEASE@ - konsoli +Comment=@vendor@ Java @RELEASE@ Monitoring & Management Console +Comment[fi]=@vendor@ Java @RELEASE@ - valvonta- ja hallintakonsoli +Exec=/@basedir@/bin/jconsole +Terminal=false +Type=Application +Icon=@basename@ +Categories=Application;System; --- openjdk-6-6b16~pre5.orig/debian/JB-jre.overrides.in +++ openjdk-6-6b16~pre5/debian/JB-jre.overrides.in @@ -0,0 +1,7 @@ +# It seems to be acceptable to use rpath for private libraries like the +# jdk is doing it. Check http://wiki.debian.org/RpathIssue for more +# information. +@basename@-jre binary: binary-or-shlib-defines-rpath + +# the doc directory and the symlink are in @basename@-jre-headless +@basename@-jre binary: no-copyright-file --- openjdk-6-6b16~pre5.orig/debian/PLUGIN.prerm.in +++ openjdk-6-6b16~pre5/debian/PLUGIN.prerm.in @@ -0,0 +1,18 @@ +#!/bin/sh -e + +browser_dirs="@browser_dirs@" +PLUGIN=@plugin_name@ +PLUGINPTH=/@basediralias@/jre/lib/@archdir@/$PLUGIN + +for browser_dir in $browser_dirs; do + if [ $browser_dir = xulrunner-addons ]; then + browser=xulrunner-1.9 + else + browser=$browser_dir + fi + update-alternatives --quiet --remove \ + $browser-javaplugin.so \ + $PLUGINPTH +done + +#DEBHELPER# --- openjdk-6-6b16~pre5.orig/debian/JB-java.desktop.in +++ openjdk-6-6b16~pre5/debian/JB-java.desktop.in @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=@vendor@ Java @RELEASE@ Runtime +Name[fi]=@vendor@ Java @RELEASE@ - ajonaikainen ympäristö +Comment=@vendor@ Java @RELEASE@ Runtime +Comment[fi]=@vendor@ Java @RELEASE@ - ajonaikainen ympäristö +Exec=/@basedir@/bin/java -jar +Terminal=false +Type=Application +Icon=@basename@ +MimeType=application/x-java-archive;application/java-archive;application/x-jar; +NoDisplay=true --- openjdk-6-6b16~pre5.orig/debian/JB-jdk.menu.in +++ openjdk-6-6b16~pre5/debian/JB-jdk.menu.in @@ -0,0 +1,7 @@ +?package(@basename@-jdk):\ + needs="x11"\ + section="Applications/System/Administration"\ + title="@vendor@ Java @RELEASE@ Console"\ + command="/@basedir@/bin/jconsole"\ + icon="/usr/share/pixmaps/@basename@.xpm"\ + hints="Java2" --- openjdk-6-6b16~pre5.orig/debian/rules +++ openjdk-6-6b16~pre5/debian/rules @@ -0,0 +1,1391 @@ +#!/usr/bin/make -f +# -*- makefile -*- + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +unexport LANG LC_ALL + +SHELL = /bin/bash + +vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1))) + +DPKG_VARS := $(shell dpkg-architecture) +DEB_HOST_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE) +DEB_HOST_ARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH) + +# don't use it on 64bit archs +ifeq (,$(filter $(DEB_HOST_ARCH), alpha amd64 hppa ppc64 s390x)) + PATH := $(CURDIR)/bin:$(PATH) + export PATH +endif + +CHANGELOG_VARS := $(shell dpkg-parsechangelog | sed -n 's/ /_/g;/^[^_]/s/^\([^:]*\):_\(.*\)/\1=\2/p') +PKGSOURCE := $(call vafilt,$(CHANGELOG_VARS),Source) +PKGVERSION := $(call vafilt,$(CHANGELOG_VARS),Version) + +hotspot_archs = amd64 i386 lpia sparc +shark_archs = amd64 i386 lpia +no_bootstrap_archs = alpha armel + +VENDOR = openjdk +Vendor = OpenJDK +TOP = usr/lib/jvm +jdirname = java-$(shortver)-$(origin) +origin = openjdk +basename = openjdk-$(shortver) +ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs))) + priority = 1061 + vm_name = Hotspot JIT +else ifneq (,$(filter $(DEB_HOST_ARCH), $(shark_archs))) + priority = 1059 + vm_name = Hotspot Shark +else + priority = 1057 + vm_name = Hotspot Zero +endif +p_lib_arch = all +jvmver = 1.6.0 +shortver = 6 +jdiralias = java-$(shortver)-$(origin) +basedir = usr/lib/jvm/$(jdiralias) +jreimg = openjdk/build/linux-$(jvmarch)/j2re-image +sdkimg = openjdk/build/linux-$(jvmarch)/j2sdk-image +security = etc/$(jdiralias)/security + +# Support parallel= in DEB_BUILD_OPTIONS (see #209008) +COMMA=, +SPACE = $(EMPTY) $(EMPTY) +ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) + NJOBS = $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) + HOTSPOT_BUILD_JOBS = $(NJOBS) + ALT_PARALLEL_COMPILE_JOBS = $(NJOBS) + export HOTSPOT_BUILD_JOBS + export ALT_PARALLEL_COMPILE_JOBS +endif + +# make the build log comparable +#export HOTSPOT_BUILD_JOBS = 1 +#export ALT_PARALLEL_COMPILE_JOBS = 1 + +with_check = $(if $(findstring nocheck, $(DEB_BUILD_OPTIONS)),,yes) +with_docs = $(if $(findstring nodocs, $(DEB_BUILD_OPTIONS)),,yes) +ifneq (,$(findstring cacao shark, $(PKGSOURCE))) + with_docs = disabled for cacao and shark +endif + +with_plugin_pkg = yes +plugin_name = IcedTeaPlugin.so + +distribution := $(shell lsb_release --id --short) +distrel := $(shell lsb_release --codename --short) + +with_wgy_zenhai = $(if $(filter $(distrel),hardy intrepid jaunty karmic squeeze sid),yes) + +arch_map := alpha=alpha arm=arm armel=arm amd64=amd64 hppa=parisc i386=i586 lpia=i586 m68k=m68k mips=mips mipsel=mipsel powerpc=ppc sparc=sparc s390=s390 ia64=ia64 +archdir_map := alpha=alpha arm=arm armel=arm amd64=amd64 hppa=parisc i386=i386 lpia=i386 m68k=m68k mips=mips mipsel=mipsel powerpc=ppc sparc=sparc s390=s390 ia64=ia64 + +jvmarch := $(strip $(patsubst $(DEB_HOST_ARCH)=%, %, \ + $(filter $(DEB_HOST_ARCH)=%, $(arch_map)))) +archdir := $(strip $(patsubst $(DEB_HOST_ARCH)=%, %, \ + $(filter $(DEB_HOST_ARCH)=%, $(archdir_map)))) + +default_vm = $(if $(filter $(DEB_HOST_ARCH), $(hotspot_archs)),hotspot,zero) + +stage1_gcj_archs = amd64 hppa i386 ia64 lpia powerpc m68k mips mipsel sparc s390 +stage1_openjdk_archs = alpha armel +stage1_cacao_archs = + +# FIXME: broken with ecj-3.5 +stage1_gcj_archs = +stage1_openjdk_archs = alpha armel amd64 hppa i386 ia64 lpia powerpc m68k mips mipsel sparc s390 + +cacao_archs = alpha amd64 armel i386 lpia powerpc m68k mips mipsel s390 +altzero_archs = $(filter-out sparc, $(hotspot_archs)) + +ifneq (,$(filter $(DEB_HOST_ARCH), $(cacao_archs))) + alternate_vms += cacao +endif +ifneq (,$(filter $(DEB_HOST_ARCH), $(altzero_archs))) + ifneq (,$(filter $(DEB_HOST_ARCH), $(shark_archs))) + alternate_vms += shark + else + alternate_vms += zero + endif +endif + +ifneq (,$(filter $(DEB_HOST_ARCH), $(stage1_gcj_archs))) + STAGE1_JAVA = gcj + STAGE1_HOME = /usr/lib/jvm/java-gcj +else ifneq (,$(filter $(DEB_HOST_ARCH), $(stage1_openjdk_archs))) + STAGE1_JAVA = openjdk + STAGE1_HOME = /usr/lib/jvm/java-6-openjdk +else ifneq (,$(filter $(DEB_HOST_ARCH), $(stage1_cacao_archs))) + STAGE1_JAVA = cacao + STAGE1_HOME = /usr/lib/jvm/java-6-cacao +else + $(error unknown bootstrap method for architecture $(DEB_HOST_ARCH)) +endif + +OPENJDK_VERSION = b16 +OPENJDK_SRC_ZIP = openjdk-6-src-$(OPENJDK_VERSION)-24_apr_2009-dfsg.tar.gz +# the version of the build dependency for non-bootstrap builds; only adjust if +# the package is installable on all these architectures. +req_openjdk_bd_ver = 6b14 +req_openjdk_ver = 6b14 + +unexport CFLAGS CXXFLAGS CPPFLAGS FFLAGS LDFLAGS + +ifneq (,$(filter $(distrel),hardy gutsy feisty edgy dapper)) + ifneq (,$(filter $(DEB_HOST_ARCH), i386 lpia)) + export GCC_SUFFIX = -4.1 + GCJ_SUFFIX = -4.2 + endif + ifneq (,$(filter $(DEB_HOST_ARCH), amd64 powerpc sparc)) + export GCC_SUFFIX = -4.2 + endif +else ifneq (,$(filter $(distrel),lenny intrepid jaunty)) + export GCC_SUFFIX = -4.3 + export GCJ_SUFFIX = -4.3 +else + export GCC_SUFFIX = -4.4 + export GCJ_SUFFIX = -4.4 +endif + +ifneq (,$(filter $(distrel),jaunty karmic unstable experimental sid)) + with_pulse = yes +endif + +ifneq (,$(filter $(distrel),karmic sid squeeze)) + with_jni_bridge = yes +endif + +#ifneq (,$(filter $(distrel),karmic unstable experimental sid)) +# with_systemtap = yes +#endif + +with_hotspot = new +ifneq (,$(filter $(distrel),gutsy feisty edgy dapper hardy intrepid)) + with_hotspot = original +endif + +ifeq ($(with_hotspot),original) +# $(if $(filter $(distribution),Ubuntu),debian/patches/gcc-no-stack-protector-original.diff) \ + + DISTRIBUTION_PATCHES = \ + debian/patches/ld-symbolic-functions-original.diff \ + debian/patches/set-exec-name-original.diff +else +# FIXME: doesn't seem to be enough, the gcc-*-no-stack-protector patches below are needed. +# $(if $(filter $(distribution),Ubuntu),debian/patches/gcc-no-stack-protector.diff) \ + + DISTRIBUTION_PATCHES = \ + debian/patches/ld-symbolic-functions.diff \ + debian/patches/set-exec-name.diff \ + debian/patches/hotspot-warn-no-errformat.diff +endif + +DISTRIBUTION_PATCHES += \ + debian/patches/shebang.diff \ + debian/patches/jexec.diff \ + $(if $(with_wgy_zenhai),,debian/patches/fontconfig-arphic-uming.diff) \ + debian/patches/no-compiler-path.diff \ + debian/patches/jdk-freetypeScaler-crash.diff \ + debian/patches/icedtea-pretend-memory.diff \ + debian/patches/default-jvm-cfg.diff \ + debian/patches/nonreparenting-wm.diff \ + debian/patches/java-access-bridge-security.patch \ + debian/patches/accessible-toolkit.patch \ + debian/patches/default-libpath.diff \ + +# debian/patches/gcc-mtune-generic.diff \ + +ifneq (,$(filter $(distrel),hardy gutsy feisty edgy dapper)) + DISTRIBUTION_PATCHES += \ + $(if $(filter $(DEB_HOST_ARCH), amd64), debian/patches/gcc-jdk-opt-O2.diff) \ + $(if $(filter $(DEB_HOST_ARCH), powerpc), debian/patches/gcc-opt-O2.diff) +endif + +ifeq ($(distribution),Ubuntu) + DISTRIBUTION_PATCHES += \ + debian/patches/openjdk-ubuntu-branding.patch \ + debian/patches/gcc-jdk-no-stack-protector.diff + ifeq ($(with_hotspot),original) + DISTRIBUTION_PATCHES += \ + debian/patches/gcc-hotspot-no-stack-protector-original.diff + else + DISTRIBUTION_PATCHES += \ + debian/patches/gcc-hotspot-no-stack-protector.diff + endif +endif + +ifneq (,$(filter $(DEB_HOST_ARCH),armel)) + DISTRIBUTION_PATCHES += \ + debian/patches/zero-notice-safepoints.diff +endif + +export DISTRIBUTION_PATCHES + +ifeq ($(STAGE1_JAVA),gcj) + CONFIGURE_ARGS = \ + --with-gcj-home=$(STAGE1_HOME) \ + --with-ecj=/usr/bin/ecj \ + --with-java=$(STAGE1_HOME)/bin/java \ + --with-javah=/usr/bin/gjavah$(GCJ_SUFFIX) \ + --with-rmic=/usr/bin/grmic$(GCJ_SUFFIX) + ifeq (,$(filter ia64, $(DEB_HOST_ARCH))) + CONFIGURE_ARGS += \ + --with-jar=/usr/bin/fastjar + endif + build_target = icedtea-against-icedtea +else ifeq ($(STAGE1_JAVA),openjdk) + CONFIGURE_ARGS = \ + --with-openjdk=$(STAGE1_HOME) + build_target = #icedtea-against-icedtea +else ifeq ($(STAGE1_JAVA),cacao) + CONFIGURE_ARGS = \ + --with-openjdk=$(STAGE1_HOME) + build_target = #icedtea-against-icedtea +endif + +CONFIGURE_ARGS += --with-pkgversion="$(PKGVERSION)" + +# there are problems --with-alt-jar=/usr/bin/fastjar, +# see http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=217 +# only use it for zero ports except powerpc (which we assume as +# fast enough to build. +ifeq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs) ia64 powerpc)) + CONFIGURE_ARGS += --with-alt-jar=/usr/bin/fastjar +endif + +CONFIGURE_ARGS += \ + --with-xalan2-jar=/usr/share/java/xalan2.jar \ + --with-xalan2-serializer-jar=/usr/share/java/serializer.jar \ + --with-rhino=/usr/share/java/js.jar \ + --with-hotspot-src-zip=$(firstword $(wildcard $(CURDIR)/hotspot-*.tar.gz /usr/src/hotspot-*.tar.gz)) \ + --with-openjdk-src-zip=$(firstword $(wildcard $(CURDIR)/$(OPENJDK_SRC_ZIP) /usr/src/$(OPENJDK_SRC_ZIP))) + +ifneq (,$(filter $(DEB_HOST_ARCH), $(cacao_archs))) + CONFIGURE_ARGS += \ + --with-cacao-src-zip=$(firstword $(wildcard $(CURDIR)/cacao-*.tar.* /usr/src/cacao-*.tar.*)) + ifneq (,$(filter $(DEB_HOST_ARCH), armel)) + EXTRA_BUILD_ENV = CACAO_CONFIGURE_ARGS='--enable-softfloat --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE)' + else + EXTRA_BUILD_ENV = CACAO_CONFIGURE_ARGS='--host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE)' + endif +endif + +ifeq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs))) + CONFIGURE_ARGS += --enable-zero + ifneq (,$(filter $(DEB_HOST_ARCH), $(shark_archs))) + CONFIGURE_ARGS += --enable-shark + endif +endif + +ifeq ($(with_hotspot),original) + CONFIGURE_ARGS += --without-hotspot-build +else + CONFIGURE_ARGS += --with-hotspot-build +endif + +EXTRA_BUILD_ENV += LIBFFI_LIBS=-lffi_pic + +# assume we don't build binary indep packages on these architectures +ifeq ($(with_docs),yes) + ifeq (,$(filter $(DEB_HOST_ARCH), amd64 i386 lpia)) + CONFIGURE_ARGS += --disable-docs + endif +else + CONFIGURE_ARGS += --disable-docs +endif + +ifneq (,$(NJOBS)) + CONFIGURE_ARGS += --with-parallel-jobs=$(NJOBS) +endif + +ifeq ($(with_plugin_pkg),yes) + CONFIGURE_ARGS += --enable-liveconnect +else + CONFIGURE_ARGS += --disable-liveconnect +endif + +ifeq ($(with_pulse),yes) + CONFIGURE_ARGS += --enable-pulse-java +endif + +ifeq ($(with_systemtap),yes) + CONFIGURE_ARGS += --enable-systemtap --with-abs-install-dir=/$(basedir) +endif + +ifneq (,$(alternate_vms)) + CONFIGURE_ARGS += --with-additional-vms=$(subst $(SPACE),$(COMMA),$(alternate_vms)) +endif + +CONFIGURE_ARGS += --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) + +# (most) jre and jdk tools handled by the alternatives system. +# dups in heimdal-clients, krb5-user: kinit, klist, ktab, no alternatives +all_jre_tools = $(notdir $(wildcard build/$(jreimg)/bin/*)) +jre_tools = $(filter javaws pluginappletviewer policytool, $(all_jre_tools)) +jre_hl_tools := $(filter-out $(jre_tools), $(all_jre_tools)) + +corba_tools = orbd servertool tnameserv +jre_hl_tools_alt= $(filter-out $(corba_tools), $(jre_hl_tools)) $(corba_tools) +jre_tools_alt = $(filter-out kinit klist ktab, $(jre_tools)) + +all_jdk_tools = $(notdir $(wildcard build/$(sdkimg)/bin/*)) +jdk_tools = $(filter-out $(all_jre_tools), $(all_jdk_tools)) +jdk_tools_alt = $(filter-out java-rmi.cgi, $(jdk_tools)) + +ifeq ($(distribution),Ubuntu) + pkg_compress = lzma +else + pkg_compress = bzip2 +endif + +# build dependencies +bd_bootstrap = +ifneq (,$(stage1_gcj_archs)) + bd_bootstrap += \ + ecj-gcj [$(strip $(foreach a,$(stage1_gcj_archs), $(a)))], + ifneq (,$(filter $(distrel),karmic unstable experimental)) + bd_bootstrap += \ + gcj-jdk [$(strip $(foreach a,$(stage1_gcj_archs), $(a)))], + else + bd_bootstrap += \ + gcj (>= 4:4.2.1) [$(strip $(foreach a,$(stage1_gcj_archs), $(a)))], \ + java-gcj-compat-dev (>= 1.0.76-2ubuntu3) [$(strip $(foreach a,$(stage1_gcj_archs), $(a)))], + endif +endif +ifneq (,$(stage1_openjdk_archs)) + bd_bootstrap += \ + openjdk-6-jdk (>= $(req_openjdk_bd_ver)) [$(strip $(foreach a,$(stage1_openjdk_archs), $(a)))], +endif +ifneq (,$(stage1_cacao_archs)) + bd_bootstrap += \ + cacao-oj6-jdk [$(strip $(foreach a,$(stage1_cacao_archs), $(a)))], +endif + +ifneq (,$(filter $(distrel),hardy gutsy feisty edgy dapper)) + bd_gcc = g++-4.2 [amd64 powerpc sparc], g++-4.1 [i386 lpia], +else ifneq (,$(filter $(distrel),lenny intrepid jaunty squeeze sid)) + bd_gcc = g++-4.3, +else + bd_gcc = g++-4.4 (>= 4.4.1), +endif +bd_syslibs = \ + libjpeg62-dev, libpng12-dev, libgif-dev$(if $(filter $(distrel),etch dapper edgy feisty gutsy), | libungif4-dev), zlib1g-dev, +bd_openjdk = \ + libxtst-dev, libxi-dev, libxt-dev, libxp-dev, libxaw7-dev, libxrender-dev, \ + $(if $(filter $(distrel), etch dapper edgy gutsy hardy),libcupsys2-dev,libcups2-dev), \ + libasound2-dev, libfreetype6-dev, \ + libxalan2-java, rhino, liblcms1-dev, libxinerama-dev, +pkg_ffidev = $(if $(filter $(distribution),Ubuntu),$(if $(filter $(distrel),hardy),libffi4-dev,libffi-dev),libffi-dev) + +bd_zero = \ + $(pkg_ffidev) [$(foreach a,$(hotspot_archs),!$(a))], +bd_zero = \ + $(pkg_ffidev), + +ifneq (,$(shark_archs)) + bd_zero = $(pkg_ffidev), + bd_shark = llvm-dev (>= 2.5) [$(foreach a,$(shark_archs),$(a))], +endif + +bd_cacao = libtool, +ifneq ($(distribution),Ubuntu) + bd_cacao += cacao-source (>= 0.99.4-1), +endif + +ifeq ($(distribution),Debian) + bd_plugin = xulrunner-dev (>= 1.9.0), +else + ifneq (,$(filter $(distrel),karmic)) + bd_plugin = xulrunner-dev (>= 1.9.1), + else ifneq (,$(filter $(distrel),hardy intrepid jaunty)) + bd_plugin = xulrunner-1.9-dev, + else + bd_plugin = firefox-dev, + endif +endif +bd_netx = fastjar (>= 2:0.96-0ubuntu2), +ifneq (,$(filter $(distrel),lenny sid experimental)) + bd_netx = fastjar (>= 2:0.95-4), +endif +ifneq (,$(filter $(distrel),hardy)) + bd_netx = fastjar (>= 2:0.95-1ubuntu2), +endif +bd_mauve = mauve, xvfb, autoconf, automake, xauth, xfonts-base +bd_compress = $(pkg_compress), +pkg_pulseaudio = pulseaudio (>= 0.9.12) +ifeq ($(with_pulse),yes) + bd_pulsejava = libpulse-dev (>= 0.9.12), $(pkg_pulseaudio), +endif +ifeq ($(with_systemtap),yes) + bd_systemtap = systemtap-sdt-dev, +endif + +dlopen_hl_depends = \ + $(if $(filter $(distrel), etch dapper edgy gutsy hardy),libcupsys2,libcups2), \ + liblcms1, libjpeg62 +dlopen_hl_recommends = \ +dlopen_jre_depends = \ + libgtk2.0-0, libgnome2-0, libgnomevfs2-0, libgconf2-4, \ + libxrandr2, libxinerama1, libgl1-mesa-glx +dlopen_jre_recommends = + +ifeq ($(distribution),Ubuntu) + ifneq (,$(filter $(distrel),karmic)) + browser_plugin_dirs = mozilla + else + browser_plugin_dirs = xulrunner-addons firefox iceape iceweasel mozilla midbrowser xulrunner + endif +else + browser_plugin_dirs = mozilla +endif + +ifneq (,$(filter $(distrel),etch dapper feisty)) + core_fonts = ttf-dejavu +else + core_fonts = ttf-dejavu-core +endif +cjk_fonts = ttf-baekmuk | ttf-unfonts | ttf-unfonts-core, +cjk_fonts += ttf-kochi-gothic | ttf-sazanami-gothic, +cjk_fonts += ttf-kochi-mincho | ttf-sazanami-mincho, +cjk_fonts += $(if $(with_wgy_zenhai),ttf-wqy-zenhei,ttf-arphic-uming), +ifneq (,$(filter $(distrel),lenny sid)) + cjk_fonts += ttf-indic-fonts, +else + cjk_fonts += ttf-indic-fonts-core, ttf-telugu-fonts, ttf-oriya-fonts, + cjk_fonts += ttf-kannada-fonts, ttf-bengali-fonts, +endif + +p_jre = $(basename)-jre +p_jrehl = $(basename)-jre-headless +p_jrec = icedtea-$(shortver)-jre-cacao +p_jrez = $(basename)-jre-zero +p_lib = $(basename)-jre-lib +p_jdk = $(basename)-jdk +p_demo = $(basename)-demo +p_src = $(basename)-source +p_doc = $(basename)-doc +p_dbg = $(basename)-dbg +p_plug = icedtea6-plugin + +d = debian/tmp +d_jre = debian/$(p_jre) +d_jrehl = debian/$(p_jrehl) +d_jrec = debian/$(p_jrec) +d_jrez = debian/$(p_jrez) +d_lib = debian/$(p_lib) +d_jdk = debian/$(p_jdk) +d_demo = debian/$(p_demo) +d_src = debian/$(p_src) +d_doc = debian/$(p_doc) +d_dbg = debian/$(p_dbg) +d_plug = debian/$(p_plug) + +control_vars = \ + '-Vvm:Name=$(vm_name)' \ + '-Vbase:Version=$(req_openjdk_ver)' \ + '-Vdlopenhl:Depends=$(dlopen_hl_depends)' \ + '-Vdlopenhl:Recommends=$(dlopen_hl_recommends)' \ + '-Vdlopenjre:Depends=$(dlopen_jre_depends)' \ + '-Vdlopenjre:Recommends=$(dlopen_jre_recommends)' \ + '-Vpkg:pulseaudio=$(pkg_pulseaudio)' \ + +ifeq ($(pkg_compress),lzma) + bd_options = -- -Zlzma + control_vars += '-Vdpkg:Depends=dpkg (>= 1.14.12ubuntu3)' +else ifeq ($(pkg_compress),bzip2) + bd_options = -- -Zbzip2 + control_vars += '-Vdpkg:Depends=dpkg (>= 1.10.24)' +endif + +ifneq (,$(filter-out $(hotspot_archs), $(cacao_archs))) + control_vars += '-Vcacao:Recommends=$(p_jrec) (= $${binary:Version})' +endif + +ifeq ($(with_jni_bridge),yes) + control_vars += '-Vdep:bridge=libaccess-bridge-java' +else + control_vars += '-Vdep:bridge=libaccess-bridge-java-jni' +endif + +debian/control: debian/control.in debian/rules + @cp -p debian/control debian/control.old + sed \ + -e 's/@basename@/$(basename)/g' \ + -e 's/@bd_bootstrap@/$(bd_bootstrap)/g' \ + -e 's/@bd_openjdk@/$(bd_openjdk)/g' \ + -e 's/@bd_zero@/$(bd_zero)/g' \ + -e 's/@bd_gcc@/$(bd_gcc)/g' \ + -e 's/@bd_syslibs@/$(bd_syslibs)/g' \ + -e 's/@bd_plugin@/$(bd_plugin)/g' \ + -e 's/@bd_netx@/$(bd_netx)/g' \ + -e 's/@bd_mauve@/$(bd_mauve)/g' \ + -e 's/@bd_compress@/$(pkg_compress)/g' \ + -e 's/@bd_cacao@/$(bd_cacao)/g' \ + -e 's/@bd_pulsejava@/$(bd_pulsejava)/g' \ + -e 's/@bd_systemtap@/$(bd_systemtap)/g' \ + -e 's/@bd_shark@/$(bd_shark)/g' \ + -e 's/@core_fonts@/$(core_fonts)/g' \ + -e 's/@cjk_fonts@/$(cjk_fonts)/g' \ + -e 's/@pkg_plugin@/$(p_plug)/g' \ + -e 's/@cacao_archs@/$(cacao_archs)/g' \ + -e 's/@hotspot_archs@/$(hotspot_archs)/g' \ + -e 's/@altzero_archs@/$(altzero_archs)/g' \ + -e 's,@pkg_version@,$(if $(filter $(distrel),etch dapper edgy feisty gutsy),$${Source-Version},$${binary:Version}),g' \ + -e 's/@lib_arch@/$(p_lib_arch)/g' \ + debian/control.in \ + debian/control.plugin \ + $(if $(cacao_archs), debian/control.cacao-jre) \ + $(if $(altzero_archs), debian/control.zero-jre) \ + > debian/control + @if cmp -s debian/control debian/control.old; then \ + rm -f debian/control.old; \ + else \ + diff -u debian/control.old debian/control; \ + echo "debian/control did change, please restart the build"; \ + rm -f debian/control.old; \ + exit 1; \ + fi + +packaging-files: + for f in debian/*.in; do \ + case "$$f" in debian/control.in) continue; esac; \ + case "$$f" in \ + debian/PLUGIN.*.in) f2=$$(echo $$f | sed 's/PLUGIN/$(p_plug)/;s/\.in$$//');; \ + *) f2=$$(echo $$f | sed 's/JB/$(basename)/;s/\.in$$//'); \ + esac; \ + sed -e 's/@JRE@/$(p_jre)/g' \ + -e 's/@JDK@/$(p_jdk)/g' \ + -e 's/@vendor@/$(Vendor)/g' \ + -e 's/@RELEASE@/$(shortver)/g' \ + -e 's/@basename@/$(basename)/g' \ + -e 's,@TOP@,$(TOP),g' \ + -e 's,@basedir@,$(basedir),g' \ + -e 's,@basediralias@,$(TOP)/$(jdiralias),g' \ + -e 's,@jdiralias@,$(jdiralias),g' \ + -e 's,@jdirname@,$(jdirname),g' \ + -e 's/@srcname@/$(srcname)/g' \ + -e 's/@jvmarch@/$(jvmarch)/g' \ + -e 's/@archdir@/$(archdir)/g' \ + -e 's/@tag@/$(tag)/g' \ + -e 's/@priority@/$(priority)/g' \ + -e 's/@mantag@/$(mantag)/g' \ + -e 's/@jre_hl_tools@/$(jre_hl_tools_alt)/g' \ + -e 's/@jre_tools@/$(jre_tools_alt)/g' \ + -e 's/@jdk_tools@/$(jdk_tools_alt)/g' \ + -e 's/@corba_tools@/$(corba_tools)/g' \ + -e 's,@j2se_lib@,$(j2se_lib),g' \ + -e 's,@j2se_share@,$(j2se_share),g' \ + -e 's,@plugin_name@,$(plugin_name),g' \ + -e 's/@pkg_plugin@/$(p_plug)/g' \ + -e 's,@browser_dirs@,$(browser_plugin_dirs),g' \ + -e 's/@cjk_fonts@/$(cjk_fonts)/g' \ + $$f > $$f2; \ + done +ifneq (,$(filter $(DEB_HOST_ARCH), i386 lpia)) +# not yet in OpenJDK +# cat debian/$(p_jre)-i586.menu >> $(d_jre).menu + rm -f debian/$(p_jre)-i586.menu +endif + +icedtea-configure: stamps/icedtea-configure +stamps/icedtea-configure: + rm -f rt/net/sourceforge/jnlp/runtime/InstallDialog.java + + mkdir -p bin + ( \ + echo '#! /bin/sh'; \ + echo 'if [ -x /usr/bin/linux32 ]; then'; \ + echo ' exec /usr/bin/linux32 /bin/uname "$$@"'; \ + echo 'else'; \ + echo ' exec /bin/uname "$$@"'; \ + echo 'fi'; \ + ) > bin/uname + chmod +x bin/uname + + echo "UNAME checks" + uname -a + /bin/uname -a + test -x /usr/bin/linux32 && linux32 uname -a || true + test -x /usr/bin/linux32 &&linux32 /bin/uname -a || true + + patch --verbose -p0 < debian/patches/zero-asm-port.diff + patch --verbose -p0 < debian/patches/zero-asm-newfiles.diff + patch --verbose -p0 < debian/patches/zero-asm-armv4.diff + + mkdir -p stamps + mkdir -p build + chmod +x configure + cd build && $(EXTRA_BUILD_ENV) ../configure $(CONFIGURE_ARGS) + touch $@ + +unpack: stamps/unpack +stamps/unpack: stamps/icedtea-configure + $(MAKE) -C build stamps/extract.stamp +ifeq ($(STAGE1_JAVA),gcj) + $(MAKE) -C build stamps/extract-ecj.stamp +endif + touch $@ + +dist-openjdk: $(OPENJDK_SRC_ZIP) + @echo "downloading openjdk source from hg to create zipfile: $(OPENJDK_SRC_ZIP)" + $(MAKE) -C build $@ + +patch: stamps/patch +stamps/patch: stamps/unpack +ifeq ($(STAGE1_JAVA),gcj) + $(MAKE) -C build stamps/patch-ecj.stamp +endif + $(MAKE) -C build stamps/patch.stamp + touch $@ + +ifeq ($(with_check),yes) + ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs) alpha armel ia64 mips mipsel powerpc s390)) + with_mauve_check = $(default_vm) + endif + ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs) alpha armel ia64 mips mipsel powerpc s390)) + with_jtreg_check = $(default_vm) + endif + + ifneq (,$(filter cacao, $(alternate_vms))) + ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 lpia powerpc sparc)) + # only activate after testing; problems on s390 + with_mauve_check += cacao + endif + ifneq (,$(filter $(DEB_HOST_ARCH), alpha amd64 armel i386 lpia mips mipsel powerpc s390)) + # only activate after testing; hangs several tests. + with_jtreg_check += cacao + endif + endif + + ifneq (,$(filter zero, $(alternate_vms))) + ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 lpia)) + # only activate after testing + with_mauve_check += zero + endif + ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386 lpia)) + # only activate after testing; hangs several tests. + with_jtreg_check += zero + endif + endif +endif + +ifneq (,$(filter $(DEB_HOST_ARCH), alpha armel ia64 mips mipsel powerpc s390)) + JTREG_OPTIONS = -timeout:3 +endif +ifneq (,$(filter $(DEB_HOST_ARCH), armel)) + JTREG_OPTIONS += -Xmx256M -vmoption:-Xmx256M +endif + +build_stamps = stamps/build +build_stamps += stamps/mauve-check-default stamps/jtreg-check-default +#build_stamps += $(if $(filter cacao, $(alternate_vms)),stamps/mauve-check-cacao stamps/jtreg-check-cacao) +build_stamps += $(if $(filter zero, $(alternate_vms)),stamps/mauve-check-zero stamps/jtreg-check-zero) + +build: $(build_stamps) + if [ -f buildwatch.pid ]; then \ + pid=$$(cat buildwatch.pid); \ + kill -1 $$pid || :; sleep 1; kill -9 $$pid || :; \ + fi + rm -f buildwatch.pid + +stamps/build: stamps/patch +ifneq (,$(filter $(DEB_HOST_ARCH), alpha arm armel hppa ia64 m68k mips mipsel powerpc s390 sparc)) + sh -c 'sh debian/buildwatch.sh $(CURDIR)/build &' +endif + if $(EXTRA_BUILD_ENV) $(MAKE) -C build $(build_target); then \ + : ; \ + else \ + if [ -f buildwatch.pid ]; then \ + pid=$$(cat buildwatch.pid); \ + kill -1 $$pid || :; sleep 1; kill -9 $$pid || :; \ + fi; \ + false; \ + fi + touch $@ + +stamps/xvfb-check: + mkdir -p bin + echo 'xvfb-run -a -e xvfb-run.log -s "-extension GLX" "$$@"' > bin/my-xvfb-run + if ! /bin/sh bin/my-xvfb-run true ; then \ + echo "error running $$(cat bin/my-xvfb-run)"; \ + cat xvfb-run.log; \ + echo 'xvfb-run -a -e xvfb-run.log -s "$$@"' > bin/my-xvfb-run; \ + if ! /bin/sh bin/my-xvfb-run true ; then \ + echo "error running $$(cat bin/my-xvfb-run)"; \ + cat xvfb-run.log; \ + rm -f bin/my-xvfb-run; \ + fi; \ + fi + if [ -f bin/my-xvfb-run ]; then \ + echo "using $$(cat bin/my-xvfb-run)"; \ + fi + touch $@ + +stamps/mauve-check-default: stamps/build stamps/xvfb-check + $(MAKE) -f debian/rules mauve-run-check VMNAME=$(default_vm) VMARGS= + touch $@ + +stamps/mauve-check-cacao: stamps/xvfb-check + $(MAKE) -f debian/rules mauve-run-check VMNAME=cacao VMARGS='-vmarg -cacao' + touch $@ + +stamps/mauve-check-zero: stamps/xvfb-check + $(MAKE) -f debian/rules mauve-run-check VMNAME=zero VMARGS='-vmarg -zero' + touch $@ + +stamps/mauve-build: stamps/build + rm -rf build/mauve + mkdir -p build/mauve +ifeq ($(with_mauve_check),yes) + tar -x -C build -f /usr/src/mauve.tar.gz + cd build/mauve \ + && aclocal \ + && automake \ + && autoconf \ + && PATH=$(CURDIR)/build/$(sdkimg)/bin:$$PATH \ + ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) + PATH=$(CURDIR)/build/$(sdkimg)/bin:$$PATH $(MAKE) -C build/mauve +endif + touch $@ + +stamps/mauve-check: stamps/build stamps/mauve-build stamps/xvfb-check + +mauve-run-check: + rm -rf build/mauve build/mauve-$(VMNAME) +ifneq (,$(filter $(VMNAME), $(with_mauve_check))) + tar -x -C build -f /usr/src/mauve.tar.gz + mv build/mauve build/mauve-$(VMNAME) + cd build/mauve-$(VMNAME) \ + && aclocal \ + && automake \ + && autoconf \ + && PATH=$(CURDIR)/build/$(sdkimg)/bin:$$PATH ./configure \ + --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) + PATH=$(CURDIR)/build/$(sdkimg)/bin:$$PATH $(MAKE) -C build/mauve-$(VMNAME) + + if [ -f bin/my-xvfb-run ]; then \ + cd build/mauve-$(VMNAME) && \ + JAVA_HOME=$(CURDIR)/build/$(sdkimg) \ + PATH=$(CURDIR)/build/$(sdkimg)/bin:$$PATH \ + /bin/sh $(CURDIR)/bin/my-xvfb-run java Harness \ + -vm $(CURDIR)/build/$(sdkimg)/bin/java \ + $(VMARGS) \ + -file $(CURDIR)/debian/mauve_tests \ + -timeout 30000 2>&1 \ + | tee mauve_output-$(VMNAME); \ + else \ + echo "mauve testsuite not run for this build (xvfb failures)" \ + > build/mauve-$(VMNAME)/mauve_output-$(VMNAME); \ + cat xvfb-run.log >> build/mauve-$(VMNAME)/mauve_output-$(VMNAME); \ + fi + @sleep 5 +else + mkdir -p build/mauve-$(VMNAME) + echo "mauve testsuite not run for this build" \ + > build/mauve-$(VMNAME)/mauve_output-$(VMNAME) +endif + +jtreg_processes = ps x -ww -o pid,ppid,args \ + | awk '$$2 == 1 && $$3 ~ /^$(subst /,\/,/scratch)/' \ + | sed 's,$(CURDIR)/build/$(sdkimg),,g;s,$(CURDIR),,g' +jtreg_pids = ps x --no-headers -ww -o pid,ppid,args \ + | awk '$$2 == 1 && $$3 ~ /^$(subst /,\/,$(CURDIR)/build/$(sdkimg))/ {print $$1}' + +stamps/jtreg-check-default: stamps/build stamps/xvfb-check + $(MAKE) -f debian/rules jtreg-run-check VMNAME=$(default_vm) VMARGS= + touch $@ + +stamps/jtreg-check-cacao: stamps/build stamps/xvfb-check + $(MAKE) -f debian/rules jtreg-run-check VMNAME=cacao VMARGS='-vmoption:-cacao' + touch $@ + +stamps/jtreg-check-zero: stamps/build stamps/xvfb-check + $(MAKE) -f debian/rules jtreg-run-check VMNAME=zero VMARGS='-vmoption:-zero' + touch $@ + +jtreg-run-check: +ifneq (,$(filter $(VMNAME), $(with_jtreg_check))) + @echo "BEGIN jtreg" + if [ -f bin/my-xvfb-run ]; then \ + /bin/sh bin/my-xvfb-run $(MAKE) -C build -k jtregcheck ICEDTEA_JTREG_OPTIONS='$(VMARGS) $(JTREG_OPTIONS)' \ + 2>&1 | tee jtreg_output-$(VMNAME); \ + else \ + echo "jtreg harness not run for this build" > jtreg_output-$(VMNAME); \ + cat xvfb-run.log >> jtreg_output-$(VMNAME); \ + fi + @echo "END jtreg" + + for i in check-hotspot.log check-jdk.log check-langtools.log jtreg-summary.log; do \ + if [ -f build/test/$$i ]; then \ + mv build/test/$$i build/test/$${i%*.log}-$(VMNAME).log; \ + else \ + mkdir -p build/test; \ + cp jtreg_output-$(VMNAME) build/test/$${i%*.log}-$(VMNAME).log; \ + fi; \ + done + + @echo "BEGIN jtreg-summary-$(VMNAME)" + -cat build/test/jtreg-summary-$(VMNAME).log + @echo "END jtreg-summary-$(VMNAME)" + + : # kill testsuite processes still hanging + @pids=$$($(jtreg_pids)); \ + if [ -n "$$pids" ]; then \ + echo "killing processes..."; \ + $(jtreg_processes); \ + kill -1 $$pids; \ + sleep 2; \ + pids=$$($(jtreg_pids)); \ + if [ -n "$$pids" ]; then \ + echo "trying harder..."; \ + $(jtreg_processes); \ + kill -9 $$pids; \ + sleep 2; \ + fi; \ + else \ + echo "nothing to cleanup"; \ + fi; \ + pids=$$($(jtreg_pids)); \ + if [ -n "$$pids" ]; then \ + echo "leftover processes..."; \ + $(jtreg_processes); \ + fi + + -for i in hotspot langtools jdk; do \ + for t in $$(egrep '^(FAILED|Error)' build/test/check-$$i-$(VMNAME).log | sed 's/.* \(.*\)\.[^.][^.]*$$/\1/'); do \ + echo test/$$i/JTwork/$$t.jtr; \ + done; \ + done > build/test/failed_tests-$(VMNAME).list; \ + tar -C build -c -z -f build/test/failed_tests-$(VMNAME).tar.gz -T build/test/failed_tests-$(VMNAME).list +else + echo "jtreg harness not run for this build" > jtreg_output-$(VMNAME) +endif + +clean: debian-clean + dh_testdir + dh_testroot + rm -rf stamps build build-* + rm -rf autom4te.cache + rm -rf bin + rm -f jtreg_output* xvfb-run.log + rm -f buildwatch.pid + + if [ -f ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S ]; then \ + patch --verbose -p0 -R < debian/patches/zero-asm-armv4.diff; \ + patch --verbose -p0 -R < debian/patches/zero-asm-newfiles.diff; \ + patch --verbose -p0 -R < debian/patches/zero-asm-port.diff; \ + rm -f ports/hotspot/src/cpu/zero/vm/cppInterpreter_asm.S; \ + rm -f ports/hotspot/src/cpu/zero/vm/bytecodes.s; \ + rm -f ports/hotspot/src/cpu/zero/vm/bc.def; \ + rm -f ports/hotspot/src/cpu/zero/vm/mkbc.c; \ + fi + + dh_clean + +debian-clean: + dh_testdir + dh_testroot + dh_clean -k + for f in debian/*.in; do \ + case "$$f" in \ + debian/PLUGIN.*.in) f2=$$(echo $$f | sed 's/PLUGIN/$(p_plug)/;s/\.in$$//');; \ + *) f2=$$(echo $$f | sed 's/JB/$(basename)/;s/\.in$$//'); \ + esac; \ + case "$$f2" in debian/control) continue; esac; \ + rm -f $$f2; \ + done + rm -f debian/*.install debian/*.links + +install: packaging-files + dh_testdir + dh_testroot + dh_clean -k + rm -f debian/*.install debian/*.links + dh_installdirs + + : # install into temporary location + mkdir -p $(d)/$(basedir) + cp -a build/$(sdkimg)/* $(d)/$(basedir)/ + cp -a build/$(jreimg)/man $(d)/$(basedir)/jre/ + chmod -R u+w $(d) + + : # install default jvm config file + cp debian/jvm.cfg-default $(d)/$(basedir)/jre/lib/$(archdir)/ + + : # add extra symlinks for header files + ln -sf linux/jni_md.h $(d)/$(basedir)/include/jni_md.h + ln -sf linux/jawt_md.h $(d)/$(basedir)/include/jawt_md.h + +ifneq (,$(filter --with-alt-jar=/usr/bin/fastjar, $(CONFIGURE_ARGS))) + : # add javascript files to the archive + if ! fastjar tf $(d)/$(basedir)/jre/lib/rt.jar | fgrep -q JSObject.class; then \ + echo "FIXME: Adding class files for IcedTeaPlugin to rt.jar..."; \ + fastjar -u -v -0 -f $(d)/$(basedir)/jre/lib/rt.jar \ + -C lib/rt netscape/javascript; \ + fi +endif + : # compress manpages + find $(d)/$(basedir)/man $(d)/$(basedir)/jre/man -type f ! -type l \ + | xargs gzip -9v + + : # replace common files in jdk and jre by symlinks + @cd $(d)/$(basedir); \ + for i in `find jre -type f`; do \ + i2=$${i#jre/*}; \ + [ -f $$i2 ] && cmp -s $$i $$i2 || continue; \ + d=$$(echo ./$$i2 | sed -r 's,[^/]+/,../,g;s,/[^/]+$$,,;s,\.\.$$,,'); \ + echo " symlink $$i2 -> $$d$$i"; \ + ln -sf $$d$$i $$i2; \ + done + + mkdir -p $(d)/etc/$(jdiralias)/security + mkdir -p $(d)/etc/$(jdiralias)/management + mkdir -p $(d)/etc/$(jdiralias)/images/cursors + + : # rename templates (comments only) to config files, + : # and move to /etc/$(jdiralias) + for i in \ + management/jmxremote.password \ + management/snmp.acl; \ + do \ + mv $(d)/$(basedir)/jre/lib/$$i.template $(d)/etc/$(jdiralias)/$$i; \ + done + + cp -p debian/accessibility.properties $(d)/$(basedir)/jre/lib/ + cp -p debian/swing.properties $(d)/$(basedir)/jre/lib/ + + rm -f $(d)/$(basedir)/jre/lib/security/cacerts + + : # move config files to etc/$(jdiralias) and symlink them. + for i in \ + accessibility.properties \ + calendars.properties \ + content-types.properties \ + images/cursors/cursors.properties \ + logging.properties \ + sound.properties \ + flavormap.properties \ + net.properties \ + psfontj2d.properties \ + psfont.properties.ja \ + swing.properties \ + management/jmxremote.access \ + management/management.properties \ + security/java.policy \ + security/java.security; \ + do \ + mv $(d)/$(basedir)/jre/lib/$$i $(d)/etc/$(jdiralias)/$$i; \ + done + mv $(d)/$(basedir)/jre/lib/$(archdir)/jvm.cfg \ + $(d)/etc/$(jdiralias)/ + + mv $(d)/$(basedir)/jre/lib/fontconfig.Ubuntu.properties.src \ + $(d)/etc/$(jdiralias)/fontconfig.properties + mv $(d)/$(basedir)/jre/lib/fontconfig.Ubuntu.bfc \ + $(d)/etc/$(jdiralias)/fontconfig.bfc + + : # remove files which we do not want to distribute + rm -f $(d)/$(basedir)/jre/lib/fontconfig*.properties.src + rm -f $(d)/$(basedir)/jre/lib/fontconfig*.bfc + + : # remove empty directories + rmdir $(d)/$(basedir)/jre/lib/management + rmdir $(d)/$(basedir)/jre/lib/applet + rmdir $(d)/$(basedir)/jre/lib/security + + : # TODO: why do we provide a custom font.properties.ja? + : # cp -p debian/font.properties.ja $(d_jbin)/etc/$(jdiralias)/. +# cp debian/font.properties.wgy_zenhai \ +# $(d)/etc/$(jdiralias)/font.properties.ja + + + : # now move things to the packages. it is so ****** to create + : # .install files first. dh_movefiles did do the job perfectly + + : # $(p_jrehl).install / $(p_jre).install + ( \ + echo 'etc'; \ + echo '$(basedir)/jre/lib/jexec'; \ + echo '$(basedir)/jre/lib/rt.jar'; \ + echo '$(basedir)/jre/man/ja'; \ + echo '$(basedir)/man/ja'; \ + echo '$(basedir)/bin/java-rmi.cgi'; \ + ) > debian/$(p_jrehl).install + $(RM) debian/$(p_jre).install + + cd $(CURDIR)/$(d); \ + for i in $(basedir)/jre/{bin,man/man1,man/ja_JP.eucJP/man1}/*; do \ + case "$$i" in \ + */javaws*|*/pluginappletviewer*|*/policytool*) echo $$i >> ../$(p_jre).install;; \ + *) echo $$i >> ../$(p_jrehl).install; \ + esac; \ + done + + cd $(CURDIR)/$(d); \ + for i in $(basedir)/{bin,man/man1,man/ja_JP.eucJP/man1}/*; do \ + [ -h $$i ] || continue; \ + case "$$i" in \ + */javaws*|*/pluginappletviewer*|*/policytool*) echo $$i >> ../$(p_jre).install;; \ + *) echo $$i >> ../$(p_jrehl).install; \ + esac; \ + done; \ + + cd $(CURDIR)/$(d); \ + for i in $(basedir)/jre/lib/$(archdir)/*; do \ + case "$$i" in \ + */$(plugin_name)) continue;; \ + */libsplashscreen.so|*/libjsoundalsa.so|$(if $(with_pulse),*/libpulse-java.so|)*/xawt) echo $$i >> ../$(p_jre).install;; \ + */cacao) echo $$i >> ../$(p_jrec).install;; \ + */zero) echo $$i >> ../$(p_jrez).install;; \ + *) echo $$i >> ../$(p_jrehl).install; \ + esac; \ + done + + : # $(p_lib).install + ( \ + echo '$(basedir)/jre/ASSEMBLY_EXCEPTION'; \ + echo '$(basedir)/jre/README.html'; \ + echo '$(basedir)/jre/THIRD_PARTY_README'; \ + cd $(d); \ + for i in $(basedir)/jre/lib/*; do \ + case "$$i" in */$(archdir)|*/jexec|*/rt.jar) continue; esac; \ + echo $$i; \ + done; \ + ) > debian/$(p_lib).install + + : # $(p_jdk).install + ( \ + echo '$(basedir)/include'; \ + echo '$(basedir)/lib'; \ + echo '$(basedir)/LICENSE'; \ + echo '$(basedir)/ASSEMBLY_EXCEPTION'; \ + echo '$(basedir)/README.html'; \ + echo '$(basedir)/THIRD_PARTY_README'; \ + cd $(d); \ + for i in $(basedir)/{bin,man/man1,man/ja_JP.eucJP/man1}/*; do \ + [ -h $$i -o "$$i" = $(basedir)/bin/java-rmi.cgi ] && continue; \ + echo $$i; \ + done; \ + ) > debian/$(p_jdk).install + +ifeq ($(with_plugin_pkg),yes) + dh_installdirs -p$(p_plug) \ + $(foreach d, $(browser_plugin_dirs), usr/lib/$(d)/plugins) + + : # $(p_plug).install + ( \ + echo '$(basedir)/jre/lib/$(archdir)/$(plugin_name)'; \ + ) > debian/$(p_plug).install +else + : # include the plugin in the $(p_jre) package + echo '$(basedir)/jre/lib/$(archdir)/$(plugin_name)' \ + >> debian/$(p_jre).install +endif + + : # $(p_src).install + ( \ + echo '$(basedir)/src.zip'; \ + ) > debian/$(p_src).install + + : # move demos and samples, create symlinks for $(p_demo) + mkdir -p $(d)/usr/share/doc/$(p_jre)/demo + for i in $(d)/$(basedir)/demo/*; do \ + b=$$(basename $$i); \ + case "$$i" in \ + */jvmti) \ + echo $(basedir)/demo/$$b usr/share/doc/$(p_jre)/demo/$$b >> $(d_demo).links;; \ + *) \ + mv $$i $(d)/usr/share/doc/$(p_jre)/demo/$$b; \ + echo usr/share/doc/$(p_jre)/demo/$$b $(basedir)/demo/$$b >> $(d_demo).links;; \ + esac; \ + done + mv $(d)/$(basedir)/sample $(d)/usr/share/doc/$(p_jre)/examples + echo usr/share/doc/$(p_jre)/examples $(basedir)/sample >> $(d_demo).links + echo usr/share/doc/$(p_jre) usr/share/doc/$(p_demo) >> $(d_demo).links + + : # $(p_demo).install + ( \ + echo '$(basedir)/demo'; \ + echo 'usr/share/doc/$(p_jre)/examples'; \ + echo 'usr/share/doc/$(p_jre)/demo'; \ + ) > debian/$(p_demo).install + + dh_install --sourcedir=debian/tmp --fail-missing -XLICENSE + + : # give all permissions to cross-VM extension directory + sed -i \ + -e '/permission java\.security\.AllPermission;/,/};/c\' \ + -e ' permission java.security.AllPermission;\' \ + -e '};\' \ + -e '\' \ + -e 'grant codeBase "file:/$(basedir)/ext/*" {\' \ + -e ' permission java.security.AllPermission;\' \ + -e '};\' \ + -e '\' \ + -e '// Comment this out if you want to give all permissions to the\' \ + -e '// Debian Java repository too:\' \ + -e '//grant codeBase "file:/usr/share/java/repository/-" {\' \ + -e '// permission java.security.AllPermission;\' \ + -e '//};\' \ + -e '' \ + $(d_jrehl)/$(security)/java.policy +# 'make Emacs Makefile mode happy + + dh_installdirs -p$(p_jrehl) \ + usr/share/doc/$(p_jre) \ + usr/share/binfmts + + dh_installdirs -p$(p_jre) \ + usr/share/applications \ + usr/share/application-registry \ + usr/share/mime-info \ + usr/share/pixmaps + + : # add GNOME stuff + cp -p debian/$(basename)-{javaws,policytool}.desktop \ + $(d_jre)/usr/share/applications/ + cp -p debian/$(basename)-java.desktop \ + $(d_jre)/usr/share/applications/ +# not yet in OpenJDK +# cp -p debian/$(basename)-controlpanel.desktop \ +# $(d_jre)/usr/share/applications/ + + for i in archive web-start; do \ + cp debian/$(basename)-$$i.applications \ + $(d_jre)/usr/share/application-registry/; \ + cp debian/$(basename)-$$i.keys $(d_jre)/usr/share/mime-info/; \ + cp debian/$(basename)-$$i.mime $(d_jre)/usr/share/mime-info/; \ + done + + cp -p debian/sun_java.xpm \ + $(d_jre)/usr/share/pixmaps/$(basename).xpm + + mkdir -p $(d_demo)/usr/share/pixmaps + cp -p debian/sun_java_app.xpm \ + $(d_demo)/usr/share/pixmaps/$(basename)-app.xpm + + : # install icons + for i in 16 24 32 48; do \ + install -D -m 644 -p build/openjdk/jdk/src/solaris/classes/sun/awt/X11/java-icon$${i}.png \ + $(d_jre)/usr/share/icons/hicolor/$${i}x$${i}/apps/$(basename).png; \ + done + + : # create docdir symlinks for $(p_jrehl) + ( \ + echo usr/share/doc/$(p_jre) usr/share/doc/$(p_jrehl); \ + echo usr/share/doc/$(p_jre) $(basedir)/docs; \ + ) > $(d_jrehl).links + +ifneq (,$(filter zero, $(alternate_vms))) + : # create docdir symlinks for $(p_jrez) + ( \ + echo usr/share/doc/$(p_jre) usr/share/doc/$(p_jrez); \ + ) > $(d_jrez).links +endif + + : # create docdir symlinks for $(p_src) + ( \ + echo usr/share/doc/$(p_jre) usr/share/doc/$(p_src); \ + ) > $(d_src).links + + : # create docdir symlinks for $(p_jdk) + ( \ + echo usr/share/doc/$(p_jre) usr/share/doc/$(p_jdk); \ + ) > $(d_jdk).links + +ifeq ($(with_plugin_pkg),yes) + : # create docdir symlinks for $(p_plug) + ( \ + echo usr/share/doc/$(p_jre) usr/share/doc/$(p_plug); \ + ) > $(d_plug).links +endif + + : # create docdir symlinks for $(p_lib) + ( \ + echo usr/share/doc/$(p_jre) usr/share/doc/$(p_lib); \ + ) > $(d_lib).links + + : # create docdir symlinks for $(p_dbg) + ( \ + echo usr/share/doc/$(p_jre) usr/share/doc/$(p_dbg); \ + ) > $(d_dbg).links + + : # create links for the gnome accessibility bridge + echo "usr/share/java/gnome-java-bridge.jar $(basedir)/jre/lib/ext/gnome-java-bridge.jar" \ + >> $(d_jre).links +ifeq ($(with_jni_bridge),yes) + echo "usr/lib/jni/libjava-access-bridge-jni.so $(basedir)/jre/lib/ext/libjava-access-bridge-jni.so" \ + >> $(d_jre).links +endif + + : # create links for the config files + find $(d_jrehl)/etc/$(jdiralias) -type f ! -name jvm.cfg \ + -printf "etc/$(jdiralias)/%P $(basedir)/jre/lib/%P\n" >> $(d_jrehl).links + echo "etc/$(jdiralias)/jvm.cfg $(basedir)/jre/lib/$(archdir)/jvm.cfg" \ + >> $(d_jrehl).links + echo "etc/ssl/certs/java/cacerts $(basedir)/jre/lib/security/cacerts" \ + >> $(d_jrehl).links + + @echo JRE_HL_TOOLS: $(jre_hl_tools_alt) jexec + @echo JRE_TOOLS: $(jre_tools_alt) + @echo JDK_TOOLS: $(jdk_tools_alt) + ( \ + echo 'name=$(jdirname)'; \ + echo 'alias=$(jdiralias)'; \ + echo 'priority=$(priority)'; \ + echo 'section=main'; \ + echo ''; \ + for i in $(jre_hl_tools_alt); do \ + echo "hl $$i /$(TOP)/$(jdiralias)/jre/bin/$$i"; \ + done; \ + echo "hl jexec /$(TOP)/$(jdiralias)/jre/lib/jexec"; \ + for i in $(jre_tools_alt); do \ + echo "jre $$i /$(TOP)/$(jdiralias)/jre/bin/$$i"; \ + done; \ + for i in $(jdk_tools_alt); do \ + echo "jdk $$i /$(TOP)/$(jdiralias)/bin/$$i"; \ + done; \ + for d in $(browser_plugin_dirs); do \ + case "$$d" in \ + xulrunner-addons) b=xulrunner-1.9;; \ + *) b=$$d;; \ + esac; \ + echo "plugin $$b-javaplugin.so /$(TOP)/$(jdiralias)/jre/lib/$(archdir)/$(plugin_name)"; \ + done; \ + ) > $(d_jrehl)/$(TOP)/.$(jdiralias).jinfo + + ( \ + echo 'package $(basename)'; \ + echo 'interpreter /usr/bin/jexec'; \ + echo 'magic PK\x03\x04'; \ + ) > $(d_jrehl)/$(basedir)/jre/lib/jar.binfmt + + : # install a wrapper for javaws + mv $(d_jre)/$(basedir)/jre/bin/javaws $(d_jre)/$(basedir)/jre/bin/javaws.real + install -m 755 debian/javaws-wrapper.sh $(d_jre)/$(basedir)/jre/bin/javaws + + : # another jvm symlink + ln -sf $(jdiralias) $(d_jrehl)/usr/lib/jvm/java-$(jvmver)-$(origin) + +ifeq ($(with_systemtap),yes) + : # systemtap support + mkdir -p $(d_jrehl)/usr/share/systemtap/tapset + cp -p build/tapset/hotspot.stp $(d_jrehl)/usr/share/systemtap/tapset/ +endif + + : # Install stuff to generate font config and timezone files. + mkdir -p $(d_lib)/$(basedir)/jre/lib + cp -p build/openjdk/build/linux-$(jvmarch)/btjars/compilefontconfig.jar \ + $(d_lib)/$(basedir)/jre/lib/ + cp -p build/openjdk/build/linux-$(jvmarch)/btjars/javazic.jar \ + $(d_lib)/$(basedir)/jre/lib/ + + : # install lintian overrides + for FILE in debian/*.overrides; do \ + PKG=`basename $$FILE .overrides`; \ + install -D -m644 $$FILE debian/$$PKG/usr/share/lintian/overrides/$$PKG; \ + done + +nodocs = $(if $(findstring nodocs, $(DEB_BUILD_OPTIONS)),-N$(p_doc)) +nojrec = $(if $(filter cacao, $(alternate_vms)),,-N$(p_jrec)) +nojrez = $(if $(filter shark zero, $(alternate_vms)),,-N$(p_jrez)) + +# Build architecture independant packages +binary-indep: build install + dh_testdir + dh_testroot +ifeq ($(with_docs),yes) + dh_installchangelogs -p$(p_doc) + dh_installdocs -p$(p_doc) + mkdir -p $(d_doc)/usr/share/doc/$(p_jre) + for i in build/openjdk/build/linux-$(jvmarch)/docs/*; do \ + [ -e $$i ] || continue; \ + b=$$(basename $$i); \ + cp -a $$i $(d_doc)/usr/share/doc/$(p_jre)/; \ + ln -sf ../$(p_jre)/$$b $(d_doc)/usr/share/doc/$(p_doc)/$$b; \ + done +endif + dh_installmenu -i $(nodocs) + -dh_icons -i $(nodocs) || dh_iconcache -i $(nodocs) +# dh_installdebconf -i $(nodocs) + dh_link -i $(nodocs) + dh_compress -i $(nodocs) -Xexamples -Xdemos + dh_fixperms -i $(nodocs) + dh_installdeb -i $(nodocs) + dh_gencontrol -i $(nodocs) -- $(control_vars) + dh_md5sums -i $(nodocs) + dh_builddeb -i $(nodocs) $(bd_options) + +absarchdir = $(CURDIR)/$(d_jrehl)/$(basedir)/jre/lib/$(archdir) +shlibdeps_ld_path =$(absarchdir):$(absarchdir)/client:$(absarchdir)/server:$(absarchdir)/native_threads + +# Build architecture dependant packages +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs -p$(p_jrehl) + dh_installdocs -p$(p_jrehl) \ + debian/JAVA_HOME \ + debian/README.alternatives \ + debian/README.Debian + mv $(d_jrehl)/usr/share/doc/$(p_jrehl)/* $(d_jrehl)/usr/share/doc/$(p_jre) + rm -rf $(d_jrehl)/usr/share/doc/$(p_jrehl) + for i in AUTHORS NEWS README; do \ + cp -p $$i $(d_jrehl)/usr/share/doc/$(p_jre)/$$i.IcedTea; \ + done + mkdir -p $(d_jdk)/usr/share/doc/$(p_jre) + cp build/mauve-$(default_vm)/mauve_output-$(default_vm) \ + $(d_jdk)/usr/share/doc/$(p_jre)/mauve_output-$(default_vm).log + cp jtreg_output-$(default_vm) \ + $(d_jdk)/usr/share/doc/$(p_jre)/jtreg_output-$(default_vm).log + -cp build/test/jtreg-summary-$(default_vm).log build/test/check-*-$(default_vm).log \ + $(d_jdk)/usr/share/doc/$(p_jre)/ + -cp build/test/failed_tests-$(default_vm).tar.gz $(d_jdk)/usr/share/doc/$(p_jre)/ + +ifneq (,$(filter cacao, $(alternate_vms))) + dh_installchangelogs -p$(p_jrec) + dh_installdocs -p$(p_jrec) + mkdir -p $(d_jrec)/usr/share/doc/$(p_jre) + -cp build/mauve-cacao/mauve_output-cacao \ + $(d_jrec)/usr/share/doc/$(p_jre)/mauve_output-cacao.log + -cp jtreg_output-cacao \ + $(d_jrec)/usr/share/doc/$(p_jre)/jtreg_output-cacao.log + -cp build/test/jtreg-summary-cacao.log build/test/check-*-cacao.log \ + $(d_jrec)/usr/share/doc/$(p_jre)/ + -cp build/test/failed_tests-cacao.tar.gz $(d_jrec)/usr/share/doc/$(p_jre)/ +endif +ifneq (,$(filter zero, $(alternate_vms))) + mkdir -p $(d_jrez)/usr/share/doc/$(p_jre) + -cp build/mauve-zero/mauve_output-zero \ + $(d_jrez)/usr/share/doc/$(p_jre)/mauve_output-zero.log + -cp jtreg_output-zero \ + $(d_jrez)/usr/share/doc/$(p_jre)/jtreg_output-zero.log + -cp build/test/jtreg-summary-zero.log build/test/check-*-zero.log \ + $(d_jrez)/usr/share/doc/$(p_jre)/ + -cp build/test/failed_tests-zero.tar.gz $(d_jrez)/usr/share/doc/$(p_jre)/ +endif + dh_desktop -s $(nodemo) $(nojrec) $(nojrez) + dh_installmenu -s $(nodemo) $(nojrec) $(nojrez) + -dh_icons -s $(nodemo) $(nojrec) $(nojrez) || dh_iconcache -s $(nodemo) $(nojrec) $(nojrez) +# dh_installdebconf -s $(nodemo) $(nojrec) $(nojrez) + dh_link -s $(nodemo) $(nojrec) $(nojrez) + dh_strip -s $(nodemo) $(nojrec) $(nojrez) --dbg-package=$(p_dbg) + dh_compress -s $(nodemo) $(nojrec) $(nojrez) + dh_fixperms -s $(nodemo) $(nojrec) $(nojrez) + dh_makeshlibs -p$(p_jrehl) -p$(p_jre) + dh_shlibdeps -s $(nodemo) $(nojrec) $(nojrez) -L $(p_jrehl) \ + -l$(shlibdeps_ld_path) \ + -- + dh_installdeb -s $(nodemo) $(nojrec) $(nojrez) + dh_gencontrol -s $(nodemo) $(nojrec) $(nojrez) -- $(control_vars) + dh_md5sums -s $(nodemo) $(nojrec) $(nojrez) + dh_builddeb -s $(nodemo) $(nojrec) $(nojrez) #$(bd_options) + +binary: binary-arch binary-indep +.PHONY: build clean binary-indep binary-arch binary install --- openjdk-6-6b16~pre5.orig/debian/README.Debian +++ openjdk-6-6b16~pre5/debian/README.Debian @@ -0,0 +1,41 @@ +openjdk-6 for Debian/Ubuntu +--------------------------- + +The OpenJDK build is configured --with-additional-vms to build with +different virtual machines. The original implementation of the hotspot +VM is only available on the amd64, i386, lpia and sparc architectures. +Other VM's are CACAO, providing a just in time compiler on several +architectures (although the VM implementation is incomplete), and Zero, +providing a byte code interpreter for every architecture. On some +architectures Zero is built with JIT support using shark (still considered +experimental). + +To use a different VM other than the default, use + + java -cacao|-zero + +or for the java tools, use + + -J-cacao|-J-zero. + +The zero build on the ix86 architectures is built with shark (just in time +compiler); to use the zero build without shark support, use the `-Xint' +option to operate in interpreted-only mode. + +To change the default permanently, edit /etc/java-6-openjdk/jvm.cfg. + +The CACAO VM can be found in the icedtea-6-jre-cacao package, the Zero/Shark +VM can be found in the openjdk-6-jre-zero package (on the architectures +where the Hotspot VM is available). + +Please look for further documentation in the directory +/usr/share/doc/openjdk-6-jre/ . + +The package openjdk-6-jre-headless ships a cgi script +/usr/lib/jvm/java-6-openjdk/bin/java-rmi.cgi that you must integrate +into your webserver setup manually if you need it. It is not activated +automatically. + + + -- Matthias Klose Sun, 03 May 2009 13:58:10 +0200 + -- Torsten Werner Wed, 02 Apr 2008 11:46:53 +0200 --- openjdk-6-6b16~pre5.orig/debian/PLUGIN.postinst.in +++ openjdk-6-6b16~pre5/debian/PLUGIN.postinst.in @@ -0,0 +1,25 @@ +#!/bin/sh -e + +PATH=/sbin:/bin:/usr/sbin:/usr/bin + +priority=@priority@ +browser_dirs="@browser_dirs@" +PLUGIN=@plugin_name@ +PLUGINPTH=/@basediralias@/jre/lib/@archdir@/$PLUGIN + +for browser_dir in $browser_dirs; do + if [ $browser_dir = xulrunner-addons ]; then + browser=xulrunner-1.9 + else + browser=$browser_dir + fi + update-alternatives --quiet --install \ + /usr/lib/$browser_dir/plugins/libjavaplugin.so \ + $browser-javaplugin.so \ + $PLUGINPTH \ + $priority +done + +#DEBHELPER# + +exit 0 --- openjdk-6-6b16~pre5.orig/debian/JB-jre-headless.postinst.in +++ openjdk-6-6b16~pre5/debian/JB-jre-headless.postinst.in @@ -0,0 +1,89 @@ +#!/bin/sh + +set -e + +priority=@priority@ +basedir=/@basedir@ +basediralias=/@basediralias@ +jdiralias=@jdiralias@ +mandir=/@basediralias@/jre/man +srcext=1.gz +dstext=1.gz +jre_tools='@jre_hl_tools@' + +case "$1" in +configure) + [ -d /etc/.java ] || mkdir -m 755 /etc/.java + [ -d /etc/.java/.systemPrefs ] || mkdir -m 755 /etc/.java/.systemPrefs + if [ ! -f /etc/.java/.systemPrefs/.system.lock ]; then + touch /etc/.java/.systemPrefs/.system.lock + chmod 644 /etc/.java/.systemPrefs/.system.lock + fi + if [ ! -f /etc/.java/.systemPrefs/.systemRootModFile ]; then + touch /etc/.java/.systemPrefs/.systemRootModFile + chmod 644 /etc/.java/.systemPrefs/.systemRootModFile + fi + + for i in $jre_tools; do + unset slave1 slave2 || true + if [ -e $mandir/man1/$i.$srcext ]; then + slave1="--slave \ + /usr/share/man/man1/$i.$dstext \ + $i.$dstext \ + $mandir/man1/$i.$srcext" + fi + # disabled + if false && [ -e $mandir/ja/man1/$i.$srcext ]; then + slave2="--slave \ + /usr/share/man/ja/man1/$i.$dstext \ + ${i}_ja.$dstext \ + $mandir/ja/man1/$i.$srcext" + fi + update-alternatives \ + --install \ + /usr/bin/$i \ + $i \ + $basediralias/jre/bin/$i \ + $priority \ + $slave1 $slave2 + done + update-alternatives \ + --install /usr/bin/jexec jexec $basediralias/jre/lib/jexec $priority \ + --slave \ + /usr/share/binfmts/jar \ + jexec-binfmt \ + $basediralias/jre/lib/jar.binfmt + + # register binfmt; ignore errors, the alternative may already be + # registered by another JRE. + if which update-binfmts >/dev/null && [ -r /usr/share/binfmts/jar ]; then + update-binfmts --package @basename@ --import jar || true + fi + + mount | grep -qs 'on /proc type proc' || echo >&2 "/proc is not mounted; some java apps may fail" + + # activate class data sharing + case @jdiralias@ in + *cacao|*shark);; + *) + case @archdir@ in i386|sparc) + rm -f $basedir/jre/lib/@archdir@/client/classes.jsa + log=$(tempfile) + if ! $basedir/bin/java -client -Xshare:dump -XX:PermSize=128m > $log; then + cat >&2 $log + rm -f $log + # this may fail on some machines/configurations, just ignore it. + echo >&2 "ignoring dump failure" + #exit 1 + fi + rm -f $log + esac + esac + + ;; + +esac + +#DEBHELPER# + +exit 0 --- openjdk-6-6b16~pre5.orig/debian/JB-jre-headless.postrm.in +++ openjdk-6-6b16~pre5/debian/JB-jre-headless.postrm.in @@ -0,0 +1,17 @@ +#!/bin/sh -e + +jdiralias=@jdiralias@ + +case "$1" in +purge) + if [ -z "$jdiralias" ]; then + echo >&2 "$(basename $0): Internal error" + exit 1 + fi + rm -rf /etc/$jdiralias + + # XXX should remove /etc/.java ??? + ;; +esac + +#DEBHELPER# --- openjdk-6-6b16~pre5.orig/debian/JB-jre-headless.overrides.in +++ openjdk-6-6b16~pre5/debian/JB-jre-headless.overrides.in @@ -0,0 +1,14 @@ +# It seems to be acceptable to use rpath for private libraries like the +# jdk is doing it. Check http://wiki.debian.org/RpathIssue for more +# information. +@basename@-jre-headless binary: binary-or-shlib-defines-rpath + +# Allow executable stack in libjvm.so. +@basename@-jre-headless binary: shlib-with-executable-stack + +# The package *-jre-headless depends on *-jre via libaccess-bridge-java. +# Lintian is wrong here. +@basename@-jre-headless binary: usr-share-doc-symlink-without-dependency @basename@-jre + +# empty directory by intent +@basename@-jre-headless binary: package-contains-empty-directory usr/share/binfmts/ --- openjdk-6-6b16~pre5.orig/debian/JB-archive.keys.in +++ openjdk-6-6b16~pre5/debian/JB-archive.keys.in @@ -0,0 +1,18 @@ +application/java-archive + description=Java Archive + icon_filename=@basename@ + default_action_type=application + default_application_id=java-archive + short_list_application_user_additions=java-archive +application/x-java-archive + description=Java Archive + icon_filename=@basename@ + default_action_type=application + default_application_id=java-archive + short_list_application_user_additions=java-archive +application/x-jar + description=Java Archive + icon_filename=@basename@ + default_action_type=application + default_application_id=java-archive + short_list_application_user_additions=java-archive --- openjdk-6-6b16~pre5.orig/debian/JB-jdk.overrides.in +++ openjdk-6-6b16~pre5/debian/JB-jdk.overrides.in @@ -0,0 +1,7 @@ +# It seems to be acceptable to use rpath for private libraries like the +# jdk is doing it. Check http://wiki.debian.org/RpathIssue for more +# information. +@basename@-jdk binary: binary-or-shlib-defines-rpath + +# this is in @basename@-jre +@basename@-jdk binary: menu-icon-missing /usr/share/pixmaps/@basename@.xpm --- openjdk-6-6b16~pre5.orig/debian/JB-doc.doc-base.in +++ openjdk-6-6b16~pre5/debian/JB-doc.doc-base.in @@ -0,0 +1,11 @@ +Document: @JDK@-doc +Title: @vendor@ Java(TM) @RELEASE@ JDK, Standard Edition Documentation +Author: @vendor@ +Abstract: The Java @RELEASE@ Platform Documentation contains API specifications, + feature descriptions, developer guides, reference pages for JDK tools + and utilities, demos, and links to related information. +Section: Programming + +Format: HTML +Index: /usr/share/doc/@basename@-jre/api/index.html +Files: /usr/share/doc/@basename@-jre/api/*/*.html --- openjdk-6-6b16~pre5.orig/debian/JB-javaws.desktop.in +++ openjdk-6-6b16~pre5/debian/JB-javaws.desktop.in @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=@vendor@ Java @RELEASE@ Web Start +Name[fi]=@vendor@ Java @RELEASE@ - Web Start +Comment=@vendor@ Java @RELEASE@ Web Start +Comment[fi]=@vendor@ Java @RELEASE@ - Web Start +Exec=/@basedir@/bin/javaws %u +Terminal=false +Type=Application +Icon=@basename@ +Categories=Application;Network; +MimeType=application/x-java-jnlp-file; --- openjdk-6-6b16~pre5.orig/debian/JB-fonts.defoma-hints.in +++ openjdk-6-6b16~pre5/debian/JB-fonts.defoma-hints.in @@ -0,0 +1,187 @@ +category truetype + +# Sans + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaSansRegular.ttf + Family = LucidaSans + FontName = LucidaSans + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = SansSerif + Weight = Book + Width = Variable + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaSansDemiBold.ttf + Family = LucidaSans + FontName = LucidaSans-Demibold + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = SansSerif + Weight = Bold + Width = Variable + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaSansOblique.ttf + Family = LucidaSans + FontName = LucidaSans-Oblique + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = SansSerif + Weight = Thin + Width = Variable + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaSansDemiOblique.ttf + Family = LucidaSans + FontName = LucidaSans-Demibold-Oblique + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = SansSerif + Weight = Bold + Width = Variable + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end + +# Serif + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaBrightRegular.ttf + Family = LucidaBright + FontName = LucidaBright-Regular + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Roman + Weight = Book + Width = Variable + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaBrightItalic.ttf + Family = LucidaBright + FontName = LucidaBright-Italic + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Roman + Weight = Book + Width = Variable + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaBrightDemiBold.ttf + Family = Lucida-Bright + FontName = Lucida-Bright-Demi + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Roman + Weight = Bold + Width = Variable + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaBrightDemiItalic.ttf + Family = Lucida-Bright + FontName = Lucida-Bright-DemiItalic + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Roman + Weight = Demi + Width = Variable + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end + +# Mono + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaTypewriterRegular.ttf + Family = LucidaSans-Typewriter + FontName = LucidaSans-Typewriter + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Typewriter + Weight = Book + Width = Fixed + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaTypewriterOblique.ttf + Family = LucidaSans-Typewriter + FontName = LucidaSans-Typewriter-Oblique + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Typewriter + Weight = Book + Width = Fixed + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaTypewriterBold.ttf + Family = LucidaSans-Typewriter + FontName = LucidaSans-Typewriter-Bold + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Typewriter + Weight = Bold + Width = Fixed + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaTypewriterBoldOblique.ttf + Family = LucidaSans-Typewriter + FontName = LucidaSans-Typewriter-Bold-Oblique + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Typewriter + Weight = Bold + Width = Fixed + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end --- openjdk-6-6b16~pre5.orig/debian/buildwatch.sh +++ openjdk-6-6b16~pre5/debian/buildwatch.sh @@ -0,0 +1,40 @@ +#! /bin/sh + +builddir=$1 + +echo $$ > buildwatch.pid + +maxwait=$(expr 180 \* 60) +wait=$maxwait +ival=$(expr 30 \* 60) +#ival=3 + +while [ $wait -gt 0 ]; do + sleep $ival + wait=$(expr $wait - $ival) + state= + if ps x | grep -v grep | egrep -qs '/cc1|jar|java|gij'; then + state="compiler/java/jar running ..." + wait=$maxwait + fi + + new_quiet=$(ls -l $builddir/openjdk*/build/*/tmp/rt-orig.jar $builddir/openjdk*/build/*/lib/tools.jar $builddir/openjdk*/build/*/lib/ct.sym 2>&1 | md5sum) + if [ "$old_quiet" != "$new_quiet" ]; then + state="assembling jar file ..." + wait=$maxwait + fi + old_quiet=$new_quiet + + new_noisy=$(ls -l $builddir/mauve-*/mauve_output* jtreg_output-* 2>&1 | md5sum) + if [ "$old_noisy" != "$new_noisy" ]; then + wait=$maxwait + elif [ -n "$state" ]; then + echo $state + fi + old_noisy=$new_noisy + + if [ ! -f buildwatch.pid ]; then + echo "buildwatch exit" + exit 0 + fi +done --- openjdk-6-6b16~pre5.orig/debian/JB-jre-i586.menu.in +++ openjdk-6-6b16~pre5/debian/JB-jre-i586.menu.in @@ -0,0 +1,16 @@ + +?package(@basename@-bin):\ + needs="x11"\ + section="Applications/System"\ + title="@vendor@ Java @RELEASE@ Plugin Control Panel"\ + command="/@basedir@/bin/ControlPanel"\ + icon="/usr/share/pixmaps/@basename@.xpm"\ + hints="Java2" + +?package(@basename@-bin):\ + needs="x11"\ + section="Applications/Network"\ + title="@vendor@ Java @RELEASE@ Web Start"\ + command="/@basedir@/bin/javaws -viewer"\ + icon="/usr/share/pixmaps/@basename@.xpm"\ + hints="Java2" --- openjdk-6-6b16~pre5.orig/debian/font.properties.ja +++ openjdk-6-6b16~pre5/debian/font.properties.ja @@ -0,0 +1,197 @@ +# @(#)font.properties.ja.linux 1.7 02/03/07 +# +# Copyright 2002 Sun Microsystems, Inc. All rights reserved. +# + +# Component Font Mappings +# +serif.0=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1 +serif.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.italic.0=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1 +serif.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.bold.0=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1 +serif.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.bolditalic.0=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1 +serif.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.italic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.bold.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.bolditalic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.italic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.bold.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.bolditalic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +# Missing Glyph Character +# +default.char=274f + +# Component Font Character Encodings +# +fontcharset.serif.0=sun.io.CharToByteISO8859_1 +fontcharset.serif.1=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.sansserif.0=sun.io.CharToByteISO8859_1 +fontcharset.sansserif.1=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.monospaced.0=sun.io.CharToByteISO8859_1 +fontcharset.monospaced.1=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.dialog.0=sun.io.CharToByteISO8859_1 +fontcharset.dialog.1=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1 +fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11JIS0208 + +# Exclusion Ranges +# + +# XFontSet Information +# +fontset.serif.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.default=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 --- openjdk-6-6b16~pre5.orig/debian/sun_java_app.xpm +++ openjdk-6-6b16~pre5/debian/sun_java_app.xpm @@ -0,0 +1,199 @@ +/* XPM */ +static char * dukejre_xpm[] = { +"32 32 164 2", +" c None", +". c #000000", +"+ c #2D2D2D", +"@ c #363636", +"# c #313131", +"$ c #3E3E3E", +"% c #3D3D3D", +"& c #2B2B2B", +"* c #444444", +"= c #494949", +"- c #373737", +"; c #1C1C1C", +"> c #545454", +", c #434343", +"' c #272727", +") c #0B0B0B", +"! c #414141", +"~ c #5C5C5C", +"{ c #4F4F4F", +"] c #141414", +"^ c #3A3A3A", +"/ c #585858", +"( c #403A3A", +"_ c #32201F", +": c #090202", +"< c #4F4E4E", +"[ c #833D3E", +"} c #BE3432", +"| c #D63736", +"1 c #79201F", +"2 c #040101", +"3 c #251313", +"4 c #212121", +"5 c #9A5857", +"6 c #EBB9B9", +"7 c #E03A38", +"8 c #CA3430", +"9 c #862221", +"0 c #251211", +"a c #774C35", +"b c #CC5213", +"c c #A25151", +"d c #B23D3C", +"e c #AC2B29", +"f c #8F2422", +"g c #691A19", +"h c #321D1E", +"i c #7E3D20", +"j c #D55A0D", +"k c #8E3F10", +"l c #250F0F", +"m c #5D1615", +"n c #631817", +"o c #661918", +"p c #501313", +"q c #200909", +"r c #3D3A39", +"s c #6D341B", +"t c #AE4F14", +"u c #CC5515", +"v c #44403F", +"w c #381414", +"x c #310C0C", +"y c #220908", +"z c #1F0B0B", +"A c #413939", +"B c #525252", +"C c #9B6343", +"D c #D96319", +"E c #D3A88C", +"F c #D7D7D7", +"G c #868383", +"H c #797777", +"I c #898989", +"J c #A3A3A3", +"K c #DBDBDB", +"L c #E27626", +"M c #DE6F21", +"N c #E9E8E7", +"O c #EDEDED", +"P c #F8F8F8", +"Q c #FFFFFF", +"R c #EC7A20", +"S c #E27728", +"T c #ED7C21", +"U c #E5E1DE", +"V c #EEEEEE", +"W c #F6F6F6", +"X c #FDFDFD", +"Y c #B76D3E", +"Z c #E5711D", +"` c #F0851E", +" . c #ED7D24", +".. c #F18B1D", +"+. c #C75810", +"@. c #CC5616", +"#. c #E36F1D", +"$. c #F2911A", +"%. c #FBFBFB", +"&. c #F9F6F2", +"*. c #F9AA14", +"=. c #F08A1D", +"-. c #D35E13", +";. c #E16D1C", +">. c #F49B18", +",. c #B9B9B9", +"'. c #FAFAFA", +"). c #F49818", +"!. c #E3701D", +"~. c #A1480F", +"{. c #E06B1C", +"]. c #FCFCFC", +"^. c #E26D1C", +"/. c #0F0F0F", +"(. c #DE691B", +"_. c #F6A016", +":. c #E97E1C", +"<. c #F7A117", +"[. c #EB7A20", +"}. c #E4701D", +"|. c #837B77", +"1. c #A0938A", +"2. c #717171", +"3. c #959595", +"4. c #E1A27A", +"5. c #DB844B", +"6. c #D6671F", +"7. c #D56318", +"8. c #D6671B", +"9. c #DB6616", +"0. c #DE6614", +"a. c #D96B1C", +"b. c #D66A21", +"c. c #D7996D", +"d. c #C0BFBF", +"e. c #393939", +"f. c #686868", +"g. c #8F8F8F", +"h. c #D3D3D3", +"i. c #D1D1D1", +"j. c #CFCFCF", +"k. c #DCDCDC", +"l. c #D8D8D8", +"m. c #C0C0C0", +"n. c #C3C3C3", +"o. c #333333", +"p. c #696969", +"q. c #606060", +"r. c #E6E6E6", +"s. c #A0A0A0", +"t. c #8A8A8A", +"u. c #5F5F5F", +"v. c #8C8C8C", +"w. c #B6B6B6", +"x. c #BDBDBD", +"y. c #262626", +"z. c #7C7C7C", +"A. c #C2C2C2", +"B. c #C1C1C1", +"C. c #B5B5B5", +"D. c #6E6E6E", +"E. c #868686", +"F. c #ABABAB", +"G. c #292929", +" ", +" . . ", +" . . . . ", +" . . . . ", +" + . . . . . . ", +" @ # . . . . . . . ", +" $ % & . . . . . . ", +" * = - ; . . . . . ", +" * > , ' ) . . . . . . ", +" ! ~ { # ] . . . . ", +" ^ / / ( _ : . . . ", +" # < [ } | 1 2 . ", +" 3 4 5 6 7 8 9 0 a b . ", +" 3 3 c d e f g h i j . ", +" k l m n o p q r s j . ", +" t u v w x y z A B C j . ", +" $ . D E F G H I J K j L . ", +" $ . M j N O P Q Q Q j R j ", +" $ $ . S T j U V W X j T T j Y ", +" $ . . Z ` T j j j j j ...T j +. ", +" . . @.#.$.%.%.%.%.%.%.&.*.=.j -. ", +" . . @.;.>.%.%.,.. '.%.%.*.).!.j ~. ", +" . . @.{.*.%.%.%.. ].].%.*.*.^.j j ", +" /.. j (.*.%.'.%.. '.%.%.*._.^.j j ", +" . . . j :.%.'.%.%.'.'.%.<.[.}.j |. ", +" . . # . . j j j T T T T T T T j 1.2. ", +" . ^ 3.O 4.5.6.7.8.9.0.a.b.c.d.e.f. ", +" ] . g.O h.i.j.j.h.h.h.k.l.m.n.o.p. ", +" q.O O r.s.t.$ $ $ u.v.3.w.x.y.u. ", +" z.A.B.C.D.$ $ $ $ u.E.F.& u. ", +" # F.F.D.$ $ $ $ ' G.e.u. ", +" $ $ $ $ $ $ $ "}; --- openjdk-6-6b16~pre5.orig/debian/JB-jre.postinst.in +++ openjdk-6-6b16~pre5/debian/JB-jre.postinst.in @@ -0,0 +1,57 @@ +#!/bin/sh + +set -e + +priority=@priority@ +basedir=/@basedir@ +basediralias=/@basediralias@ +jdiralias=@jdiralias@ +mandir=/@basediralias@/jre/man +srcext=1.gz +dstext=1.gz +jre_tools='@jre_tools@' + +case "$1" in +configure) + for i in $jre_tools; do + unset slave1 slave2 || true + if [ -e $mandir/man1/$i.$srcext ]; then + slave1="--slave \ + /usr/share/man/man1/$i.$dstext \ + $i.$dstext \ + $mandir/man1/$i.$srcext" + fi + # disabled + if false && [ -e $mandir/ja/man1/$i.$srcext ]; then + slave2="--slave \ + /usr/share/man/ja/man1/$i.$dstext \ + ${i}_ja.$dstext \ + $mandir/ja/man1/$i.$srcext" + fi + update-alternatives \ + --install \ + /usr/bin/$i \ + $i \ + $basediralias/jre/bin/$i \ + $priority \ + $slave1 $slave2 + done + + # fix slave links for man page alternatives + if [ -n "$2" ] && dpkg --compare-versions "$2" lt 6-00-2ubuntu2; then + for i in $jre_tools; do + current=$(LANG=C update-alternatives --display $i 2>&1 \ + | awk '/link currently points to/ { print $NF}') + case "$current" in /@basediralias@*) + update-alternatives --quiet --set $i $basediralias/jre/bin/$i + esac + done + fi + + ;; + +esac + +#DEBHELPER# + +exit 0 --- openjdk-6-6b16~pre5.orig/debian/JB-archive.applications.in +++ openjdk-6-6b16~pre5/debian/JB-archive.applications.in @@ -0,0 +1,6 @@ +java-archive + command=/@basedir@/bin/java -jar + name=java-archive + can_open_multiple_files=false + requires_terminal=false + mime_types=application/java-archive,application/x-java-archive,application/x-jar --- openjdk-6-6b16~pre5.orig/debian/JAVA_HOME.in +++ openjdk-6-6b16~pre5/debian/JAVA_HOME.in @@ -0,0 +1,29 @@ + JAVA_HOME + +1. Legacy use of JAVA_HOME + + As of the latest versions of java-common there really should + be no need for JAVA_HOME as Java(TM) should be completely + integrated with your Debian GNU/Linux system. + + For reference, the setting of JAVA_HOME for Sun Java is: + JAVA_HOME=/@TOP@/@jdiralias@ + +2. Selecting @basename@ as the default Java(TM) implementation + + Please see README.alternatives for instructions on how + to make @basename@ executables and man pages the default on your system. + + +3. For developer information about this packaging of Java(TM) for Debian + please visit: + + https://jdk-distros.dev.java.net/ + + In addition to technical information the jdk-distros site + provides forums to discuss packaging of Java for Linux + (and OpenSolaris) and to discuss the new Operating System Distributor + License for Java (DLJ). + + + --- openjdk-6-6b16~pre5.orig/debian/copyright +++ openjdk-6-6b16~pre5/debian/copyright @@ -0,0 +1,1969 @@ +This package was debianized by Matthias Klose on +Wed, 08 Aug 2007 15:55:39 +0200. + +It was downloaded from + http://icedtea.classpath.org + http://download.java.net/openjdk/jdk6/ + http://ftp.gnome.org/pub/GNOME/sources/java-access-bridge/ + +------------------------------------------------------------------------------ +Upstream Authors: + +IcedTea (see AUTHORS for a current list): + Lillian Angel + Gary Benson + Tania Bento + Deepak Bhole + Thomas Fitzsimmons + Kyle Galloway + Andrew Haley + Ioana Iivan + Matthias Klose + Francis Kung + Omair Majid + Casey Marshall + Raif Naffah + Joshua Sumali + Christian Thalinger + Mark Wielaard + +OpenJDK: + Sun Microsystems, Inc. + +Java Access Bridge: + Bill Haneman + Louise Miller + Gergõ Érdi + Laszlo (Laca) Peter + Jeff Cai + George Kraft IV + Padraig O'Briain + Darren Kenny + +Packaging: + Matthias Klose + +------------------------------------------------------------------------------ +Copyright: + +IcedTea: + Portions Copyright © 2007 Lillian Angel + Portions Copyright © 2007 Gary Benson + Portions Copyright © 2007 Tania Bento + Portions Copyright © 2008 Deepak Bhole + Portions Copyright © 2007 Thomas Fitzsimmons + Portions Copyright © 2007 Kyle Galloway + Portions Copyright © 2007 Andrew Haley + Portions Copyright © 2008 Ioana Iivan + Portions Copyright © 2007 Matthias Klose + Portions Copyright © 2007 Francis Kung + Portions Copyright © 2008 Omair Majid + Portions Copyright © 2007 Casey Marshall + Portions Copyright © 2007 Raif Naffah + Portions Copyright © 2007 Joshua Sumali + Portions Copyright © 2007 Christian Thalinger + Portions Copyright © 2007 Mark Wielaard + Portions Copyright © 2007, 2008 Red Hat, Inc. + Portions Copyright © 2001-2003 Jon A. Maxwell (JAM) + Portions Copyright © 1992, 1995-2007 Sun Microsystems, Inc. + Portions Copyright © 2007 Matthew Flaschen + Portions Copyright © 2000-2002 Marc De Scheemaecker + Portions Copyright © 1991-1998 Thomas G. Lane + Portions Copyright © 2007 Free Software Foundation, Inc. + +OpenJDK: + Copyright © 1996-2007 Sun Microsystems, Inc. + For third party copyrights see below (copies from the third party readme). + Portions Copyright © 1993-1999 IBM Corp. + Portions Copyright © 1997 Eastman Kodak Company. + Portions Copyright © 1999-2005 The Apache Software Foundation. + +Java Access Bridge: + Portions Copyright © 2002-2007 Bill Haneman + Portions Copyright © 2002-2007 Louise Miller + Portions Copyright © 2002-2007 Gergõ Érdi + Portions Copyright © 2002-2007 Laszlo (Laca) Peter + Portions Copyright © 2002-2007 Jeff Cai + Portions Copyright © 2002-2007 George Kraft IV + Portions Copyright © 2002-2007 Padraig O'Briain + Portions Copyright © 2002-2007 Darren Kenny + +Packaging: + Copyright © 2007, 2008 Canonical Ltd. + +------------------------------------------------------------------------------ +License: + +NOTE: the combined work which includes the upstream components below +carries forward the OpenJDK Assembly Exception (text included below). + +Packaging: + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +IcedTea: + IcedTea is licensed under the GPL v2. See `/usr/share/common-licenses/GPL-2'. + + The sound files (pulseaudio/testsounds/*.wav) were taken from the KDE Project + (www.kde.org). A copy of them can be obtained from + http://websvn.kde.org/branches/KDE/4.0/kdeartwork/sounds/ . They are licensed + by the copyright holders as GPLv2. + +OpenJDK: + OpenJDK is licensed under the GPL v2 with exceptions, + see `/usr/share/common-licenses/GPL-2'. + The exceptions are: + - "CLASSPATH" EXCEPTION TO THE GPL + - OPENJDK ASSEMBLY EXCEPTION + Various third party code in OpenJDK is licensed under different licenses. + See below (THIRD_PARTY_README). + +Java Access Bridge: + Java Access Bridge is licensed under the LGPL v2. + See `/usr/share/common-licenses/LGPL-2'. + +A Note About License Headers +---------------------------- + +Some sources downloaded from openjdk.java.net do not display the GPL +license header. Instances are: + + - The files in openjdk/j2se/src/share/classes/javax/xml/stream/ seem to + comprise the BEA-StAX source code + + http://ftpna2.bea.com/pub/downloads/jsr173.jar + + with some Sun-specific modifications. We're assuming that Sun is + bundling BEA-StAX under the terms of the Apache License 2.0 and + that the modifications are owned by Sun. + + - We are assuming that these files are owned by Sun: + openjdk/j2se/src/share/classes/**/resources/*.properties + +The downloaded sources include a script that inserts proprietary +license headers into the source files it generates. The script +itself is GPL'd so we patched them to emit the GPL header. The +file is: + openjdk/j2se/make/java/nio/genExceptions.sh + +------------------------------------------------------------------------------ +"CLASSPATH" EXCEPTION TO THE GPL + +Certain source files distributed by Sun Microsystems, Inc. are subject to +the following clarification and special exception to the GPL, but only where +Sun has expressly included in the particular source file's header the words +"Sun designates this particular file as subject to the "Classpath" exception +as provided by Sun in the LICENSE file that accompanied this code." + + Linking this library statically or dynamically with other modules is making + a combined work based on this library. Thus, the terms and conditions of + the GNU General Public License cover the whole combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules, + and to copy and distribute the resulting executable under terms of your + choice, provided that you also meet, for each linked independent module, + the terms and conditions of the license of that module. An independent + module is a module which is not derived from or based on this library. If + you modify this library, you may extend this exception to your version of + the library, but you are not obligated to do so. If you do not wish to do + so, delete this exception statement from your version. + +------------------------------------------------------------------------------ +OPENJDK ASSEMBLY EXCEPTION + +The OpenJDK source code made available by Sun at openjdk.java.net and +openjdk.dev.java.net ("OpenJDK Code") is distributed under the terms of the +GNU General Public License version 2 +only ("GPL2"), with the following clarification and special exception. + + Linking this OpenJDK Code statically or dynamically with other code + is making a combined work based on this library. Thus, the terms + and conditions of GPL2 cover the whole combination. + + As a special exception, Sun gives you permission to link this + OpenJDK Code with certain code licensed by Sun as indicated at + http://openjdk.java.net/legal/exception-modules-2007-05-08.html + ("Designated Exception Modules") to produce an executable, + regardless of the license terms of the Designated Exception Modules, + and to copy and distribute the resulting executable under GPL2, + provided that the Designated Exception Modules continue to be + governed by the licenses under which they were offered by Sun. + +As such, it allows licensees and sublicensees of Sun's GPL2 OpenJDK Code to +build an executable that includes those portions of necessary code that Sun +could not provide under GPL2 (or that Sun has provided under GPL2 with the +Classpath exception). If you modify or add to the OpenJDK code, that new +GPL2 code may still be combined with Designated Exception Modules if the +new code is made subject to this exception by its copyright holder. + +------------------------------------------------------------------------------ +OpenJDK Trademark Notice +Version 1.1, 2008/3/10 + +OpenJDK (the "Name") is a trademark of Sun Microsystems, Inc. (the "Owner"). +Owner permits any person obtaining a copy of this software (the "Software") +which is based on original software retrieved from one of the following +websites: http://download.java.net/openjdk, http://hg.openjdk.java.net/jdk6, +or http://openjdk.java.net (each a "Website", with the original software made +available by the Owner on a Website being known as the "Website Software") to +use the Name in package names and version strings of the Software subject to +the following conditions: + + - The Software is a substantially complete implementation of the OpenJDK + development kit or runtime environment code made available by Owner on a + Website, and the vast majority of the Software code is identical to the + upstream Website Software; + + - No permission is hereby granted to use the Name in any other manner, + unless such use constitutes "fair use." + + - The Owner makes no warranties of any kind respecting the Name and all + representations and warranties, including any implied warranty of + merchantability, fitness for a particular purpose or non-infringement + are hereby disclaimed; and + + - This notice and the following legend are included in all copies of the + Software or portions of it: + + OpenJDK is a trademark or registered trademark of Sun Microsystems, + Inc. in the United States and other countries. + +The Name may also be used in connection with descriptions of the Software that +constitute "fair use," such as "derived from the OpenJDK code base" or "based +on the OpenJDK source code." + +Owner intends to revise this Notice as necessary in order to meet the needs of +the OpenJDK Community. Please send questions or comments about this Notice to +Sun Microsystems at openjdk-tm@sun.com. Revisions to this Notice will be +announced on the public mailing list announce@openjdk.java.net, to which you +may subscribe by visiting http://mail.openjdk.java.net. The latest version of +this Notice may be found at http://openjdk.java.net/legal. + +------------------------------------------------------------------------------ +the follwing licenses for third party code are taken from +openjdk/THIRD_PARTY_README +------------------------------------------------------------------------------ + +DO NOT TRANSLATE OR LOCALIZE. + +%% This notice is provided with respect to Thai dictionary for text breaking, which may be included with this software: + +--- begin of LICENSE file --- + +Copyright (C) 1982 The Royal Institute, Thai Royal Government. + +Copyright (C) 1998 National Electronics and Computer Technology Center, + National Science and Technology Development Agency, + Ministry of Science Technology and Environment, + Thai Royal Government. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without +limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- end of LICENSE file --- +%% This notice is provided with respect to ASM, which may be included with this software: +Copyright (c) 2000-2005 INRIA, France Telecom +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. +%% This notice is provided with respect to zlib 1.1.3, which may be included with this software: + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate + and zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; + they are too numerous to cite here. + +Copyright notice: + + (C) 1995-1998 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* +receiving lengthy legal documents to sign. The sources are provided +for free but without warranty of any kind. The library has been +entirely written by Jean-loup Gailly and Mark Adler; it does not +include third-party code. + +If you redistribute modified sources, we would appreciate that you include +in the file ChangeLog history information documenting your changes. + +%% This notice is provided with respect to W3C (DTD for XML Signatures), which may be included with this software: +W3C® SOFTWARE NOTICE AND LICENSE +Copyright © 1994-2002 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/ +This W3C work (including software, documents, or other related items) is being provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions: +Permission to use, copy, modify, and distribute this software and its documentation, with or without modification,  for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the software and documentation or portions thereof, including modifications, that you make: +1.The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. +2.Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, a short notice of the following form (hypertext is preferred, text is permitted) should be used within the body of any redistributed or derivative code: "Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/" +3.Notice of any changes or modifications to the W3C files, including the date changes were made. (We recommend you provide URIs to the location from which the code is derived.) +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders. +____________________________________ +This formulation of W3C's notice and license became active on August 14 1998 so as to improve compatibility with GPL. This version ensures that W3C software licensing terms are no more restrictive than GPL and consequently W3C software may be distributed in GPL packages. See the older formulation for the policy prior to this date. Please see our Copyright FAQ for common questions about using materials from our site, including specific terms and conditions for packages like libwww, Amaya, and Jigsaw. Other questions about this notice can be directed to site-policy@w3.org. +  +%% This notice is provided with respect to jscheme.jar, which may be included with this software: +Software License Agreement +Copyright © 1998-2002 by Peter Norvig. +Permission is granted to anyone to use this software, in source or object code form, on any computer system, and to modify, compile, decompile, run, and redistribute it to anyone else, subject to the following restrictions: +1.The author makes no warranty of any kind, either expressed or implied, about the suitability of this software for any purpose. +2.The author accepts no liability of any kind for damages or other consequences of the use of this software, even if they arise from defects in the software. +3.The origin of this software must not be misrepresented, either by explicit claim or by omission. +4.Altered versions must be plainly marked as such, and must not be misrepresented as being the original software. Altered versions may be distributed in packages under other licenses (such as the GNU license). +If you find this software useful, it would be nice if you let me (peter@norvig.com) know about it, and nicer still if you send me modifications that you are willing to share. However, you are not required to do so. + + +%% This notice is provided with respect to PC/SC Lite for Suse Linux v. 1.1.1, which may be included with this software: + +Copyright (c) 1999-2004 David Corcoran +Copyright (C) 1999-2003 Ludovic Rousseau +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +Changes to this license can be made only by the copyright author with +explicit written consent. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +%% This notice is provided with respect to IAIK PKCS Wrapper, which may be included with this software: + +Copyright (c) 2002 Graz University of Technology. All rights reserved. +Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: + + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: + + "This product includes software developed by IAIK of Graz University of Technology." + + Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. + +4. The names "Graz University of Technology" and "IAIK of Graz University of Technology" must not be used to endorse or promote products derived from this software without prior written permission. + +5. Products derived from this software may not be called "IAIK PKCS Wrapper", nor may "IAIK" appear in their name, without prior written permission of Graz University of Technology. + +THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE LICENSOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +%% This notice is provided with respect to Document Object Model (DOM) v. Level 3, which may be included with this software: + +W3Cýý SOFTWARE NOTICE AND LICENSE + +http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 + +This work (and included software, documentation such as READMEs, or other related items) is being +provided by the copyright holders under the following license. By obtaining, using and/or copying this work, you +(the licensee) agree that you have read, understood, and will comply with the following terms and conditions. + +Permission to copy, modify, and distribute this software and its documentation, with or without modification, for +any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies +of the software and documentation or portions thereof, including modifications: + 1.The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + 2.Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the + W3C Software Short Notice should be included (hypertext is preferred, text is permitted) within the body + of any redistributed or derivative code. + 3.Notice of any changes or modifications to the files, including the date changes were made. (We + recommend you provide URIs to the location from which the code is derived.) +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKENO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, +WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THEUSE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS,COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL ORCONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the +software without specific, written prior permission. Title to copyright in this software and any associated +documentation will at all times remain with copyright holders. + +____________________________________ + +This formulation of W3C's notice and license became active on December 31 2002. This version removes the +copyright ownership notice such that this license can be used with materials other than those owned by the +W3C, reflects that ERCIM is now a host of the W3C, includes references to this specific dated version of the +license, and removes the ambiguous grant of "use". Otherwise, this version is the same as the previous +version and is written so as to preserve the Free Software Foundation's assessment of GPL compatibility and +OSI's certification under the Open Source Definition. Please see our Copyright FAQ for common questions +about using materials from our site, including specific terms and conditions for packages like libwww, Amaya, +and Jigsaw. Other questions about this notice can be directed to +site-policy@w3.org. + +%% This notice is provided with respect to Xalan, Xerces, which may be included with this software: + +/* + * The Apache Software License, Version 1.1 + * + * + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. * + * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * + * 4. The names "Xerces" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation and was + * originally based on software copyright (c) 1999, International + * Business Machines, Inc., http://www.ibm.com. For more + * information on the Apache Software Foundation, please see + * + +%% This notice is provided with respect to JavaScript, which may be included with this software: + +AMENDMENTS +The Netscape Public License Version 1.1 ("NPL") consists of the Mozilla Public License Version 1.1 with the following Amendments, including Exhibit A-Netscape Public License.  Files identified with "Exhibit A-Netscape Public License" are governed by the Netscape Public License Version 1.1. +Additional Terms applicable to the Netscape Public License. +I. Effect. +These additional terms described in this Netscape Public License -- Amendments shall apply to the Mozilla Communicator client code and to all Covered Code under this License. +II. ''Netscape's Branded Code'' means Covered Code that Netscape distributes and/or permits others to distribute under one or more trademark(s) which are controlled by Netscape but which are not licensed for use under this License. +III. Netscape and logo. +This License does not grant any rights to use the trademarks "Netscape'', the "Netscape N and horizon'' logo or the "Netscape lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", "Smart Browsing" even if such marks are included in the Original Code or Modifications. +IV. Inability to Comply Due to Contractual Obligation. +Prior to licensing the Original Code under this License, Netscape has licensed third party code for use in Netscape's Branded Code. To the extent that Netscape is limited contractually from making such third party code available under this License, Netscape may choose to reintegrate such code into Covered Code without being required to distribute such code in Source Code form, even if such code would otherwise be considered ''Modifications'' under this License. +V. Use of Modifications and Covered Code by Initial Developer. +V.1. In General. +The obligations of Section 3 apply to Netscape, except to the extent specified in this Amendment, Section V.2 and V.3. +V.2. Other Products. +Netscape may include Covered Code in products other than the Netscape's Branded Code which are released by Netscape during the two (2) years following the release date of the Original Code, without such additional products becoming subject to the terms of this License, and may license such additional products on different terms from those contained in this License. +V.3. Alternative Licensing. +Netscape may license the Source Code of Netscape's Branded Code, including Modifications incorporated therein, without such Netscape Branded Code becoming subject to the terms of this License, and may license such Netscape Branded Code on different terms from those contained in this License. +  +VI. Litigation. +Notwithstanding the limitations of Section 11 above, the provisions regarding litigation in Section 11(a), (b) and (c) of the License shall apply to all disputes relating to this License. + +EXHIBIT A-Netscape Public License. +  +''The contents of this file are subject to the Netscape Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/NPL/ +Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. +The Original Code is Mozilla Communicator client code, released March 31, 1998. +The Initial Developer of the Original Code is Netscape Communications Corporation. Portions created by Netscape are Copyright (C) 1998-1999 Netscape Communications Corporation. All Rights Reserved. +Contributor(s): ______________________________________. +  +Alternatively, the contents of this file may be used under the terms of the _____ license (the  "[___] License"), in which case the provisions of [______] License are applicable  instead of those above.  If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the NPL, indicate your decision by deleting  the provisions above and replace  them with the notice and other provisions required by the [___] License.  If you do not delete the provisions above, a recipient may use your version of this file under either the NPL or the [___] License." + +MOZILLA PUBLIC LICENSE +Version 1.1 + +1. Definitions. +1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party. +1.1. ''Contributor'' means each entity that creates or contributes to the creation of Modifications. +1.2. ''Contributor Version'' means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. +1.3. ''Covered Code'' means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. +1.4. ''Electronic Distribution Mechanism'' means a mechanism generally accepted in the software development community for the electronic transfer of data. +1.5. ''Executable'' means Covered Code in any form other than Source Code. +1.6. ''Initial Developer'' means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. +1.7. ''Larger Work'' means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. +1.8. ''License'' means this document. +1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. +1.9. ''Modifications'' means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: +A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. +B. Any new file that contains any part of the Original Code or previous Modifications. +  +1.10. ''Original Code'' means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. +1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation,  method, process, and apparatus claims, in any patent Licensable by grantor. +1.11. ''Source Code'' means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. +1.12. "You'' (or "Your")  means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You'' includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control'' means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. +2. Source Code License. +2.1. The Initial Developer Grant. +The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: +(a)  under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and +(b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). +  +(c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. +(d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code;  or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. +  +2.2. Contributor Grant. +Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license +  +(a)  under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and +(b) under Patent Claims infringed by the making, using, or selling of  Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of  Modifications made by that Contributor with its Contributor Version (or portions of such combination). +(c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code. +(d)    Notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2)  separate from the Contributor Version;  3)  for infringements caused by: i) third party modifications of Contributor Version or ii)  the combination of Modifications made by that Contributor with other software  (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. + +3. Distribution Obligations. +3.1. Application of License. +The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. +3.2. Availability of Source Code. +Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. +3.3. Description of Modifications. +You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. +3.4. Intellectual Property Matters +(a) Third Party Claims. +If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL'' which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. +(b) Contributor APIs. +If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file. +  +          (c)    Representations. +Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License. + +3.5. Required Notices. +You must duplicate the notice in Exhibit A in each file of the Source Code.  If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice.  If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A.  You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code.  You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. +3.6. Distribution of Executable Versions. +You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. +3.7. Larger Works. +You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. +4. Inability to Comply Due to Statute or Regulation. +If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. +5. Application of this License. +This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. +6. Versions of the License. +6.1. New Versions. +Netscape Communications Corporation (''Netscape'') may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. +6.2. Effect of New Versions. +Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. +6.3. Derivative Works. +If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases ''Mozilla'', ''MOZILLAPL'', ''MOZPL'', ''Netscape'', "MPL", ''NPL'' or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) +7. DISCLAIMER OF WARRANTY. +COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. +8. TERMINATION. +8.1.  This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. +8.2.  If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant")  alleging that: +(a)  such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i)  agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant.  If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. +(b)  any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. +8.3.  If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. +8.4.  In the event of termination under Sections 8.1 or 8.2 above,  all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. +9. LIMITATION OF LIABILITY. +UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. +10. U.S. GOVERNMENT END USERS. +The Covered Code is a ''commercial item,'' as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of ''commercial computer software'' and ''commercial computer software documentation,'' as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. +11. MISCELLANEOUS. +This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. +12. RESPONSIBILITY FOR CLAIMS. +As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. +13. MULTIPLE-LICENSED CODE. +Initial Developer may designate portions of the Covered Code as "Multiple-Licensed".  "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the NPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. +``The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at +http://www.mozilla.org/MPL/ +Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF +ANY KIND, either express or implied. See the License for the specific language governing rights and +limitations under the License. +The Original Code is ______________________________________. +The Initial Developer of the Original Code is ________________________. Portions created by + ______________________ are Copyright (C) ______ _______________________. All Rights +Reserved. +Contributor(s): ______________________________________. +Alternatively, the contents of this file may be used under the terms of the _____ license (the  "[___] License"), in which case the provisions of [______] License are applicable  instead of those above.  If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the MPL, indicate your decision by deleting  the provisions above and replace  them with the notice and other provisions required by the [___] License.  If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the [___] License." +[NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.] + +%% This notice is provided with respect to Mesa 3-D graphics library v. 5, which may be included with this software: + +Copyright (c) 2007 The Khronos Group Inc. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and/or associated documentation files (the +"Materials"), to deal in the Materials without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Materials, and to +permit persons to whom the Materials are furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Materials. + +THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + +%% This notice is provided with respect to Byte Code Engineering Library (BCEL), which may be included with this software: + + Apache Software License + + /* +==================================================================== * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 The Apache Software Foundation. Allrights + * reserved. + * + * Redistribution and use in source and binary forms, withor without + * modification, are permitted provided that the followingconditions + * are met: + * + * 1. Redistributions of source code must retain the abovecopyright + * notice, this list of conditions and the followingdisclaimer. + * + * 2. Redistributions in binary form must reproduce theabove copyright + * notice, this list of conditions and the followingdisclaimer in + * the documentation and/or other materials providedwith the + * distribution. + * + * 3. The end-user documentation included with theredistribution, + * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation +(http://www.apache.org/)." + * Alternately, this acknowledgment may appear in thesoftware itself, + * if and wherever such third-party acknowledgmentsnormally appear. + * + * 4. The names "Apache" and "Apache Software Foundation"and + * "Apache BCEL" must not be used to endorse or promoteproducts + * derived from this software without prior writtenpermission. For + * written permission, please contact apache@apache.org. * + * 5. Products derived from this software may not be called"Apache", + * "Apache BCEL", nor may "Apache" appear in their name,without + * prior written permission of the Apache SoftwareFoundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED ORIMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSEARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWAREFOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVERCAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING INANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF + * SUCH DAMAGE. + * +==================================================================== * + * This software consists of voluntary contributions madeby many + * individuals on behalf of the Apache Software +Foundation. For more + * information on the Apache Software Foundation, pleasesee + * . + */ + +%% This notice is provided with respect to Regexp, Regular Expression Package, which may be included with this software: + +The Apache Software License, Version 1.1 +Copyright (c) 2001 The Apache Software Foundation. All rights +reserved. +Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in +the documentation and/or other materials provided with the +distribution. + +3. The end-user documentation included with the redistribution, +if any, must include the following acknowledgment: +"This product includes software developed by the +Apache Software Foundation (http://www.apache.org/)." +Alternately, this acknowledgment may appear in the software itself, +if and wherever such third-party acknowledgments normally appear. + +4. The names "Apache" and "Apache Software Foundation" and +"Apache Turbine" must not be used to endorse or promote products +derived from this software without prior written permission. For +written permission, please contact apache@apache.org. + +5. Products derived from this software may not be called "Apache", +"Apache Turbine", nor may "Apache" appear in their name, without +prior written permission of the Apache Software Foundation. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +==================================================================== +This software consists of voluntary contributions made by many +individuals on behalf of the Apache Software Foundation. For more +information on the Apache Software Foundation, please see + +http://www.apache.org. + +%% This notice is provided with respect to CUP Parser Generator for Java, which may be included with this software: + +CUP Parser Generator Copyright Notice, License, and Disclaimer + +Copyright 1996-1999 by Scott Hudson, Frank Flannery, C. Scott Ananian +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, provided thatthe above copyright notice appear in all copies and that both the copyrightnotice and this permission notice and warranty disclaimer appear in +supporting documentation, and that the names of the authors or their employersnot be used in advertising or publicity pertaining to distribution of +the software without specific, written prior permission. + +The authors and their employers disclaim all warranties with regard to thissoftware, including all implied warranties of merchantability and +fitness. In no event shall the authors or their employers be liable for anyspecial, indirect or consequential damages or any damages whatsoever +resulting from loss of use, data or profits, whether in an action of contract,negligence or other tortious action, arising out of or in connection withthe use or performance of this software. + +%% This notice is provided with respect to SAX v. 2.0.1, which may be included with this software: + +Copyright Status + + SAX is free! + + In fact, it's not possible to own a license to SAX, since it's been placed in the public + domain. + + No Warranty + + Because SAX is released to the public domain, there is no warranty for the design or for + the software implementation, to the extent permitted by applicable law. Except when + otherwise stated in writing the copyright holders and/or other parties provide SAX "as is" + without warranty of any kind, either expressed or implied, including, but not limited to, the + implied warranties of merchantability and fitness for a particular purpose. The entire risk as + to the quality and performance of SAX is with you. Should SAX prove defective, you + assume the cost of all necessary servicing, repair or correction. + + In no event unless required by applicable law or agreed to in writing will any copyright + holder, or any other party who may modify and/or redistribute SAX, be liable to you for + damages, including any general, special, incidental or consequential damages arising out of + the use or inability to use SAX (including but not limited to loss of data or data being + rendered inaccurate or losses sustained by you or third parties or a failure of the SAX to + operate with any other programs), even if such holder or other party has been advised of + the possibility of such damages. + + Copyright Disclaimers + + This page includes statements to that effect by David Megginson, who would have been + able to claim copyright for the original work. + SAX 1.0 + + Version 1.0 of the Simple API for XML (SAX), created collectively by the membership of + the XML-DEV mailing list, is hereby released into the public domain. + + No one owns SAX: you may use it freely in both commercial and non-commercial + applications, bundle it with your software distribution, include it on a CD-ROM, list the + source code in a book, mirror the documentation at your own web site, or use it in any + other way you see fit. + + David Megginson, sax@megginson.com + 1998-05-11 + + SAX 2.0 + + I hereby abandon any property rights to SAX 2.0 (the Simple API for XML), and release + all of the SAX 2.0 source code, compiled code, and documentation contained in this + distribution into the Public Domain. SAX comes with NO WARRANTY or guarantee of + fitness for any purpose. + + David Megginson, david@megginson.com + 2000-05-05 + +%% This notice is provided with respect to Cryptix, which may be included with this software: + +Cryptix General License + +Copyright © 1995-2003 The Cryptix Foundation Limited. All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions aremet: + + 1.Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer. 2.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +THIS SOFTWARE IS PROVIDED BY THE CRYPTIX FOUNDATION LIMITED AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS ORIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FORA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CRYPTIX FOUNDATION LIMITED OR CONTRIBUTORS BELIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOTLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESSINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OFTHE POSSIBILITY OF SUCH DAMAGE. + +%% This notice is provided with respect to X Window System, which may be included with this software: + +Copyright The Open Group + +Permission to use, copy, modify, distribute, and sell this software and itsdocumentation for any purpose is hereby granted without fee, provided that theabove copyright notice appear in all copies and that both that copyright noticeand this permission notice appear in supporting documentation. + +The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESSFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUPBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OFCONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THESOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. + +Portions also covered by other licenses as noted in the above URL. + +%% This notice is provided with respect to Retroweaver, which may be included with this software: + +Copyright (c) February 2004, Toby Reyelts +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +Neither the name of Toby Reyelts nor the names of his contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +%% This notice is provided with respect to stripper, which may be included with this software: + +Stripper : debug information stripper + Copyright (c) 2003 Kohsuke Kawaguchi + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holders nor the names of its + contributors may be used to endorse or promote products derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +%% This notice is provided with respect to libpng official PNG reference library, which may be included with this software: + +This copy of the libpng notices is provided for your convenience. In case ofany discrepancy between this copy and the notices in the file png.h that isincluded in the libpng distribution, the latter shall prevail. + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + +If you modify libpng you may insert additional notices immediately followingthis sentence. + +libpng version 1.2.6, December 3, 2004, is +Copyright (c) 2004 Glenn Randers-Pehrson, and is +distributed according to the same disclaimer and license as libpng-1.2.5with the following individual added to the list of Contributing Authors + Cosmin Truta + +libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, areCopyright (c) 2000-2002 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.0.6with the following individuals added to the list of Contributing Authors + Simon-Pierre Cadieux + Eric S. Raymond + Gilles Vollant + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of the library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes or needs. This library is provided with all faults, and the entire risk of satisfactory quality, performance, accuracy, and effort is with the user. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, areCopyright (c) 1998, 1999 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-0.96,with the following individuals added to the list of Contributing Authors: + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996, 1997 Andreas Dilger +Distributed according to the same disclaimer and license as libpng-0.88,with the following individuals added to the list of Contributing Authors: + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors"is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing Authorsand Group 42, Inc. disclaim all warranties, expressed or implied, +including, without limitation, the warranties of merchantability and offitness for any purpose. The Contributing Authors and Group 42, Inc. +assume no liability for direct, indirect, incidental, special, exemplary,or consequential damages, which may result from the use of the PNG +Reference Library, even if advised of the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute thissource code, or portions hereof, for any purpose, without fee, subjectto the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, withoutfee, and encourage the use of this source code as a component to +supporting the PNG file format in commercial products. If you use thissource code in a product, acknowledgment is not required but would be +appreciated. + + +A "png_get_copyright" function is available, for convenient use in "about"boxes and the like: + + printf("%s",png_get_copyright(NULL)); + +Also, the PNG logo (in PNG format, of course) is supplied in the +files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + +Libpng is OSI Certified Open Source Software. OSI Certified Open Source is acertification mark of the Open Source Initiative. + +Glenn Randers-Pehrson +glennrp at users.sourceforge.net +December 3, 2004 + +%% This notice is provided with respect to Libungif - An uncompressed GIF library, which may be included with this software: + +The GIFLIB distribution is Copyright (c) 1997 Eric S. Raymond + +Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included inall copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THEAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHERLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS INTHE SOFTWARE. + +%% This notice is provided with respect to XML Resolver library, Xalan J2, and StAX API, which may be included with this software: + +[Apache 2.0 license removed from this file. On Debian systems the text of + the Apache 2.0 license can be found in /usr/share/common-licenses/Apache-2.0 ] + +%% Some Portions licensed from IBM are available at: +http://www.ibm.com/software/globalization/icu/ + +%% This notice is provided with respect to ICU4J, ICU 1.8.1 and later, which may be included with this software: + +ICU License - ICU 1.8.1 and later COPYRIGHT AND PERMISSION NOTICE Cop +yright (c) +1995-2003 International Business Machines Corporation and others All rightsreserved. Permission is hereby granted, free of charge, to any person obtaininga copy of this software and associated documentation files (the "Software"), todeal in the Software without restriction, including without limitation therights to use, copy, modify, merge, publish, distribute, and/or sell copies ofthe Software, and to permit persons to whom the Software is furnished to do so,provided that the above copyright notice(s) and this permission notice appear inall copies of the Software and that both the above copyright notice(s) and thispermission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOTLIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSEAND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHTHOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY C + LAIM, OR ANYSPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTINGFROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCEOR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE ORPERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of acopyright holder shall not be used in advertising or otherwise to promote thesale, use or other dealings in this Software without prior written authorizationof the copyright holder. + +%% This notice is provided with respect to Jing, which may be included with this software: + +Jing Copying Conditions + +Copyright (c) 2001-2003 Thai Open Source Software Center Ltd +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification,are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice,this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice,this list of conditions and the following disclaimer in the documentation and/orother materials provided with the distribution. + * Neither the name of the Thai Open Source Software Center Ltd nor the namesof its contributors may be used to endorse or promote products derived from thissoftware without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ANDANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AREDISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ONANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THISSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +%% This notice is provided with respect to RELAX NG Object Model/Parser, which may be included with this software: + + +The MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy ofthis software and associated documentation files (the "Software"), to deal inthe Software without restriction, including without limitation the rights touse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies ofthe Software, and to permit persons to whom the Software is furnished to do so,subject to the following conditions: + +The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS ORIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESSFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS ORCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHERIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR INCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +%% This notice is provided with respect to XFree86-VidMode Extension, which may be included with this software: + +Version 1.1 of XFree86 ProjectLicence. + + Copyright (C) 1994-2004 The XFree86 Project, Inc. All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to deal inthe Software without restriction, including without limitation the rights touse, copy, modify, merge, publish, distribute, sublicence, and/or sell copies ofthe Software, and to permit persons to whom the Software is furnished to do so,subject to the following conditions: + + 1. Redistributions of source code must retain the above copyright notice,this list of conditions, and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyrightnotice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution, and in thesame place and form as other copyright, license and disclaimer information. 3. The end-user documentation included with the redistribution, if any,must include the following acknowledgment: "This product includes softwaredeveloped by The XFree86 Project, Inc (http://www.xfree86.org/) and itscontributors", in the same place and form as other third-party acknowledgments.Alternately, this acknowledgment may appear in the software itself, in the sameform and location as other such third-party acknowledgments. + 4. Except as contained in this notice, the name of The XFree86 Project,Inc shall not be used in advertising or otherwise to promote the sale, use orother dealings in this Software without prior written authorization from TheXFree86 Project, Inc. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY ANDFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE XFREE86PROJECT, INC OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ORBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER INCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISINGIN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITYOF SUCH DAMAGE. + +%% This notice is provided with respect to XML Security, which may be included with this software: + + The Apache Software License, + Version 1.1 + + + PDF + + + Copyright (C) 2002 The Apache SoftwareFoundation. + All rights reserved. Redistribution anduse in + source and binary forms, with or withoutmodifica- + tion, are permitted provided that thefollowing + conditions are met: 1. Redistributions ofsource + code must retain the above copyrightnotice, this + list of conditions and the followingdisclaimer. + 2. Redistributions in binary form mustreproduce + the above copyright notice, this list of conditions and the following disclaimerin the + documentation and/or other materialsprovided with + the distribution. 3. The end-userdocumentation + included with the redistribution, if any,must + include the following acknowledgment:"This + product includes software developed bythe Apache + Software Foundation +(http://www.apache.org/)." + Alternately, this acknowledgment mayappear in the + software itself, if and wherever suchthird-party + acknowledgments normally appear. 4. Thenames + "Apache Forrest" and "Apache SoftwareFoundation" + must not be used to endorse or promoteproducts + derived from this software without priorwritten + permission. For written permission,please contact + apache@apache.org. 5. Products derivedfrom this + software may not be called "Apache", normay + "Apache" appear in their name, withoutprior + written permission of the Apache Software Foundation. THIS SOFTWARE IS PROVIDED``AS IS'' + AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THEIMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NOEVENT + SHALL THE APACHE SOFTWARE FOUNDATION ORITS + CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, ORCONSEQUENTIAL + DAMAGES (INCLU- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ORSERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANYTHEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICTLIABILITY, + OR TORT (INCLUDING NEGLIGENCE OROTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THEPOSSIBILITY OF + SUCH DAMAGE. This software consists ofvoluntary + contributions made by many individuals onbehalf + of the Apache Software Foundation. Formore + information on the Apache SoftwareFoundation, + please see . + +%% This notice is provided with respect to Independent JPEG Group's software (libjpeg), which may be included with this software: + +In plain English: + +1. We don't promise that this software works. (But if you find any bugs, + please let us know!) +2. You can use this software for whatever you want. You don't have to pay us. +3. You may not pretend that you wrote this software. If you use it in a program, you must acknowledge somewhere in your documentation that you've used the IJG code. + +In legalese: + +The authors make NO WARRANTY or representation, either express or implied, with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-1998, Thomas G. Lane. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this software (or portions thereof) for any purpose, without fee, subject to these conditions: + +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice unaltered; and any additions, deletions, or changes to the original files must be clearly indicated in accompanying documentation. + +(2) If only executable code is distributed, then the accompanying documentation must state that "this software is based in part on the work of the Independent JPEG Group". + +(3) Permission for use of this software is granted only if the user accepts full responsibility for any undesirable consequences; the authors accept NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, not just to the unmodified library. If you use our work, you ought to acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name in advertising or publicity relating to this software or products derived from it. This software may be referred to only as "the Independent JPEG Group's software". + +We specifically permit and encourage the use of this software as the basis of commercial products, provided that all warranty or liability claims are assumed by the product vendor. + +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. ansi2knr.c is NOT covered by the above copyright and conditions, but instead by the usual distribution terms of the Free Software Foundation; principally, that you must include source code if you redistribute it. (See the file ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part of any program generated from the IJG code, this does not limit you more than the foregoing paragraphs do. + +The Unix configuration script "configure" was produced with GNU Autoconf. It is copyright by the Free Software Foundation but is freely distributable. The same holds for its supporting scripts (config.guess, config.sub, ltconfig, ltmain.sh). Another support script, install-sh, is copyright by M.I.T. but is also freely distributable. + +It appears that the arithmetic coding option of the JPEG spec is covered by patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot legally be used without obtaining one or more licenses. For this reason, support for arithmetic coding has been removed from the free JPEG software. (Since arithmetic coding provides only a marginal gain over the unpatented Huffman mode, it is unlikely that very many implementations will support it.) So far as we are aware, there are no patent restrictions on the remaining code. + +The IJG distribution formerly included code to read and write GIF files. To avoid entanglement with the Unisys LZW patent, GIF reading support has been removed altogether, and the GIF writer has been simplified to produce "uncompressed GIFs". This technique does not use the LZW algorithm; the resulting GIF files are larger than usual, but are readable by all standard GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." + +%% This notice is provided with respect to X Resize and Rotate (Xrandr) Extension, which may be included with this software: +2. XFree86 License + +XFree86 code without an explicit copyright is covered by the following +copyright/license: + +Copyright (C) 1994-2003 The XFree86 Project, Inc. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE XFREE86 +PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the XFree86 Project shall not be +used in advertising or otherwise to promote the sale, use or other dealings in +this Software without prior written authorization from the XFree86 Project. + +%% This notice is provided with respect to fontconfig, which may be included with this software: +Id: COPYING,v 1.3 2003/04/04 20:17:40 keithp Exp $ +Copyright 2001,2003 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of Keith Packard not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. Keith Packard makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +%% This notice is provided with respect to XFree86, which may be included with this software: +Copyright (C) 1994-2002 The XFree86 Project, Inc. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated +documentation files (the "Software"), to deal in the Software without +restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT +NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the XFree86 Project shall not be +used in advertising or otherwise +to promote the sale, use or other dealings in this Software without prior +written authorization from the XFree86 +Project. +%% This notice is provided with respect to Fast Infoset, which may be included with this software: +* Fast Infoset ver. 0.1 software ("Software") +* +* Copyright, 2004-2005 Sun Microsystems, Inc. All Rights Reserved. +* +* Software is licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. You may +* obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +* License for the specific language governing permissions and limitations. +* +* Sun supports and benefits from the global community of open source +* developers, and thanks the community for its important contributions and +* open standards-based technology, which Sun has adopted into many of its +* products. +* +* Please note that portions of Software may be provided with notices and +* open source licenses from such communities and third parties that govern the +* use of those portions, and any licenses granted hereunder do not alter any +* rights and obligations you may have under such open source licenses, +* however, the disclaimer of warranty and limitation of liability provisions +* in this License will apply to all Software in this distribution. +* +* You acknowledge that the Software is not designed, licensed or intended +* for use in the design, construction, operation or maintenance of any nuclear +* facility. +* +* Apache License +* Version 2.0, January 2004 +* http://www.apache.org/licenses/ +* +*/ +/* +* ==================================================================== +* +* This code is subject to the freebxml License, Version 1.1 +* +* Copyright (c) 2001 - 2005 freebxml.org. All rights reserved. +* +* $Header: /cvs/fi/FastInfoset/src/com/sun/xml/internal/fastinfoset/AbstractResourceBundle.java,v 1.2 +*  ==================================================================== +*/ +%% This notice is provided with respect to Kerberos, which may be included with this software: + +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government.  It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. FundsXpress makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +%% This notice is provided with respect to Unicode's CLDR data repository, which may be included with this software: + + Unicode Copyright + + For the general privacy policy governing access to this site, see the +Unicode Privacy Policy. For trademark usage, see the the Unicode Consortium +Trademarks and Logo Policy. + Notice to End User: Terms of Use + Carefully read the following legal agreement ("Agreement"). Use or copying +of the software and/or codes provided with this agreement (The "Software") +constitutes your acceptance of these terms + + 1. Unicode Copyright. + 1. Copyright © 1991-2005 Unicode, Inc. All rights reserved. + 2. Certain documents and files on this website contain a legend +indicating that "Modification is permitted." Any person is hereby authorized, +without fee, to modify such documents and files to create derivative works +conforming to the Unicode® Standard, subject to Terms and Conditions herein. + 3. Any person is hereby authorized, without fee, to view, use, +reproduce, and distribute all documents and files solely for informational +purposes in the creation of products supporting the Unicode Standard, subject to +the Terms and Conditions herein. + 4. Further specifications of rights and restrictions pertaining to +the use of the particular set of data files known as the "Unicode Character +Database" can be found in Exhibit 1. + 5. Further specifications of rights and restrictions pertaining to +the use of the particular set of files that constitute the online edition of The +Unicode Standard, Version 4.0, may be found in V4.0 online edition. + 6. No license is granted to "mirror" the Unicode website where a +fee is charged for access to the "mirror" site. + 7. Modification is not permitted with respect to this document. All +copies of this document must be verbatim. + 2. Restricted Rights Legend. Any technical data or software which is +licensed to the United States of America, its agencies and/or instrumentalities +under this Agreement is commercial technical data or commercial computer +software developed exclusively at private expense as defined in FAR 2.101, or +DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, +duplication, or disclosure by the Government is subject to restrictions as set +forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and +this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, +as applicable, use, duplication or disclosure by the Government is subject to +the restrictions set forth in this Agreement. + 3. Warranties and Disclaimers. + 1. This publication and/or website may include technical or +typographical errors or other inaccuracies . Changes are periodically added to +the information herein; these changes will be incorporated in new editions of +the publication and/or website. Unicode may make improvements and/or changes in +the product(s) and/or program(s) described in this publication and/or website at +any time. + 2. If this file has been purchased on magnetic or optical media +from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange +of the defective media within ninety (90) days of original purchase. + 3. EXCEPT AS PROVIDED IN SECTION C.2, THIS PUBLICATION AND/OR +SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, +IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE +AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS +PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED +TO THIS PUBLICATION OR THE UNICODE WEBSITE. + 4. Waiver of Damages. In no event shall Unicode or its licensors be +liable for any special, incidental, indirect or consequential damages of any +kind, or any damages whatsoever, whether or not Unicode was advised of the +possibility of the damage, including, without limitation, those resulting from +the following: loss of use, data or profits, in connection with the use, +modification or distribution of this information or its derivatives. + 5. Trademarks. + 1. Unicode and the Unicode logo are registered trademarks of +Unicode, Inc. + 2. This site contains product names and corporate names of other +companies. All product names and company names and logos mentioned herein are +the trademarks or registered trademarks of their respective owners. Other +products and corporate names mentioned herein which are trademarks of a third +party are used only for explanation and for the owners' benefit and with no +intent to infringe. + 3. Use of third party products or information referred to herein is +at the user's risk. + 6. Miscellaneous. + 1. Jurisdiction and Venue. This server is operated from a location +in the State of California, United States of America. Unicode makes no +representation that the materials are appropriate for use in other locations. If +you access this server from other locations, you are responsible for compliance +with local laws. This Agreement, all use of this site and any claims and damages +resulting from use of this site are governed solely by the laws of the State of +California without regard to any principles which would apply the laws of a +different jurisdiction. The user agrees that any disputes regarding this site +shall be resolved solely in the courts located in Santa Clara County, +California. The user agrees said courts have personal jurisdiction and agree to +waive any right to transfer the dispute to any other forum. + 2. Modification by Unicode Unicode shall have the right to modify +this Agreement at any time by posting it to this site. The user may not assign +any part of this Agreement without Unicode's prior written consent. + 3. Taxes. The user agrees to pay any taxes arising from access to +this website or use of the information herein, except for those based on +Unicode's net income. + 4. Severability. If any provision of this Agreement is declared +invalid or unenforceable, the remaining provisions of this Agreement shall +remain in effect. + 5. Entire Agreement. This Agreement constitutes the entire +agreement between the parties. + +EXHIBIT 1 +UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE + + Unicode Data Files include all data files under the directories +http://www.unicode.org/Public/ and http://www.unicode.org/reports/. Unicode +Software includes any source code under the directories +http://www.unicode.org/Public/ and http://www.unicode.org/reports/. + + NOTICE TO USER: Carefully read the following legal agreement. BY +DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S DATA FILES +("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"), YOU UNEQUIVOCALLY ACCEPT, AND +AGREE TO BE BOUND BY, ALL OF THE TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU +DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES +OR SOFTWARE. + + COPYRIGHT AND PERMISSION NOTICE + + Copyright Ã?Â,Ã,© 1991-2004 Unicode, Inc. All rights reserved. Distributed under +the Terms of Use in http://www.unicode.org/copyright.html. + + Permission is hereby granted, free of charge, to any person obtaining a copy +of the Unicode data files and associated documentation (the "Data Files") or +Unicode software and associated documentation (the "Software") to deal in the +Data Files or Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files or +Software are furnished to do so, provided that (a) the above copyright notice(s) +and this permission notice appear with all copies of the Data Files or Software, +(b) both the above copyright notice(s) and this permission notice appear in +associated documentation, and (c) there is clear notice in each modified Data +File or in the Software as well as in the documentation associated with the Data +File(s) or Software that the data or software has been modified. + + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD +PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR SOFTWARE. + + Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in these Data Files or Software without prior written authorization of the +copyright holder. + + Unicode and the Unicode logo are trademarks of Unicode, Inc., and may be +registered in some jurisdictions. All other trademarks and registered trademarks +mentioned herein are the property of their respective owners. +%% This notice is provided with respect to RSA PKCS#11 Header Files & Specification, which may be included with this software: + +/* + * Copyright (C) 1998 by the FundsXpress, INC. + * + * All rights reserved. + * + * Export of this software from the United States of America may require + * a specific license from the United States Government.  It is the + * responsibility of any person or organization contemplating export to + * obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of FundsXpress. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission.  FundsXpress makes no representations about the suitability of + * this software for any purpose.  It is provided "as is" without express + * or implied warranty. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +%% This notice is provided with respect to certain files/code which may included in the implementation of AWT within the software: + +****************************************************** +BEGIN  src/solaris/native/sun/awt/HPkeysym.h +Copyright 1987, 1998  The Open Group + +All Rights Reserved. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. + +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, + +All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the names of Hewlett Packard +or Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +HEWLETT-PACKARD MAKES NO WARRANTY OF ANY KIND WITH REGARD +TO THIS SOFWARE, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE.  Hewlett-Packard shall not be liable for errors +contained herein or direct, indirect, special, incidental or +consequential damages in connection with the furnishing, +performance, or use of this material. + +END  src/solaris/native/sun/awt/HPkeysym.h +****************************************************** +BEGIN  src/solaris/native/sun/awt/Xinerama.c +/***************************************************************** +Copyright (c) 1991, 1997 Digital Equipment Corporation, Maynard, Massachusetts. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING, +BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Digital Equipment Corporation +shall not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from Digital +Equipment Corporation. +******************************************************************/ +END  src/solaris/native/sun/awt/Xinerama.c +****************************************************** +BEGIN src/solaris/native/sun/awt/Xinerama.h +/* +Copyright (C) 1994-2001 The XFree86 Project, Inc. All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Soft- +ware"), to deal in the Software without restriction, including without +limitation the rights to use, copy, modify, merge, publish, distribute, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, provided that the above copyright +notice(s) and this permission notice appear in all copies of the Soft- +ware and that both the above copyright notice(s) and this permission +notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY +RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN +THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- +QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- +MANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization of +the copyright holder. +*/ +END src/solaris/native/sun/awt/Xinerama.h +****************************************************** +BEGIN src/solaris/native/sun/awt/Xrandr.h +/* + * $XFree86: xc/lib/Xrandr/Xrandr.h,v 1.9 2002/09/29 23:39:44 keithp Exp $ + * + * Copyright © 2000 Compaq Computer Corporation, Inc. + * Copyright © 2002 Hewlett-Packard Company, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Compaq not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission.  HP makes no representations about the + * suitability of this software for any purpose.  It is provided "as is" + * without express or implied warranty. + * + * HP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL COMPAQ + * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Author:  Jim Gettys, HP Labs, HP. + */ + + +END src/solaris/native/sun/awt/Xrandr.h +****************************************************** +BEGIN src/solaris/native/sun/awt/extutil.h +/* + * $Xorg: extutil.h,v 1.3 2000/08/18 04:05:45 coskrey Exp $ + * +Copyright 1989, 1998  The Open Group + +All Rights Reserved. + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + * + * Author:  Jim Fulton, MIT The Open Group + * + *                     Xlib Extension-Writing Utilities + * + * This package contains utilities for writing the client API for various + * protocol extensions.  THESE INTERFACES ARE NOT PART OF THE X STANDARD AND + * ARE SUBJECT TO CHANGE! + */ +/* $XFree86: xc/include/extensions/extutil.h,v 1.5 2001/01/17 17:53:20 dawes Exp $ */ + +END src/solaris/native/sun/awt/extutil.h +****************************************************** +BEGIN   src/solaris/native/sun/awt/fontconfig.h +/* + * $RCSId: xc/lib/fontconfig/fontconfig/fontconfig.h,v 1.30 2002/09/26 00:17:27 +keithp Exp $ + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission.  Keith Packard makes no + * representations about the suitability of this software for any purpose.  It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + +END   src/solaris/native/sun/awt/fontconfig.h +****************************************************** +BEGIN src/solaris/native/sun/awt/list.c +AND  src/solaris/native/sun/awt/list.h +AND src/solaris/native/sun/awt/multiVis.c +AND  src/solaris/native/sun/awt/multiVis.h +AND  src/solaris/native/sun/awt/wsutils.h + +Copyright (c) 1994 Hewlett-Packard Co. +Copyright (c) 1996  X Consortium + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of the X Consortium shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from the X Consortium. + +END src/solaris/native/sun/awt/list.c +AND  src/solaris/native/sun/awt/list.h +AND src/solaris/native/sun/awt/multiVis.c +AND  src/solaris/native/sun/awt/multiVis.h +AND  src/solaris/native/sun/awt/wsutils.h + +***************************************************************** +BEGIN src/solaris/native/sun/awt/panoramiXext.h +Copyright (c) 1991, 1997 Digital Equipment Corporation, Maynard, Massachusetts. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING, +BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of Digital Equipment Corporation +shall not be used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from Digital +Equipment Corporation. + +END src/solaris/native/sun/awt/panoramiXext.h +****************************************************** + +BEGIN src/solaris/native/sun/awt/randr.h + + * + * Copyright © 2000, Compaq Computer Corporation, + * Copyright © 2002, Hewlett Packard, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Compaq or HP not be used in advertising + * or publicity pertaining to distribution of the software without specific, + * written prior permission.  HP makes no representations about the + * suitability of this software for any purpose.  It is provided "as is" + * without express or implied warranty. + * + * HP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL HP + * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Author:  Jim Gettys, HP Labs, Hewlett-Packard, Inc. + +END src/solaris/native/sun/awt/randr.h +***************************************************** + +BEGIN src/solaris/native/sun/java2d/opengl/J2D_GL/glx.h + * Mesa 3-D graphics library + * Version:  4.1 + * + * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +END src/solaris/native/sun/java2d/opengl/J2D_GL/glx.h + + + The Jscheme Language and Implementation + +Copyright (c) 2002 Ken R. Anderson, Timothy J. Hickey, Peter Norvig + +This system is licensed under the following +zlib/libpng open-source license. + +This software is provided 'as-is', without any express or +implied warranty. + +In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it +and redistribute it freely, subject to the following +restrictions: + +1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you + use this software in a product, an acknowledgment in the + product documentation would be appreciated but is not + required. + +2. Altered source versions must be plainly marked as such, and + must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. + +JScheme includes software licensed under the Apache Software License, +Version 1.1: + + +/* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2000 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, + * if any, must include the following acknowledgment: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowledgment may appear in the software itself, + * if and wherever such third-party acknowledgments normally appear. + * + * 4. The names "Apache" and "Apache Software Foundation" must + * not be used to endorse or promote products derived from this + * software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache", + * nor may "Apache" appear in their name, without prior written + * permission of the Apache Software Foundation. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * Portions of this software are based upon public domain software + * originally written at the National Center for Supercomputing Applications, + * University of Illinois, Urbana-Champaign. + */ + + +Licenses for sources found in the IcedTea patches/checkins: + +NanoXML: + + * This file is part of NanoXML 2 Lite. + * Copyright (C) 2000-2002 Marc De Scheemaecker, All Rights Reserved. + * + * This software is provided 'as-is', without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from the + * use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in + * a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source distribution. --- openjdk-6-6b16~pre5.orig/debian/generate-debian-orig.sh +++ openjdk-6-6b16~pre5/debian/generate-debian-orig.sh @@ -0,0 +1,56 @@ + +tarball=openjdk-6-src-b16-24_apr_2009-dfsg.tar.gz +version=6b16~pre5 +hotspot=hotspot-20090803.tar.gz +cacaotb=cacao-0.99.4.tar.bz2 +base=openjdk-6 +pkgdir=$base-$version +origtar=${base}_${version}.orig.tar.gz + +icedtea_checkout=../icedtea6 +debian_checkout=openjdk6 + +if [ -d $pkgdir ]; then + echo directory $pkgdir already exists + exit 1 +fi + +if [ -d $pkgdir.orig ]; then + echo directory $pkgdir.orig already exists + exit 1 +fi + +if [ -f $origtar ]; then + tar xf $origtar + if [ -d $pkgdir.orig ]; then + mv $pkgdir.orig $pkgdir + fi + tar -c -f - -C $icedtea_checkout . | tar -x -f - -C $pkgdir + cp -a $debian_checkout $pkgdir/debian +else + rm -rf $pkgdir.orig + mkdir -p $pkgdir.orig + case "$base" in + openjdk*) + cp -p $hotspot $pkgdir.orig/ + cp -p $tarball $pkgdir.orig/ + if [ $(lsb_release -is) = Ubuntu ]; then + cp -p $cacaotb $pkgdir.orig/ + fi + ;; + cacao*) + if [ -f $cacaotb ]; then + : # don't include the cacao tarball anymore + #cp -p $cacaotb $pkgdir.orig/ + fi + esac + tar -c -f - -C $icedtea_checkout . | tar -x -f - -C $pkgdir.orig + ( + cd $pkgdir.orig + sh autogen.sh + rm -rf autom4te.cache + ) + cp -a $pkgdir.orig $pkgdir + rm -rf $pkgdir.orig/.hg + cp -a $debian_checkout $pkgdir/debian +fi --- openjdk-6-6b16~pre5.orig/debian/JB-demo.menu.in +++ openjdk-6-6b16~pre5/debian/JB-demo.menu.in @@ -0,0 +1,55 @@ +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ FileChooser Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/FileChooserDemo; /@basedir@/bin/java -jar FileChooserDemo.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ Font2DTest Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/Font2DTest; /@basedir@/bin/java -jar Font2DTest.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ Java 2D Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/Java2D; /@basedir@/bin/java -jar Java2Demo.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ SampleTree Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/SampleTree; /@basedir@/bin/java -jar SampleTree.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ Stylepad Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/Stylepad; /@basedir@/bin/java -jar Stylepad.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ SwingSet2 Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/SwingSet2; /@basedir@/bin/java -jar SwingSet2.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ TableExample Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/TableExample; /@basedir@/bin/java -jar TableExample.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" --- openjdk-6-6b16~pre5.orig/debian/sharedmimeinfo +++ openjdk-6-6b16~pre5/debian/sharedmimeinfo @@ -0,0 +1,12 @@ + + + + Java Archive + + + + + Java Web Start application + + + --- openjdk-6-6b16~pre5.orig/debian/JB-jdk.prerm.in +++ openjdk-6-6b16~pre5/debian/JB-jdk.prerm.in @@ -0,0 +1,14 @@ +#!/bin/sh -e + +jdk_tools='@jdk_tools@' +basedir=/@basedir@ +basediralias=/@basediralias@ + + +if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then + for i in $jdk_tools; do + update-alternatives --remove $i $basediralias/bin/$i + done +fi + +#DEBHELPER# --- openjdk-6-6b16~pre5.orig/debian/README.alternatives.in +++ openjdk-6-6b16~pre5/debian/README.alternatives.in @@ -0,0 +1,26 @@ + +Packages providing a runtime or a development environment for the Java +language all use symlinks in the /etc/alternatives directory to enable +the system administrator to choose which programs to use for java, +javac, javah, etc. + +Starting with java-common 0.23ubuntu1, the update-java-alternatives +script can be used to set a bunch of jre/jdk alternatives: + +- Set all runtime tools to point to the @basename@ alternatives: + + update-java-alternatives --jre --set @jdirname@ + +- Set all runtime tools (headless only) to point to the @basename@ + alternatives: + + update-java-alternatives --jre-headless --set @jdirname@ + +- Set all runtime and development tools to point to the @basename@ + alternatives: + + update-java-alternatives --set @jdirname@ + +- Set all runtime and development tools to auto mode: + + update-java-alternatives --auto --- openjdk-6-6b16~pre5.orig/debian/control.zero-jre +++ openjdk-6-6b16~pre5/debian/control.zero-jre @@ -0,0 +1,12 @@ + +Package: @basename@-jre-zero +Architecture: @altzero_archs@ +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre-headless (= @pkg_version@), ${shlibs:Depends}, ${misc:Depends} +Description: Alternative JVM for OpenJDK, using Zero/Shark + The package provides an alternative runtime using the Zero VM and the + Shark Just In Time Compiler (JIT). Built on architectures in addition + to the Hotspot VM as a debugging aid for those architectures which don't + have a Hotspot VM. + . + The VM is started with the option `-zero'. See the README.Debian for details. --- openjdk-6-6b16~pre5.orig/debian/JB-jre.prerm.in +++ openjdk-6-6b16~pre5/debian/JB-jre.prerm.in @@ -0,0 +1,13 @@ +#!/bin/sh -e + +basedir=/@basedir@ +basediralias=/@basediralias@ +jre_tools='@jre_tools@' + +if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then + for i in $jre_tools; do + update-alternatives --remove $i $basediralias/jre/bin/$i + done +fi + +#DEBHELPER# --- openjdk-6-6b16~pre5.orig/debian/generate-dfsg-zip.sh +++ openjdk-6-6b16~pre5/debian/generate-dfsg-zip.sh @@ -0,0 +1,102 @@ +#!/bin/sh + +if [ ! -f "$1" ]; then + echo "does not exist: $1" + exit 1 +fi + +dist=$(lsb_release -is) + +# Untar openjdk source zip. +rm -rf openjdk +mkdir openjdk +tar xf $1 -C openjdk + +# Remove binaries +rm -f \ + openjdk/jdk/test/sun/management/windows/revokeall.exe \ + openjdk/jdk/test/sun/management/jmxremote/bootstrap/linux-i586/launcher \ + openjdk/jdk/test/sun/management/jmxremote/bootstrap/solaris-sparc/launcher \ + openjdk/jdk/test/sun/management/jmxremote/bootstrap/solaris-i586/launcher + +# Remove test sources with questionable license headers. +rm -f \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_IE.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4165815Test.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4177489_Resource_jf.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_CA.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Getter.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4177489Test.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource2.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en_US.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4083270Test.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource3_en.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4177489_Resource.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Test.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Resource2_en_US.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4168625Class.java \ + openjdk/jdk/test/java/util/Locale/Bug4175998Test.java \ + openjdk/jdk/test/java/util/ResourceBundle/RBTestFmwk.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestResource_fr.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4179766Resource.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4179766Getter.java \ + openjdk/jdk/test/java/util/ResourceBundle/Bug4179766Class.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestResource.java \ + openjdk/jdk/test/java/util/ResourceBundle/FakeTestResource.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestResource_de.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestBug4179766.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestResource_fr_CH.java \ + openjdk/jdk/test/java/util/ResourceBundle/ResourceBundleTest.java \ + openjdk/jdk/test/java/util/ResourceBundle/TestResource_it.java \ + openjdk/jdk/test/java/util/Locale/PrintDefaultLocale.java \ + openjdk/jdk/test/java/util/Locale/LocaleTest.java \ + openjdk/jdk/test/java/util/Locale/LocaleTestFmwk.java \ + openjdk/jdk/test/java/util/Locale/Bug4184873Test.java \ + openjdk/jdk/test/sun/text/resources/LocaleDataTest.java + +# Remove J2DBench sources, some of which have questionable license +# headers. +rm -rf \ + openjdk/jdk/src/share/demo/java2d/J2DBench + +# BEGIN Debian/Ubuntu additions + +# binary files +rm -f \ + openjdk/jdk/test/sun/net/idn/*.spp + +rm -f \ + openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/linux-i586/libLauncher.so \ + openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-i586/libLauncher.so \ + openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-sparc/libLauncher.so \ + openjdk/jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/lib/solaris-sparcv9/libLauncher.so \ + openjdk/jdk/test/tools/launcher/lib/i386/lib32/lib32/liblibrary.so \ + openjdk/jdk/test/tools/launcher/lib/i386/lib32/liblibrary.so \ + openjdk/jdk/test/tools/launcher/lib/sparc/lib32/lib32/liblibrary.so \ + openjdk/jdk/test/tools/launcher/lib/sparc/lib32/liblibrary.so \ + openjdk/jdk/test/tools/launcher/lib/sparc/lib64/lib64/liblibrary.so \ + openjdk/jdk/test/tools/launcher/lib/sparc/lib64/liblibrary.so + +rm -f \ + openjdk/jdk/test/java/util/Locale/data/deflocale.exe \ + openjdk/jdk/test/java/util/Locale/data/deflocale.jds3 \ + openjdk/jdk/test/java/util/Locale/data/deflocale.rhel4 \ + openjdk/jdk/test/java/util/Locale/data/deflocale.sh \ + openjdk/jdk/test/java/util/Locale/data/deflocale.sol10 \ + openjdk/jdk/test/java/util/Locale/data/deflocale.winvista \ + openjdk/jdk/test/java/util/Locale/data/deflocale.winxp \ + +# TODO +#$ find openjdk -name '*.jar' -o -name '*.class'|grep -v test + +# END Debian/Ubuntu additions + +# Create new zip with new name. + +NEW_ZIP=$(echo $1 | sed -e 's/\.tar.gz/-dfsg.tar.gz/') +(cd openjdk && tar -cz -f ../$NEW_ZIP *) + +# Remove old unzipped openjdk dir. +rm -rf openjdk --- openjdk-6-6b16~pre5.orig/debian/compat +++ openjdk-6-6b16~pre5/debian/compat @@ -0,0 +1 @@ +5 --- openjdk-6-6b16~pre5.orig/debian/JB-controlpanel.desktop.in +++ openjdk-6-6b16~pre5/debian/JB-controlpanel.desktop.in @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=@vendor@ Java @RELEASE@ Plugin Control Panel +Name[fi]=@vendor@ Java @RELEASE@ - liitännäisen ohjauspaneeli +Comment=@vendor@ Java @RELEASE@ Plugin Control Panel +Comment[fi]=@vendor@ Java @RELEASE@ - liitännäisen ohjauspaneeli +Exec=/@basedir@/bin/ControlPanel +Terminal=false +Type=Application +Icon=@basename@ +Categories=Settings; --- openjdk-6-6b16~pre5.orig/debian/icedtea-6-jre-cacao.README.Debian +++ openjdk-6-6b16~pre5/debian/icedtea-6-jre-cacao.README.Debian @@ -0,0 +1,18 @@ +icedtea-6-jre-cacao for Debian +------------------------------- + +Please look for further documentation in the directory +/usr/share/doc/openjdk-6-jre/ . + +The package provides cacao as a JVM to be used with OpenJDK 6. +To use the VM, call java with the option `-cacao'. + + $ java -cacao -version + java version "1.6.0_0" + OpenJDK Runtime Environment (IcedTea6 1.4) (6b14-0ubuntu18) + CACAO (build 0.99.3+hg, compiled mode) + +To use one of the tools in the JRE and SDK packages with the +cacao VM, use `-J-cacao' to pass the parameter to the runtime. + + -- Matthias Klose Tue, 03 Mar 2009 17:52:27 +0100 --- openjdk-6-6b16~pre5.orig/debian/JB-dbg.overrides.in +++ openjdk-6-6b16~pre5/debian/JB-dbg.overrides.in @@ -0,0 +1,2 @@ +# The package *-jre-lib depends on *-jre via *-jre-headless. Lintian is wrong here. +@basename@-dbg binary: usr-share-doc-symlink-without-dependency @basename@-jre --- openjdk-6-6b16~pre5.orig/debian/PLUGIN.overrides.in +++ openjdk-6-6b16~pre5/debian/PLUGIN.overrides.in @@ -0,0 +1,2 @@ +# empty directories for plugin alternatives +@pkg_plugin@ binary: package-contains-empty-directory --- openjdk-6-6b16~pre5.orig/debian/copyright.cacao +++ openjdk-6-6b16~pre5/debian/copyright.cacao @@ -0,0 +1,356 @@ + +=============================================================================== +CACAO +=============================================================================== + +This package was debianized by Stephan Michels on +Sat, 12 Nov 2005 22:07:41 +0100. + +It was downloaded from http://www.cacaojvm.org/ + +Copyright Holder: CACAO Project + Copyright (C) 1996-2008 Verein zur Foerderung der freien virtuellen Maschine CACAO + Portions Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel, + C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, + E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, + J. Wenninger, Institut f. Computersprachen - TU Wien + +License: + + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +On Debian systems a full copy of the GNU General Public License, GPL, can be +found in the file /usr/share/common-licenses/GPL-2. + + +CACAO uses code from other free software projects. Only code licensed +under a GPL compatible license can be merged in. You can find the +licenses of third party sources in their respective sources. + + +* src/mm/boehm-gc + +Merged in the Boehm-Weiser garbage collector from +http://www.hpl.hp.com/personal/Hans_Boehm/gc/. + +Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers +Copyright (c) 1991-1996 by Xerox Corporation. All rights reserved. +Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. +Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. +Portions Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved. + +The file linux_threads.c is also +Copyright (c) 1998 by Fergus Henderson. All rights reserved. + +The files Makefile.am, and configure.in are +Copyright (c) 2001 by Red Hat Inc. All rights reserved. + +Several files supporting GNU-style builds are copyrighted by the Free +Software Foundation, and carry a different license from that given +below. + +THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED +OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + +Permission is hereby granted to use or copy this program +for any purpose, provided the above notices are retained on all copies. +Permission to modify the code and to distribute modified code is granted, +provided the above notices are retained, and a notice that the code was +modified is included with the above copyright notice. + +A few of the files needed to use the GNU-style build procedure come with +slightly different licenses, though they are all similar in spirit. A few +are GPL'ed, but with an exception that should cover all uses in the +collector. (If you are concerned about such things, I recommend you look +at the notice in config.guess or ltmain.sh.) + +The files copyrighted by Hewlett-Packard Company have the notice: + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + +* src/fdlibm + +fdlimb contains general algorithms useful for runtimes and compilers to +support strict double and float mathematical operations. + +fdlibm files carry the following notices: + + Copyright (c) 1991 by AT&T. + + Permission to use, copy, modify, and distribute this software for any + purpose without fee is hereby granted, provided that this entire notice + is included in all copies of any software which is or includes a copy + or modification of this software and in all copies of the supporting + documentation for such software. + + THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY + REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + +The upstream for fdlibm is libgcj (http://gcc.gnu.org/java/), they sync +again with the 'real' upstream (http://www.netlib.org/fdlibm/readme). + + +* src/threads/green/{locks.[ch],threadio.[ch],threads.[ch]} + +This files are taken from Kaffe.org VM available at +http://www.kaffe.org/. Kaffe's license.terms file is located in the +top directory of the source code. The current license of Kaffe is the +same as of CACAO, GPL Version 2. + + +* src/vm/jit/{i386,x86_64}/{dis-asm.h,i386-dis.c} + +Print i386 instructions for GDB, the GNU debugger. +Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2001, 2002, 2003, 2004 Free Software Foundation, Inc. + +This file is part of GDB. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ + + +* src/vm/jit/{i386,x86_64}/dis-asm.h + +Interface between the opcode library and its callers. + +Copyright 2001, 2002 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, +Boston, MA 02110-1301 USA + +Written by Cygnus Support, 1993. + +The opcode library (libopcodes.a) provides instruction decoders for +a large variety of instruction sets, callable with an identical +interface, for making instruction-processing programs more independent +of the instruction set being processed. + + +* src/vm/jit/powerpc/{ppc.h,ppc-dis.c,ppc-opc.c} + +Copyright 1994, 1995, 2000, 2001, 2002 Free Software Foundation, Inc. +Written by Ian Lance Taylor, Cygnus Support + +This file is part of GDB, GAS, and the GNU binutils. + +GDB, GAS, and the GNU binutils are free software; you can redistribute +them and/or modify them under the terms of the GNU General Public +License as published by the Free Software Foundation; either version +2, or (at your option) any later version. + +GDB, GAS, and the GNU binutils are distributed in the hope that they +will be useful, but WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this file; see the file COPYING. If not, write to the Free +Software Foundation, Inc., 51 Franklin St, Fifth Floor, +Boston, MA 02110-1301 USA. + + +* src/lib/classes/* + +GNU Classpath is licensed under the terms of the GNU General Public +License with the following clarification and special exception: + + "Linking this library statically or dynamically with other modules + is making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License cover the whole + combination. + + As a special exception, the copyright holders of this library give + you permission to link this library with independent modules to + produce an executable, regardless of the license terms of these + independent modules, and to copy and distribute the resulting + executable under terms of your choice, provided that you also meet, + for each linked independent module, the terms and conditions of the + license of that module. An independent module is a module which is + not derived from or based on this library. If you modify this library, + you may extend this exception to your version of the library, but you + are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version." + +See license.terms for the text of the GNU General Public License. + +More information on GNU Classpath is available from +http://www.gnu.org/software/classpath/classpath.html. + + +* m4/{iconv.m4,lib-ld.m4,lib-link.m4,lib-prefix.m4} + +Copyright (C) 1996-2003 Free Software Foundation, Inc. +This file is free software, distributed under the terms of the GNU +General Public License. As a special exception to the GNU General +Public License, this file may be distributed as part of a program +that contains a configuration script generated by Autoconf, under +the same distribution terms as the rest of that program. + + +* src/toolbox/avl.[ch] + +libavl - library for manipulation of binary trees. +Copyright (C) 1998-2002 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +02110-1301 USA. + +The author may be contacted at on the Internet, or +write to Ben Pfaff, Stanford University, Computer Science Dept., 353 +Serra Mall, Stanford CA 94305, USA. + + +* src/vm/unzip.[ch] + +Copyright (C) 1998 Gilles Vollant + +This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g + WinZip, InfoZip tools and compatible. +Encryption and multi volume ZipFile (span) are not supported. +Old compressions used by old PKZip 1.x are not supported + +THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR STRUCTURE +CAN CHANGE IN FUTURE VERSION !! +I WAIT FEEDBACK at mail info@winimage.com +Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution + +Condition of use and distribution are the same than zlib : + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + + +src/mm/boehm-gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc + + * Copyright (c) 2007 by NEC LE-IT: All rights reserved. + * A transcription of ARMv6 atomic operations for the ARM Realview Toolchain. + * This code works with armcc from RVDS 3.1 + * This is based on work in gcc/arm.h by + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + * + * + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + +src/mm/boehm-gc/include/private + + Copyright (c) 2004-2005 Andrei Polushin + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + +contrib/vmlog: + +/* Copyright (C) 2006 Edwin Steiner */ +/* 2007 Peter Molnar */ + +/* This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +Some of the build files are + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. --- openjdk-6-6b16~pre5.orig/debian/JB-jdk.postinst.in +++ openjdk-6-6b16~pre5/debian/JB-jdk.postinst.in @@ -0,0 +1,55 @@ +#!/bin/sh + +set -e + +priority=@priority@ +basedir=/@basedir@ +basediralias=/@basediralias@ +mandir=/@basediralias@/man +jdiralias=@jdiralias@ +srcext=1.gz +dstext=1.gz +jdk_tools='@jdk_tools@' + +case "$1" in +configure) + for i in $jdk_tools; do + unset slave1 slave2 || true + if [ -e $mandir/man1/$i.$srcext ]; then + slave1="--slave \ + /usr/share/man/man1/$i.$dstext \ + $i.$dstext \ + $mandir/man1/$i.$srcext" + fi + if false && [ -e $mandir/ja/man1/$i.$srcext ]; then + slave2="--slave \ + /usr/share/man/ja/man1/$i.$dstext \ + ${i}_ja.$dstext \ + $mandir/ja/man1/$i.$srcext" + fi + update-alternatives \ + --install \ + /usr/bin/$i \ + $i \ + $basediralias/bin/$i \ + $priority \ + $slave1 $slave2 + done + + # fix slave links for man page alternatives + if [ -n "$2" ] && dpkg --compare-versions "$2" lt 6-00-2ubuntu2; then + for i in $jdk_tools; do + current=$(LANG=C update-alternatives --display $i 2>&1 \ + | awk '/link currently points to/ { print $NF}') + case "$current" in /@basediralias@*) + update-alternatives --quiet --set $i $basediralias/bin/$i + esac + done + fi + + ;; +esac + +#DEBHELPER# + +exit 0 --- openjdk-6-6b16~pre5.orig/debian/icedtea-6-jre-cacao.copyright +++ openjdk-6-6b16~pre5/debian/icedtea-6-jre-cacao.copyright @@ -0,0 +1,443 @@ +This package was debianized by Matthias Klose +on Wed, 08 Aug 2007 15:55:39 +0200. + +It was downloaded from + http://icedtea.classpath.org + http://www.cacaojvm.org/ + +------------------------------------------------------------------------------ +Upstream Authors: + +IcedTea (see AUTHORS for a current list): + Lillian Angel + Gary Benson + Tania Bento + Deepak Bhole + Thomas Fitzsimmons + Kyle Galloway + Andrew Haley + Ioana Iivan + Matthias Klose + Francis Kung + Omair Majid + Casey Marshall + Raif Naffah + Joshua Sumali + Christian Thalinger + Mark Wielaard + +Cacao: + R. Grafl, A. Krall, C. Kruegel, + C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, + E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, + J. Wenninger, Institut f. Computersprachen - TU Wien + +Packaging: + Matthias Klose + +------------------------------------------------------------------------------ +Copyright: + +IcedTea: + Portions Copyright © 2007 Lillian Angel + Portions Copyright © 2007 Gary Benson + Portions Copyright © 2007 Tania Bento + Portions Copyright © 2008 Deepak Bhole + Portions Copyright © 2007 Thomas Fitzsimmons + Portions Copyright © 2007 Kyle Galloway + Portions Copyright © 2007 Andrew Haley + Portions Copyright © 2008 Ioana Iivan + Portions Copyright © 2007 Matthias Klose + Portions Copyright © 2007 Francis Kung + Portions Copyright © 2008 Omair Majid + Portions Copyright © 2007 Casey Marshall + Portions Copyright © 2007 Raif Naffah + Portions Copyright © 2007 Joshua Sumali + Portions Copyright © 2007 Christian Thalinger + Portions Copyright © 2007 Mark Wielaard + Portions Copyright © 2007, 2008 Red Hat, Inc. + Portions Copyright © 2001-2003 Jon A. Maxwell (JAM) + Portions Copyright © 1992, 1995-2007 Sun Microsystems, Inc. + Portions Copyright © 2007 Matthew Flaschen + Portions Copyright © 2000-2002 Marc De Scheemaecker + Portions Copyright © 1991-1998 Thomas G. Lane + Portions Copyright © 2007 Free Software Foundation, Inc. + +Cacao: + Copyright Holder: CACAO Project + Copyright (C) 1996-2008 Verein zur Foerderung der freien virtuellen Maschine CACAO + Portions Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel, + C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, + E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, + J. Wenninger, Institut f. Computersprachen - TU Wien + +Packaging: + Copyright © 2007, 2008 Canonical Ltd. + +------------------------------------------------------------------------------ +License: + +NOTE: the combined work which includes the upstream components below +carries forward the OpenJDK Assembly Exception (text included below). + +Packaging: + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +IcedTea: + IcedTea is licensed under the GPL v2. See `/usr/share/common-licenses/GPL-2'. + +Cacao: + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +On Debian systems a full copy of the GNU General Public License, GPL, can be +found in the file /usr/share/common-licenses/GPL-2. + + +CACAO uses code from other free software projects. Only code licensed +under a GPL compatible license can be merged in. You can find the +licenses of third party sources in their respective sources. + + +* src/mm/boehm-gc + +Merged in the Boehm-Weiser garbage collector from +http://www.hpl.hp.com/personal/Hans_Boehm/gc/. + +Copyright (c) 1988, 1989 Hans-J. Boehm, Alan J. Demers +Copyright (c) 1991-1996 by Xerox Corporation. All rights reserved. +Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. +Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. +Portions Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved. + +The file linux_threads.c is also +Copyright (c) 1998 by Fergus Henderson. All rights reserved. + +The files Makefile.am, and configure.in are +Copyright (c) 2001 by Red Hat Inc. All rights reserved. + +Several files supporting GNU-style builds are copyrighted by the Free +Software Foundation, and carry a different license from that given +below. + +THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED +OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + +Permission is hereby granted to use or copy this program +for any purpose, provided the above notices are retained on all copies. +Permission to modify the code and to distribute modified code is granted, +provided the above notices are retained, and a notice that the code was +modified is included with the above copyright notice. + +A few of the files needed to use the GNU-style build procedure come with +slightly different licenses, though they are all similar in spirit. A few +are GPL'ed, but with an exception that should cover all uses in the +collector. (If you are concerned about such things, I recommend you look +at the notice in config.guess or ltmain.sh.) + +The files copyrighted by Hewlett-Packard Company have the notice: + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + +* src/fdlibm + +fdlimb contains general algorithms useful for runtimes and compilers to +support strict double and float mathematical operations. + +fdlibm files carry the following notices: + + Copyright (c) 1991 by AT&T. + + Permission to use, copy, modify, and distribute this software for any + purpose without fee is hereby granted, provided that this entire notice + is included in all copies of any software which is or includes a copy + or modification of this software and in all copies of the supporting + documentation for such software. + + THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY + REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY + OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + + Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + + Developed at SunPro, a Sun Microsystems, Inc. business. + Permission to use, copy, modify, and distribute this + software is freely granted, provided that this notice + is preserved. + +The upstream for fdlibm is libgcj (http://gcc.gnu.org/java/), they sync +again with the 'real' upstream (http://www.netlib.org/fdlibm/readme). + + +* src/threads/green/{locks.[ch],threadio.[ch],threads.[ch]} + +This files are taken from Kaffe.org VM available at +http://www.kaffe.org/. Kaffe's license.terms file is located in the +top directory of the source code. The current license of Kaffe is the +same as of CACAO, GPL Version 2. + + +* src/vm/jit/{i386,x86_64}/{dis-asm.h,i386-dis.c} + +Print i386 instructions for GDB, the GNU debugger. +Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2001, 2002, 2003, 2004 Free Software Foundation, Inc. + +This file is part of GDB. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ + + +* src/vm/jit/{i386,x86_64}/dis-asm.h + +Interface between the opcode library and its callers. + +Copyright 2001, 2002 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, +Boston, MA 02110-1301 USA + +Written by Cygnus Support, 1993. + +The opcode library (libopcodes.a) provides instruction decoders for +a large variety of instruction sets, callable with an identical +interface, for making instruction-processing programs more independent +of the instruction set being processed. + + +* src/vm/jit/powerpc/{ppc.h,ppc-dis.c,ppc-opc.c} + +Copyright 1994, 1995, 2000, 2001, 2002 Free Software Foundation, Inc. +Written by Ian Lance Taylor, Cygnus Support + +This file is part of GDB, GAS, and the GNU binutils. + +GDB, GAS, and the GNU binutils are free software; you can redistribute +them and/or modify them under the terms of the GNU General Public +License as published by the Free Software Foundation; either version +2, or (at your option) any later version. + +GDB, GAS, and the GNU binutils are distributed in the hope that they +will be useful, but WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See +the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this file; see the file COPYING. If not, write to the Free +Software Foundation, Inc., 51 Franklin St, Fifth Floor, +Boston, MA 02110-1301 USA. + + +* src/lib/classes/* + +GNU Classpath is licensed under the terms of the GNU General Public +License with the following clarification and special exception: + + "Linking this library statically or dynamically with other modules + is making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License cover the whole + combination. + + As a special exception, the copyright holders of this library give + you permission to link this library with independent modules to + produce an executable, regardless of the license terms of these + independent modules, and to copy and distribute the resulting + executable under terms of your choice, provided that you also meet, + for each linked independent module, the terms and conditions of the + license of that module. An independent module is a module which is + not derived from or based on this library. If you modify this library, + you may extend this exception to your version of the library, but you + are not obligated to do so. If you do not wish to do so, delete this + exception statement from your version." + +See license.terms for the text of the GNU General Public License. + +More information on GNU Classpath is available from +http://www.gnu.org/software/classpath/classpath.html. + + +* m4/{iconv.m4,lib-ld.m4,lib-link.m4,lib-prefix.m4} + +Copyright (C) 1996-2003 Free Software Foundation, Inc. +This file is free software, distributed under the terms of the GNU +General Public License. As a special exception to the GNU General +Public License, this file may be distributed as part of a program +that contains a configuration script generated by Autoconf, under +the same distribution terms as the rest of that program. + + +* src/toolbox/avl.[ch] + +libavl - library for manipulation of binary trees. +Copyright (C) 1998-2002 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +02110-1301 USA. + +The author may be contacted at on the Internet, or +write to Ben Pfaff, Stanford University, Computer Science Dept., 353 +Serra Mall, Stanford CA 94305, USA. + + +* src/vm/unzip.[ch] + +Copyright (C) 1998 Gilles Vollant + +This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g + WinZip, InfoZip tools and compatible. +Encryption and multi volume ZipFile (span) are not supported. +Old compressions used by old PKZip 1.x are not supported + +THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR STRUCTURE +CAN CHANGE IN FUTURE VERSION !! +I WAIT FEEDBACK at mail info@winimage.com +Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution + +Condition of use and distribution are the same than zlib : + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + + +src/mm/boehm-gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/armcc + + * Copyright (c) 2007 by NEC LE-IT: All rights reserved. + * A transcription of ARMv6 atomic operations for the ARM Realview Toolchain. + * This code works with armcc from RVDS 3.1 + * This is based on work in gcc/arm.h by + * Copyright (c) 1991-1994 by Xerox Corporation. All rights reserved. + * Copyright (c) 1996-1999 by Silicon Graphics. All rights reserved. + * Copyright (c) 1999-2003 by Hewlett-Packard Company. All rights reserved. + * + * + * + * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + * OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + * + * Permission is hereby granted to use or copy this program + * for any purpose, provided the above notices are retained on all copies. + * Permission to modify the code and to distribute modified code is granted, + * provided the above notices are retained, and a notice that the code was + * modified is included with the above copyright notice. + +src/mm/boehm-gc/include/private + + Copyright (c) 2004-2005 Andrei Polushin + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + +contrib/vmlog: + +/* Copyright (C) 2006 Edwin Steiner */ +/* 2007 Peter Molnar */ + +/* This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +Some of the build files are + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. --- openjdk-6-6b16~pre5.orig/debian/JB-jre.menu.in +++ openjdk-6-6b16~pre5/debian/JB-jre.menu.in @@ -0,0 +1,7 @@ +?package(@basename@-jre):\ + needs="x11"\ + section="Applications/System/Administration"\ + title="@vendor@ Java @RELEASE@ Policy Tool"\ + command="/@basedir@/bin/policytool"\ + icon="/usr/share/pixmaps/@basename@.xpm"\ + hints="Java2" --- openjdk-6-6b16~pre5.orig/debian/jvm.cfg-default +++ openjdk-6-6b16~pre5/debian/jvm.cfg-default @@ -0,0 +1,5 @@ +# jvm.cfg-default - default jvm configuration which is used if no jvm.cfg +# is found. After unpacking the file jvm.cfg doesn't exist yet (config file), +# in this case use this file instead, so that the VM can be used before +# configuration of the runtime package. +-server KNOWN --- openjdk-6-6b16~pre5.orig/debian/JB-archive.mime.in +++ openjdk-6-6b16~pre5/debian/JB-archive.mime.in @@ -0,0 +1,6 @@ +application/java-archive + ext: jar +application/x-java-archive + ext: jar +application/x-jar + ext: jar --- openjdk-6-6b16~pre5.orig/debian/JB-web-start.mime.in +++ openjdk-6-6b16~pre5/debian/JB-web-start.mime.in @@ -0,0 +1,2 @@ +application/x-java-jnlp-file + ext: jnlp --- openjdk-6-6b16~pre5.orig/debian/JB-web-start.applications.in +++ openjdk-6-6b16~pre5/debian/JB-web-start.applications.in @@ -0,0 +1,6 @@ +java-web-start + command="/@basedir@/bin/javaws" + name=java-web-start + can_open_multiple_files=false + requires_terminal=false + mime_types=application/x-java-jnlp-file --- openjdk-6-6b16~pre5.orig/debian/control.plugin +++ openjdk-6-6b16~pre5/debian/control.plugin @@ -0,0 +1,18 @@ + +Package: @pkg_plugin@ +Section: web +Architecture: any +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Conflicts: icedtea-gcjwebplugin (<< 1.0-1ubuntu4) +Replaces: icedtea-gcjwebplugin, @basename@-jre (<< 6b12) +Xb-Npp-Description: IcedTea6 Java Web Browser Plugin (execution of applets on web pages) +Xb-Npp-Applications: ec8030f7-c20a-464f-9b0e-13a3a9e97384, 92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a, aa5ca914-c309-495d-91cf-3141bbb04115 +Xb-Npp-Name: The IcedTea Web Browser Plugin +Xb-Npp-MimeType: application/x-java-vm, application/x-java-applet, application/x-java-applet;version=1.1, application/x-java-applet;version=1.1.1, application/x-java-applet;version=1.1.2, application/x-java-applet;version=1.1.3, application/x-java-applet;version=1.2, application/x-java-applet;version=1.2.1, application/x-java-applet;version=1.2.2, application/x-java-applet;version=1.3, application/x-java-applet;version=1.3.1, application/x-java-applet;version=1.4, application/x-java-applet;version=1.4.1, application/x-java-applet;version=1.4.2, application/x-java-applet;version=1.5, application/x-java-applet;version=1.6, application/x-java-applet;jpi-version=1.6.0_00, application/x-java-bean, application/x-java-bean;version=1.1, application/x-java-bean;version=1.1.1, application/x-java-bean;version=1.1.2, application/x-java-bean;version=1.1.3, application/x-java-bean;version=1.2, application/x-java-bean;version=1.2.1, application/x-java-bean;version=1.2.2, application/x-java-bean;version=1.3, application/x-java-bean;version=1.3.1, application/x-java-bean;version=1.4, application/x-java-bean;version=1.4.1, application/x-java-bean;version=1.4.2, application/x-java-bean;version=1.5, application/x-java-bean;version=1.6, application/x-java-bean;jpi-version=1.6.0_00 +Description: web browser plugin based on OpenJDK and IcedTea to execute Java applets + IcedTeaPlugin is a web browser plugin to execute Java applets, supporting + LiveConnect/Javascript. It is targeted for xulrunner-1.9 and compatible + browsers that support the NPAPI. + . + Icedtea is a temporary fork of OpenJDK --- openjdk-6-6b16~pre5.orig/debian/mauve_tests +++ openjdk-6-6b16~pre5/debian/mauve_tests @@ -0,0 +1,2570 @@ +javax.xml.xpath.XPath +javax.xml.parsers.DocumentBuilder.PR27864 +javax.xml.parsers.DocumentBuilder.parseSimpleXML +javax.crypto.spec.TestOfPBEKeySpec +javax.crypto.spec.TestOfSecretKeySpec +javax.accessibility.AccessibleContext.getAccessibleRelationSet +javax.imageio.plugins.jpeg.TestJPEGImageReadParam +javax.imageio.plugins.jpeg.TestJPEGHuffmanTable +javax.imageio.plugins.jpeg.TestJPEGQTable +javax.imageio.stream.IIOByteBuffer.setOffset +javax.imageio.stream.IIOByteBuffer.setLength +javax.imageio.stream.IIOByteBuffer.setData +javax.imageio.spi.ServiceRegistry.getServiceProviderByClass +javax.imageio.spi.ServiceRegistry.deregisterAll +javax.imageio.spi.ServiceRegistry.getCategories +javax.imageio.spi.ServiceRegistry.lookupProviders +javax.imageio.spi.ServiceRegistry.registerServiceProvider +javax.imageio.spi.IIOServiceProvider.getVersion +javax.imageio.spi.IIOServiceProvider.getVendorName +javax.imageio.spi.ImageOutputStreamSpi.ImageOutputStreamSpi +javax.imageio.spi.ImageOutputStreamSpi.needsCacheFile +javax.imageio.spi.ImageOutputStreamSpi.canUseCacheFile +javax.imageio.spi.ImageReaderWriterSpi.getNativeImageMetadataFormatName +javax.imageio.spi.ImageReaderWriterSpi.getFileSuffixes +javax.imageio.spi.ImageReaderWriterSpi.getExtraImageMetadataFormatNames +javax.imageio.spi.ImageReaderWriterSpi.getPluginClassName +javax.imageio.spi.ImageReaderWriterSpi.getNativeStreamMetadataFormatName +javax.imageio.spi.ImageReaderWriterSpi.getExtraStreamMetadataFormatNames +javax.imageio.spi.ImageReaderWriterSpi.getMIMETypes +javax.imageio.spi.ImageReaderWriterSpi.isStandardImageMetadataFormatSupported +javax.imageio.spi.ImageReaderWriterSpi.getFormatNames +javax.imageio.spi.ImageReaderWriterSpi.isStandardStreamMetadataFormatSupported +javax.imageio.spi.ImageInputStreamSpi.ImageInputStreamSpi +javax.imageio.spi.ImageInputStreamSpi.needsCacheFile +javax.imageio.spi.ImageInputStreamSpi.canUseCacheFile +javax.imageio.spi.ImageTranscoderSpi.ImageTranscoderSpi +javax.imageio.spi.IIORegistry.getDefaultInstance +javax.naming.CompoundName.simple +javax.naming.directory.BasicAttribute.Enumerate +javax.naming.CompositeName.composite +javax.management.ObjectName.apply +javax.management.ObjectName.Parsing +javax.management.ObjectName.ParsingJDK6 +javax.management.ObjectName.applyJDK6 +javax.management.openmbean.ArrayType.IsValue +javax.management.openmbean.ArrayType.Constructor2 +javax.management.openmbean.ArrayType.Equals +javax.management.openmbean.ArrayType.IsPrimitiveArray +javax.management.openmbean.ArrayType.GetArrayType +javax.management.openmbean.ArrayType.HashCode +javax.management.openmbean.ArrayType.GetPrimitiveArrayType +javax.management.openmbean.ArrayType.Constructor1 +javax.management.openmbean.CompositeDataInvocationHandler.Test +javax.management.MBeanServerPermission.Constructor +javax.security.auth.login.TestOfPR25202 +javax.print.SimpleDoc.constructor +javax.print.SimpleDoc.getStreamForBytes +javax.print.SimpleDoc.getAttributes +javax.print.SimpleDoc.getReaderForText +javax.print.DocFlavor.parseMimeType +javax.print.attribute.TextSyntax.constructors +javax.print.attribute.ResolutionSyntax.simple +javax.print.attribute.EnumSyntax.serialize +javax.print.attribute.EnumSyntax.equals +javax.print.attribute.AttributeSetUtilities.simple +javax.print.attribute.Size2DSyntax.simple +javax.print.attribute.SetOfIntegerSyntax.Simple +javax.print.attribute.HashAttributeSet.populatedSet +javax.print.attribute.HashAttributeSet.nullTests +javax.print.attribute.HashAttributeSet.emptySet +javax.print.attribute.standard.MediaSize.userClass +javax.swing.JWindow.isRootPaneCheckingEnabled +javax.swing.JSplitPane.setComponent +javax.swing.JSplitPane.setResizeWeight +javax.swing.JSplitPane.getDividerLocation +javax.swing.JSplitPane.getInputMap +javax.swing.JSplitPane.getActionMap +javax.swing.JSplitPane.paramString +javax.swing.JSplitPane.Constructor +javax.swing.JOptionPane.getInputMap +javax.swing.JTabbedPane.getInputMap +javax.swing.JTabbedPane.Mnemonic +javax.swing.JTabbedPane.remove +javax.swing.JToggleButton.constructor +javax.swing.JToggleButton.actionEvent +javax.swing.JToggleButton.isFocusable +javax.swing.JToggleButton.uidelegate +javax.swing.JToggleButton.getActionCommand +javax.swing.JToggleButton.model +javax.swing.JToggleButton.click +javax.swing.text.View.getResizeWeight +javax.swing.text.View.getMaximumSpan +javax.swing.text.View.getMinimumSpan +javax.swing.text.View.getAlignment +javax.swing.text.GapContent.getString +javax.swing.text.GapContent.GapContentTest +javax.swing.text.GapContent.length +javax.swing.text.GapContent.constructors +javax.swing.text.GapContent.insertString +javax.swing.text.GapContent.getChars +javax.swing.text.GapContent.PositionTest +javax.swing.text.GapContent.remove +javax.swing.text.ElementIterator.ElementIteratorTest +javax.swing.text.AbstractDocument.BranchElement.getStartOffset +javax.swing.text.AbstractDocument.BranchElement.getElementIndexNullPointer +javax.swing.text.AbstractDocument.BranchElement.BranchElementTest +javax.swing.text.AbstractDocument.BranchElement.getElementIndex +javax.swing.text.AbstractDocument.LeafElement.getStartOffset +javax.swing.text.AbstractDocument.getDocumentProperties +javax.swing.text.AbstractDocument.ElementChange2 +javax.swing.text.AbstractDocument.AbstractDocumentTest +javax.swing.text.AbstractDocument.ElementChange +javax.swing.text.AbstractDocument.filterTest +javax.swing.text.MaskFormatter.MaskFormatterTest +javax.swing.text.DefaultFormatter.getValueClass +javax.swing.text.PlainDocument.getRootElements +javax.swing.text.PlainDocument.getDocumentProperties +javax.swing.text.PlainDocument.removeJoinesLines +javax.swing.text.PlainDocument.multipleLeafs +javax.swing.text.PlainDocument.getText +javax.swing.text.PlainDocument.getLength +javax.swing.text.PlainDocument.createPosition +javax.swing.text.PlainDocument.insertUpdate +javax.swing.text.PlainDocument.insertString +javax.swing.text.PlainDocument.PlainDocumentTest +javax.swing.text.AttributeSet.isEqual +javax.swing.text.Segment.clone +javax.swing.text.Segment.first +javax.swing.text.Segment.setIndex +javax.swing.text.Segment.last +javax.swing.text.Segment.getIndex +javax.swing.text.Segment.current +javax.swing.text.Segment.next +javax.swing.text.Segment.isPartialReturn +javax.swing.text.Segment.getEndIndex +javax.swing.text.Segment.setPartialReturn +javax.swing.text.Segment.getBeginIndex +javax.swing.text.Segment.constructors +javax.swing.text.Segment.toString +javax.swing.text.Segment.previous +javax.swing.text.TextAction.augmentList +javax.swing.text.TabSet.getTab +javax.swing.text.TabSet.constructor +javax.swing.text.TabSet.getTabCount +javax.swing.text.TabSet.getTabIndex +javax.swing.text.TabSet.getTabIndexAfter +javax.swing.text.TabSet.equals +javax.swing.text.TabSet.toString +javax.swing.text.html.HTML.HTML_Test +javax.swing.text.html.HTMLDocument.FindById +javax.swing.text.html.parser.Entity.Entity_Test +javax.swing.text.html.parser.TagElement.TagElement_Test +javax.swing.text.html.parser.AttributeList.AttributeList_test +javax.swing.text.html.parser.Element.Element_Test +javax.swing.text.html.parser.ParserDelegator.Entities +javax.swing.text.html.parser.ParserDelegator.Text4 +javax.swing.text.html.parser.ParserDelegator.randomTables +javax.swing.text.html.parser.ParserDelegator.SimpleParsing +javax.swing.text.html.parser.ParserDelegator.Text3 +javax.swing.text.html.parser.ParserDelegator.Text +javax.swing.text.html.parser.ParserDelegator.eolnNorification +javax.swing.text.html.parser.ParserDelegator.tokenLocations +javax.swing.text.html.parser.DTD.DTD_test +javax.swing.text.BoxView.spans +javax.swing.text.StyleConstants.setTabSet +javax.swing.text.StyleConstants.setUnderline +javax.swing.text.StyleConstants.getLeftIndent +javax.swing.text.StyleConstants.getIcon +javax.swing.text.StyleConstants.setFontFamily +javax.swing.text.StyleConstants.isBold +javax.swing.text.StyleConstants.setLineSpacing +javax.swing.text.StyleConstants.isSubscript +javax.swing.text.StyleConstants.setItalic +javax.swing.text.StyleConstants.getFontSize +javax.swing.text.StyleConstants.setComponent +javax.swing.text.StyleConstants.setBidiLevel +javax.swing.text.StyleConstants.getForeground +javax.swing.text.StyleConstants.setSuperscript +javax.swing.text.StyleConstants.getSpaceAbove +javax.swing.text.StyleConstants.getLineSpacing +javax.swing.text.StyleConstants.setSpaceBelow +javax.swing.text.StyleConstants.setBackground +javax.swing.text.StyleConstants.getRightIndent +javax.swing.text.StyleConstants.getFirstLineIndent +javax.swing.text.StyleConstants.isItalic +javax.swing.text.StyleConstants.getTabSet +javax.swing.text.StyleConstants.setIcon +javax.swing.text.StyleConstants.isUnderline +javax.swing.text.StyleConstants.setBold +javax.swing.text.StyleConstants.setAlignment +javax.swing.text.StyleConstants.setSubscript +javax.swing.text.StyleConstants.setRightIndent +javax.swing.text.StyleConstants.isSuperscript +javax.swing.text.StyleConstants.getSpaceBelow +javax.swing.text.StyleConstants.setFontSize +javax.swing.text.StyleConstants.getFontFamily +javax.swing.text.StyleConstants.constants +javax.swing.text.StyleConstants.setStrikeThrough +javax.swing.text.StyleConstants.setForeground +javax.swing.text.StyleConstants.getAlignment +javax.swing.text.StyleConstants.setLeftIndent +javax.swing.text.StyleConstants.getBackground +javax.swing.text.StyleConstants.getComponent +javax.swing.text.StyleConstants.getBidiLevel +javax.swing.text.StyleConstants.setFirstLineIndent +javax.swing.text.StyleConstants.setSpaceAbove +javax.swing.text.StyleConstants.isStrikeThrough +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure3 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure1 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument6 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure7 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure2 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument1 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure4 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure6 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument3 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure5 +javax.swing.text.DefaultStyledDocument.ElementBuffer.insert +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure8 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument2 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument5 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument4 +javax.swing.text.DefaultStyledDocument.Insert +javax.swing.text.DefaultStyledDocument.insertString +javax.swing.text.DefaultStyledDocument.Create +javax.swing.text.SimpleAttributeSet.removeAttributesOnlyIfMatch +javax.swing.text.SimpleAttributeSet.clone +javax.swing.text.SimpleAttributeSet.EMPTY +javax.swing.text.SimpleAttributeSet.containsAttributes +javax.swing.text.SimpleAttributeSet.containsChecksParent +javax.swing.text.SimpleAttributeSet.containsAttribute +javax.swing.text.SimpleAttributeSet.getResolveParent +javax.swing.text.SimpleAttributeSet.removeAttribute +javax.swing.text.SimpleAttributeSet.copyAttributes +javax.swing.text.SimpleAttributeSet.equals +javax.swing.text.SimpleAttributeSet.removeAttributes +javax.swing.text.SimpleAttributeSet.getAttribute +javax.swing.text.SimpleAttributeSet.isEqual +javax.swing.text.SimpleAttributeSet.getAttributeCount +javax.swing.text.SimpleAttributeSet.constructors +javax.swing.text.SimpleAttributeSet.isDefined +javax.swing.text.SimpleAttributeSet.addAttribute +javax.swing.text.SimpleAttributeSet.getAttributeNames +javax.swing.text.SimpleAttributeSet.setResolveParent +javax.swing.text.SimpleAttributeSet.isEmpty +javax.swing.text.SimpleAttributeSet.addAttributes +javax.swing.text.SimpleAttributeSet.nullValue +javax.swing.text.ZoneView.getMaximumZoneSize +javax.swing.text.ZoneView.createZone +javax.swing.text.ZoneView.constructor +javax.swing.text.ZoneView.zoneWasLoaded +javax.swing.text.ZoneView.isZoneLoaded +javax.swing.text.ZoneView.loadChildren +javax.swing.text.ZoneView.setMaxZonesLoaded +javax.swing.text.ZoneView.unloadZone +javax.swing.text.ZoneView.setMaximumZoneSize +javax.swing.text.FlowView.FlowStrategy.adjustRow +javax.swing.text.FlowView.getFlowAxis +javax.swing.text.InternationalFormatter.InternationalFormatterTest +javax.swing.text.Utilities.getNextWord +javax.swing.text.Utilities.getBreakLocation +javax.swing.text.Utilities.getPreviousWord +javax.swing.text.Utilities.getWordStart +javax.swing.text.Utilities.getTabbedTextOffset +javax.swing.text.TabStop.constructors +javax.swing.text.TabStop.toString +javax.swing.text.StringContent.insertUndo +javax.swing.text.StringContent.BadLocationExceptionTest +javax.swing.text.StringContent.stickyPosition +javax.swing.text.StringContent.length +javax.swing.text.StringContent.removeUndo +javax.swing.text.StringContent.constructors +javax.swing.text.StringContent.insertString +javax.swing.text.StringContent.StringContentTest +javax.swing.text.StyledEditorKit.createInputAttributesTest +javax.swing.text.StyleContext.NamedStyleInit +javax.swing.text.StyleContext.NamedStyleSetResolveParent +javax.swing.text.StyleContext.addStyle +javax.swing.text.StyleContext.addAttribute +javax.swing.JScrollBar.getAccessibleContext +javax.swing.JScrollBar.getInputMap +javax.swing.JScrollBar.constructors +javax.swing.JScrollBar.getActionMap +javax.swing.JScrollBar.paramString +javax.swing.plaf.basic.BasicButtonUI.getTextShiftOffset +javax.swing.plaf.basic.BasicButtonUI.getPropertyPrefix +javax.swing.plaf.basic.BasicButtonUI.defaultTextIconGap +javax.swing.plaf.basic.BasicButtonUI.setTextShiftOffset +javax.swing.plaf.basic.BasicButtonUI.defaultTextShiftOffset +javax.swing.plaf.basic.BasicButtonUI.clearTextShiftOffset +javax.swing.plaf.basic.BasicRadioButtonMenuItemUI.getPropertyPrefix +javax.swing.plaf.basic.BasicToggleButtonUI.getPropertyPrefix +javax.swing.plaf.basic.BasicSeparatorUI.getPreferredSize +javax.swing.plaf.basic.BasicSeparatorUI.getMinimumSize +javax.swing.plaf.basic.BasicSeparatorUI.getMaximumSize +javax.swing.plaf.basic.BasicLookAndFeel.initSystemColorDefaults +javax.swing.plaf.basic.BasicCheckBoxMenuItemUI.getPropertyPrefix +javax.swing.plaf.basic.BasicHTML.isHTMLString +javax.swing.plaf.basic.BasicScrollBarUI.layoutContainer +javax.swing.plaf.basic.BasicScrollBarUI.getPreferredSize +javax.swing.plaf.basic.BasicScrollBarUI.constructor +javax.swing.plaf.basic.BasicScrollBarUI.getMinimumSize +javax.swing.plaf.basic.BasicScrollBarUI.createDecreaseButton +javax.swing.plaf.basic.BasicScrollBarUI.getMaximumSize +javax.swing.plaf.basic.BasicScrollBarUI.getMaximumThumbSize +javax.swing.plaf.basic.BasicScrollBarUI.installDefaults +javax.swing.plaf.basic.BasicScrollBarUI.createIncreaseButton +javax.swing.plaf.basic.BasicScrollBarUI.installComponents +javax.swing.plaf.basic.BasicScrollBarUI.getMinimumThumbSize +javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction.constructor +javax.swing.plaf.basic.BasicInternalFrameTitlePane.IconifyAction.constructor +javax.swing.plaf.basic.BasicInternalFrameTitlePane.CloseAction.constructor +javax.swing.plaf.basic.BasicInternalFrameTitlePane.RestoreAction.constructor +javax.swing.plaf.basic.BasicInternalFrameTitlePane.MoveAction.constructor +javax.swing.plaf.basic.BasicInternalFrameTitlePane.SizeAction.constructor +javax.swing.plaf.basic.BasicPasswordFieldUI.getPropertyPrefix +javax.swing.plaf.basic.BasicSplitPaneUI.BasicHorizontalLayoutManager.layoutContainer +javax.swing.plaf.basic.BasicSplitPaneUI.getDividerLocation +javax.swing.plaf.basic.BasicArrowButton.getPreferredSize +javax.swing.plaf.basic.BasicArrowButton.isFocusTraversable +javax.swing.plaf.basic.BasicArrowButton.getMinimumSize +javax.swing.plaf.basic.BasicArrowButton.isFocusable +javax.swing.plaf.basic.BasicArrowButton.getMaximumSize +javax.swing.plaf.basic.BasicSliderUI.xPositionForValue +javax.swing.plaf.basic.BasicSliderUI.getPreferredSize +javax.swing.plaf.basic.BasicSliderUI.getMinimumSize +javax.swing.plaf.basic.BasicSliderUI.valueForYPosition +javax.swing.plaf.basic.BasicSliderUI.getMaximumSize +javax.swing.plaf.basic.BasicSliderUI.getThumbSize +javax.swing.plaf.basic.BasicSliderUI.valueForXPosition +javax.swing.plaf.basic.BasicSliderUI.constructors +javax.swing.plaf.basic.BasicSliderUI.yPositionForValue +javax.swing.plaf.basic.BasicTextFieldUI.getPropertyPrefix +javax.swing.plaf.basic.BasicTextPaneUI.getPropertyPrefix +javax.swing.plaf.basic.BasicMenuItemUI.getPropertyPrefix +javax.swing.plaf.basic.BasicFormattedTextFieldUI.getPropertyPrefix +javax.swing.plaf.basic.BasicTextAreaUI.getPropertyPrefix +javax.swing.plaf.basic.BasicComboBoxUI.getDefaultSize +javax.swing.plaf.basic.BasicComboBoxUI.createEditor +javax.swing.plaf.basic.BasicComboBoxUI.getMaximumSize +javax.swing.plaf.basic.BasicListUI.updateLayoutStateNeeded +javax.swing.plaf.basic.BasicMenuUI.getPropertyPrefix +javax.swing.plaf.basic.BasicIconFactory.getCheckBoxMenuItemIcon +javax.swing.plaf.basic.BasicIconFactory.getMenuArrowIcon +javax.swing.plaf.basic.BasicIconFactory.getCheckBoxIcon +javax.swing.plaf.basic.BasicFileChooserUI.getFileName +javax.swing.plaf.basic.BasicFileChooserUI.getApproveButtonText +javax.swing.plaf.basic.BasicFileChooserUI.constructor +javax.swing.plaf.basic.BasicFileChooserUI.getApproveButtonMnemonic +javax.swing.plaf.basic.BasicFileChooserUI.uninstallStrings +javax.swing.plaf.basic.BasicFileChooserUI.getApproveButton +javax.swing.plaf.basic.BasicFileChooserUI.getGoHomeAction +javax.swing.plaf.basic.BasicFileChooserUI.getUpdateAction +javax.swing.plaf.basic.BasicFileChooserUI.getDirectoryName +javax.swing.plaf.basic.BasicFileChooserUI.getApproveSelectionAction +javax.swing.plaf.basic.BasicFileChooserUI.installStrings +javax.swing.plaf.basic.BasicFileChooserUI.getChangeToParentDirectoryAction +javax.swing.plaf.basic.BasicFileChooserUI.getCancelSelectionAction +javax.swing.plaf.basic.BasicFileChooserUI.getFileView +javax.swing.plaf.basic.BasicFileChooserUI.installIcons +javax.swing.plaf.basic.BasicFileChooserUI.getNewFolderAction +javax.swing.plaf.basic.BasicFileChooserUI.getApproveButtonToolTipText +javax.swing.plaf.basic.BasicFileChooserUI.getDialogTitle +javax.swing.plaf.basic.BasicCheckBoxUI.getPropertyPrefix +javax.swing.plaf.basic.BasicComboBoxEditor.removeActionListener +javax.swing.plaf.basic.BasicComboBoxEditor.addActionListener +javax.swing.plaf.basic.BasicComboBoxEditor.constructor +javax.swing.plaf.basic.BasicEditorPaneUI.getPropertyPrefix +javax.swing.plaf.basic.BasicRootPaneUI.installDefaults +javax.swing.plaf.basic.BasicRadioButtonUI.getPropertyPrefix +javax.swing.plaf.ColorUIResource.serialization +javax.swing.plaf.ColorUIResource.equals +javax.swing.plaf.ColorUIResource.constructors +javax.swing.plaf.metal.MetalTheme.MetalThemeTest +javax.swing.plaf.metal.MetalLookAndFeel.getMenuTextFont +javax.swing.plaf.metal.MetalLookAndFeel.getDescription +javax.swing.plaf.metal.MetalLookAndFeel.isNativeLookAndFeel +javax.swing.plaf.metal.MetalLookAndFeel.getSeparatorBackground +javax.swing.plaf.metal.MetalLookAndFeel.getPrimaryControl +javax.swing.plaf.metal.MetalLookAndFeel.getWindowTitleInactiveForeground +javax.swing.plaf.metal.MetalLookAndFeel.getMenuBackground +javax.swing.plaf.metal.MetalLookAndFeel.getMenuForeground +javax.swing.plaf.metal.MetalLookAndFeel.getPrimaryControlShadow +javax.swing.plaf.metal.MetalLookAndFeel.getWindowTitleForeground +javax.swing.plaf.metal.MetalLookAndFeel.getControlTextFont +javax.swing.plaf.metal.MetalLookAndFeel.getControlHighlight +javax.swing.plaf.metal.MetalLookAndFeel.getPrimaryControlHighlight +javax.swing.plaf.metal.MetalLookAndFeel.getControlTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getPrimaryControlDarkShadow +javax.swing.plaf.metal.MetalLookAndFeel.getSeparatorForeground +javax.swing.plaf.metal.MetalLookAndFeel.getSubTextFont +javax.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme +javax.swing.plaf.metal.MetalLookAndFeel.getControlShadow +javax.swing.plaf.metal.MetalLookAndFeel.isSupportedLookAndFeel +javax.swing.plaf.metal.MetalLookAndFeel.getMenuSelectedBackground +javax.swing.plaf.metal.MetalLookAndFeel.getInactiveControlTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getWhite +javax.swing.plaf.metal.MetalLookAndFeel.getUserTextFont +javax.swing.plaf.metal.MetalLookAndFeel.getAcceleratorForeground +javax.swing.plaf.metal.MetalLookAndFeel.getControlDisabled +javax.swing.plaf.metal.MetalLookAndFeel.getID +javax.swing.plaf.metal.MetalLookAndFeel.getWindowTitleBackground +javax.swing.plaf.metal.MetalLookAndFeel.getName +javax.swing.plaf.metal.MetalLookAndFeel.getSystemTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getWindowTitleFont +javax.swing.plaf.metal.MetalLookAndFeel.getInactiveSystemTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getUserTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getWindowBackground +javax.swing.plaf.metal.MetalLookAndFeel.getBlack +javax.swing.plaf.metal.MetalLookAndFeel.getAcceleratorSelectedForeground +javax.swing.plaf.metal.MetalLookAndFeel.getDesktopColor +javax.swing.plaf.metal.MetalLookAndFeel.getSystemTextFont +javax.swing.plaf.metal.MetalLookAndFeel.getControlDarkShadow +javax.swing.plaf.metal.MetalLookAndFeel.getControlInfo +javax.swing.plaf.metal.MetalLookAndFeel.getMenuDisabledForeground +javax.swing.plaf.metal.MetalLookAndFeel.getFocusColor +javax.swing.plaf.metal.MetalLookAndFeel.getMenuSelectedForeground +javax.swing.plaf.metal.MetalLookAndFeel.getHighlightedTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getControl +javax.swing.plaf.metal.MetalLookAndFeel.getWindowTitleInactiveBackground +javax.swing.plaf.metal.MetalLookAndFeel.getTextHighlightColor +javax.swing.plaf.metal.MetalLookAndFeel.getPrimaryControlInfo +javax.swing.plaf.metal.MetalComboBoxIcon.getIconWidth +javax.swing.plaf.metal.MetalComboBoxIcon.getIconHeight +javax.swing.plaf.metal.MetalComboBoxUI.getPreferredSize +javax.swing.plaf.metal.MetalComboBoxUI.createArrowButton +javax.swing.plaf.metal.MetalFileChooserUI.getFileName +javax.swing.plaf.metal.MetalFileChooserUI.createFilterComboBoxModel +javax.swing.plaf.metal.MetalFileChooserUI.getButtonPanel +javax.swing.plaf.metal.MetalFileChooserUI.getPreferredSize +javax.swing.plaf.metal.MetalFileChooserUI.getMinimumSize +javax.swing.plaf.metal.MetalFileChooserUI.getMaximumSize +javax.swing.plaf.metal.MetalFileChooserUI.getApproveButton +javax.swing.plaf.metal.MetalFileChooserUI.setFileName +javax.swing.plaf.metal.MetalFileChooserUI.getBottomPanel +javax.swing.plaf.metal.MetalCheckBoxUI.getPropertyPrefix +javax.swing.plaf.metal.MetalIconFactory.TreeFolderIcon.getAdditionalHeight +javax.swing.plaf.metal.MetalIconFactory.TreeFolderIcon.getShift +javax.swing.plaf.metal.MetalIconFactory.PaletteCloseIcon.getIconWidth +javax.swing.plaf.metal.MetalIconFactory.PaletteCloseIcon.getIconHeight +javax.swing.plaf.metal.MetalIconFactory.TreeLeafIcon.getAdditionalHeight +javax.swing.plaf.metal.MetalIconFactory.TreeLeafIcon.getShift +javax.swing.plaf.metal.MetalIconFactory.getInternalFrameCloseIcon +javax.swing.plaf.metal.MetalIconFactory.getInternalFrameMaximizeIcon +javax.swing.plaf.metal.MetalIconFactory.getMenuItemCheckIcon +javax.swing.plaf.metal.MetalIconFactory.getRadioButtonMenuItemIcon +javax.swing.plaf.metal.MetalIconFactory.getCheckBoxMenuItemIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeHardDriveIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeLeafIcon +javax.swing.plaf.metal.MetalIconFactory.getMenuArrowIcon +javax.swing.plaf.metal.MetalIconFactory.getFileChooserNewFolderIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeControlIcon +javax.swing.plaf.metal.MetalIconFactory.getFileChooserDetailViewIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeFloppyDriveIcon +javax.swing.plaf.metal.MetalIconFactory.getMenuItemArrowIcon +javax.swing.plaf.metal.MetalIconFactory.getFileChooserListViewIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeComputerIcon +javax.swing.plaf.metal.MetalIconFactory.getFileChooserHomeFolderIcon +javax.swing.plaf.metal.MetalIconFactory.getInternalFrameAltMaximizeIcon +javax.swing.plaf.metal.MetalIconFactory.getRadioButtonIcon +javax.swing.plaf.metal.MetalIconFactory.getFileChooserUpFolderIcon +javax.swing.plaf.metal.MetalIconFactory.getInternalFrameDefaultMenuIcon +javax.swing.plaf.metal.MetalIconFactory.getInternalFrameMinimizeIcon +javax.swing.plaf.metal.MetalIconFactory.getCheckBoxIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeFolderIcon +javax.swing.plaf.metal.MetalRadioButtonUI.getSelectColor +javax.swing.plaf.metal.MetalRadioButtonUI.getFocusColor +javax.swing.plaf.metal.MetalRadioButtonUI.getDisabledTextColor +javax.swing.plaf.metal.MetalComboBoxButton.setIconOnly +javax.swing.plaf.metal.MetalComboBoxButton.isFocusTraversable +javax.swing.plaf.metal.MetalComboBoxButton.setEnabled +javax.swing.plaf.metal.MetalComboBoxButton.isIconOnly +javax.swing.plaf.metal.MetalComboBoxButton.getComboBox +javax.swing.plaf.metal.MetalComboBoxButton.getComboIcon +javax.swing.plaf.metal.MetalComboBoxButton.setComboBox +javax.swing.plaf.metal.MetalComboBoxButton.constructors +javax.swing.plaf.metal.MetalComboBoxButton.setComboIcon +javax.swing.plaf.metal.DefaultMetalTheme.getMenuTextFont +javax.swing.plaf.metal.DefaultMetalTheme.DefaultMetalThemeTest +javax.swing.plaf.metal.DefaultMetalTheme.getControlTextFont +javax.swing.plaf.metal.DefaultMetalTheme.getSubTextFont +javax.swing.plaf.metal.DefaultMetalTheme.getUserTextFont +javax.swing.plaf.metal.DefaultMetalTheme.getName +javax.swing.plaf.metal.DefaultMetalTheme.getWindowTitleFont +javax.swing.plaf.metal.DefaultMetalTheme.getSystemTextFont +javax.swing.plaf.metal.MetalComboBoxEditor.constructor +javax.swing.plaf.metal.MetalComboBoxEditor.editorBorderInsets +javax.swing.plaf.metal.MetalToolTipUI.constructor +javax.swing.plaf.metal.MetalToolTipUI.createUI +javax.swing.plaf.metal.OceanTheme.OceanThemeTest +javax.swing.plaf.metal.OceanTheme.addCustomEntriesToTable +javax.swing.plaf.metal.MetalToggleButtonUI.getSelectColor +javax.swing.plaf.metal.MetalToggleButtonUI.getFocusColor +javax.swing.plaf.metal.MetalToggleButtonUI.getDisabledTextColor +javax.swing.plaf.metal.MetalBorders.ToolBarBorder.getBorderInsets +javax.swing.plaf.metal.MetalBorders.MenuItemBorder.borderInsets +javax.swing.plaf.metal.MetalBorders.MenuBarBorder.getBorderInsets +javax.swing.plaf.metal.MetalBorders.MenuBarBorder.borderInsets +javax.swing.plaf.metal.MetalBorders.getToggleButtonBorder +javax.swing.plaf.metal.MetalBorders.getDesktopIconBorder +javax.swing.plaf.metal.MetalBorders.getButtonBorder +javax.swing.plaf.metal.MetalBorders.getTextFieldBorder +javax.swing.plaf.metal.MetalBorders.getTextBorder +javax.swing.plaf.metal.MetalScrollButton.getButtonWidth +javax.swing.plaf.metal.MetalScrollButton.getPreferredSize +javax.swing.plaf.metal.MetalScrollButton.constructor +javax.swing.plaf.metal.MetalScrollButton.getMinimumSize +javax.swing.plaf.metal.MetalScrollButton.isFocusable +javax.swing.plaf.metal.MetalScrollButton.getMaximumSize +javax.swing.plaf.metal.MetalScrollBarUI.layoutContainer +javax.swing.plaf.metal.MetalScrollBarUI.getPreferredSize +javax.swing.plaf.metal.MetalScrollBarUI.constructor +javax.swing.plaf.metal.MetalScrollBarUI.installDefaults +javax.swing.plaf.metal.MetalScrollBarUI.getMinimumThumbSize +javax.swing.plaf.metal.MetalButtonUI.getSelectColor +javax.swing.plaf.metal.MetalButtonUI.getFocusColor +javax.swing.plaf.metal.MetalButtonUI.getDisabledTextColor +javax.swing.plaf.IconUIResource.constructor +javax.swing.JFrame.isRootPaneCheckingEnabled +javax.swing.JFrame.glassPaneLayout +javax.swing.JFrame.constructors +javax.swing.border.TitledBorder.getTitleFont +javax.swing.border.TitledBorder.getTitle +javax.swing.border.TitledBorder.setTitleJustification +javax.swing.border.TitledBorder.getBorder +javax.swing.border.TitledBorder.getBorderInsets +javax.swing.border.TitledBorder.setTitleColor +javax.swing.border.TitledBorder.setTitle +javax.swing.border.TitledBorder.setTitlePosition +javax.swing.border.TitledBorder.getTitleJustification +javax.swing.border.TitledBorder.setBorder +javax.swing.border.TitledBorder.getTitleColor +javax.swing.border.TitledBorder.isBorderOpaque +javax.swing.border.TitledBorder.constructors +javax.swing.border.TitledBorder.setTitleFont +javax.swing.border.TitledBorder.getTitlePosition +javax.swing.border.CompoundBorder.isBorderOpaque +javax.swing.JTable.AccessibleJTable.AccessibleJTableHeaderCell.getAccessibleRole +javax.swing.JTable.AccessibleJTable.AccessibleJTableCell.getAccessibleRole +javax.swing.JTable.AccessibleJTable.getAccessibleColumnHeader +javax.swing.JTable.setRowSelectionAllowed +javax.swing.JTable.getColumn +javax.swing.JTable.getRowHeight +javax.swing.JTable.convertColumnIndexToModel +javax.swing.JTable.createDefaultDataModel +javax.swing.JTable.getCellEditor +javax.swing.JTable.setColumnSelectionAllowed +javax.swing.JTable.setAutoCreateColumnsFromModel +javax.swing.JTable.setRowHeight +javax.swing.JTable.createDefaultSelectionModel +javax.swing.JTable.getAccessibleContext +javax.swing.JTable.convertColumnIndexToView +javax.swing.JTable.isCellEditable +javax.swing.JTable.getInputMap +javax.swing.JTable.getCellRect +javax.swing.JTable.isRowSelected +javax.swing.JTable.getModel +javax.swing.JTable.initializeLocalVars +javax.swing.JTable.createDefaultColumnsFromModel +javax.swing.JTable.getAutoCreateColumnsFromModel +javax.swing.JTable.isColumnSelected +javax.swing.JTable.addColumn +javax.swing.table.AbstractTableModel.getColumnName +javax.swing.table.AbstractTableModel.fireTableDataChanged +javax.swing.table.AbstractTableModel.fireTableStructureChanged +javax.swing.table.AbstractTableModel.fireTableRowsUpdated +javax.swing.table.AbstractTableModel.fireTableRowsDeleted +javax.swing.table.AbstractTableModel.getColumnClass +javax.swing.table.AbstractTableModel.isCellEditable +javax.swing.table.AbstractTableModel.fireTableChanged +javax.swing.table.AbstractTableModel.findColumn +javax.swing.table.AbstractTableModel.fireTableRowsInserted +javax.swing.table.AbstractTableModel.fireTableCellUpdated +javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent +javax.swing.table.DefaultTableColumnModel.getListeners +javax.swing.table.DefaultTableColumnModel.getColumn +javax.swing.table.DefaultTableColumnModel.getColumnModelListeners +javax.swing.table.DefaultTableColumnModel.getSelectedColumnCount +javax.swing.table.DefaultTableColumnModel.getSelectionModel +javax.swing.table.DefaultTableColumnModel.getTotalColumnWidth +javax.swing.table.DefaultTableColumnModel.constructor +javax.swing.table.DefaultTableColumnModel.getColumns +javax.swing.table.DefaultTableColumnModel.setColumnSelectionAllowed +javax.swing.table.DefaultTableColumnModel.getColumnSelectionAllowed +javax.swing.table.DefaultTableColumnModel.getColumnCount +javax.swing.table.DefaultTableColumnModel.setSelectionModel +javax.swing.table.DefaultTableColumnModel.setColumnMargin +javax.swing.table.DefaultTableColumnModel.getColumnIndexAtX +javax.swing.table.DefaultTableColumnModel.addColumnModelListener +javax.swing.table.DefaultTableColumnModel.removeColumn +javax.swing.table.DefaultTableColumnModel.moveColumn +javax.swing.table.DefaultTableColumnModel.addColumn +javax.swing.table.DefaultTableColumnModel.getColumnIndex +javax.swing.table.DefaultTableColumnModel.getColumnMargin +javax.swing.table.DefaultTableModel.removeRow +javax.swing.table.DefaultTableModel.getRowCount +javax.swing.table.DefaultTableModel.setColumnCount +javax.swing.table.DefaultTableModel.insertRow +javax.swing.table.DefaultTableModel.getColumnCount +javax.swing.table.DefaultTableModel.convertToVector +javax.swing.table.DefaultTableModel.setColumnIdentifiers +javax.swing.table.DefaultTableModel.isCellEditable +javax.swing.table.DefaultTableModel.setDataVector +javax.swing.table.DefaultTableModel.setValueAt +javax.swing.table.DefaultTableModel.moveRow +javax.swing.table.DefaultTableModel.newDataAvailable +javax.swing.table.DefaultTableModel.addRow +javax.swing.table.DefaultTableModel.constructors +javax.swing.table.DefaultTableModel.getDataVector +javax.swing.table.DefaultTableModel.rowsRemoved +javax.swing.table.DefaultTableModel.addColumn +javax.swing.table.DefaultTableModel.setRowCount +javax.swing.table.DefaultTableModel.getValueAt +javax.swing.table.TableColumn.setCellEditor +javax.swing.table.TableColumn.getHeaderRenderer +javax.swing.table.TableColumn.getIdentifier +javax.swing.table.TableColumn.setPreferredWidth +javax.swing.table.TableColumn.setHeaderValue +javax.swing.table.TableColumn.getCellRenderer +javax.swing.table.TableColumn.sizeWidthToFit +javax.swing.table.TableColumn.setResizable +javax.swing.table.TableColumn.properties +javax.swing.table.TableColumn.removePropertyChangeListener +javax.swing.table.TableColumn.setIdentifier +javax.swing.table.TableColumn.addPropertyChangeListener +javax.swing.table.TableColumn.setMinWidth +javax.swing.table.TableColumn.setModelIndex +javax.swing.table.TableColumn.setCellRenderer +javax.swing.table.TableColumn.getModelIndex +javax.swing.table.TableColumn.setMaxWidth +javax.swing.table.TableColumn.setWidth +javax.swing.table.TableColumn.constants +javax.swing.table.TableColumn.setHeaderRenderer +javax.swing.table.TableColumn.getHeaderValue +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getLocale +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.isFocusTraversable +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.setAccessibleName +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleName +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleDescription +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleIndexInParent +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleContext +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.isVisible +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleChild +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleRole +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleComponent +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleChildrenCount +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleValue +javax.swing.table.JTableHeader.AccessibleJTableHeader.getAccessibleChild +javax.swing.table.JTableHeader.AccessibleJTableHeader.getAccessibleRole +javax.swing.table.JTableHeader.AccessibleJTableHeader.getAccessibleChildrenCount +javax.swing.table.JTableHeader.getAccessibleContext +javax.swing.event.InternalFrameEvent.constructor +javax.swing.event.InternalFrameEvent.getInternalFrame +javax.swing.event.InternalFrameEvent.paramString +javax.swing.event.ListDataEvent.getIndex0 +javax.swing.event.ListDataEvent.constructor +javax.swing.event.ListDataEvent.getType +javax.swing.event.ListDataEvent.getSource +javax.swing.event.ListDataEvent.getIndex1 +javax.swing.event.ListDataEvent.toString +javax.swing.event.TableModelEvent.constructors +javax.swing.event.SwingPropertyChangeSupport.firePropertyChange +javax.swing.event.SwingPropertyChangeSupport.getPropertyChangeListeners +javax.swing.event.SwingPropertyChangeSupport.constructor +javax.swing.event.SwingPropertyChangeSupport.hasListeners +javax.swing.event.SwingPropertyChangeSupport.removePropertyChangeListener +javax.swing.event.SwingPropertyChangeSupport.addPropertyChangeListener +javax.swing.event.EventListenerList.getListeners +javax.swing.event.EventListenerList.add +javax.swing.event.EventListenerList.getListenerList +javax.swing.event.EventListenerList.getListenerCount +javax.swing.event.EventListenerList.toString +javax.swing.event.EventListenerList.remove +javax.swing.event.TreeSelectionEvent.isAddedPath +javax.swing.event.TreeSelectionEvent.cloneWithSource +javax.swing.event.TreeSelectionEvent.constructors +javax.swing.JDesktopPane.constructor +javax.swing.JRadioButton.isFocusable +javax.swing.JRadioButton.uidelegate +javax.swing.JRadioButton.getActionCommand +javax.swing.JRadioButton.model +javax.swing.JMenuBar.getComponentIndex +javax.swing.JMenuBar.getHelpMenu +javax.swing.JMenuBar.getSubElements +javax.swing.JMenuBar.setMargin +javax.swing.JMenuBar.getInputMap +javax.swing.JMenuBar.setHelpMenu +javax.swing.JMenuBar.getActionMap +javax.swing.JMenuBar.getMenu +javax.swing.JCheckBoxMenuItem.uidelegate +javax.swing.JCheckBoxMenuItem.getActionCommand +javax.swing.JCheckBoxMenuItem.model +javax.swing.JCheckBoxMenuItem.constructors +javax.swing.JComboBox.getPrototypeDisplayValue +javax.swing.JComboBox.MutableTest2 +javax.swing.JComboBox.setEditor +javax.swing.JComboBox.getEditor +javax.swing.JComboBox.addItem +javax.swing.JComboBox.MutableTest1 +javax.swing.JComboBox.removeItem +javax.swing.JComboBox.setModel +javax.swing.JComboBox.setSelectedIndex +javax.swing.JComboBox.model +javax.swing.JComboBox.listenerList +javax.swing.JComboBox.setPrototypeDisplayValue +javax.swing.JComboBox.setEditable +javax.swing.JComboBox.SimpleSelectionTest +javax.swing.OverlayLayout.layoutContainer +javax.swing.OverlayLayout.getLayoutAlignmentY +javax.swing.OverlayLayout.getLayoutAlignmentX +javax.swing.OverlayLayout.preferredLayoutSize +javax.swing.OverlayLayout.minimumLayoutSize +javax.swing.OverlayLayout.maximumLayoutSize +javax.swing.JScrollPane.AccessibleJScrollPane.resetViewport +javax.swing.JScrollPane.createHorizontalScrollBar +javax.swing.JScrollPane.getInputMap +javax.swing.JScrollPane.createVerticalScrollBar +javax.swing.JScrollPane.getActionMap +javax.swing.DefaultListCellRenderer.getListCellRendererComponent +javax.swing.JFileChooser.setFileHidingEnabled +javax.swing.JFileChooser.getControlButtonsAreShown +javax.swing.JFileChooser.setApproveButtonMnemonic +javax.swing.JFileChooser.setFileSystemView +javax.swing.JFileChooser.getApproveButtonText +javax.swing.JFileChooser.setDialogTitle +javax.swing.JFileChooser.setDialogType +javax.swing.JFileChooser.setSelectedFile +javax.swing.JFileChooser.getChoosableFileFilters +javax.swing.JFileChooser.getApproveButtonMnemonic +javax.swing.JFileChooser.setApproveButtonText +javax.swing.JFileChooser.getDialogType +javax.swing.JFileChooser.getFileFilter +javax.swing.JFileChooser.setAccessory +javax.swing.JFileChooser.isAcceptAllFileFilterUsed +javax.swing.JFileChooser.accept +javax.swing.JFileChooser.setControlButtonsAreShown +javax.swing.JFileChooser.setFileView +javax.swing.JFileChooser.setCurrentDirectory +javax.swing.JFileChooser.isFileHidingEnabled +javax.swing.JFileChooser.constructors +javax.swing.JFileChooser.changeToParentDirectory +javax.swing.JFileChooser.getFileView +javax.swing.JFileChooser.getFileSystemView +javax.swing.JFileChooser.setSelectedFiles +javax.swing.JFileChooser.setFileFilter +javax.swing.JFileChooser.getFileSelectionMode +javax.swing.JFileChooser.setFileSelectionMode +javax.swing.JFileChooser.getSelectedFiles +javax.swing.JFileChooser.getAccessory +javax.swing.JFileChooser.setApproveButtonToolTipText +javax.swing.JFileChooser.getApproveButtonToolTipText +javax.swing.JFileChooser.getDialogTitle +javax.swing.SpinnerDateModel.getPreviousValue +javax.swing.SpinnerDateModel.setStart +javax.swing.SpinnerDateModel.setEnd +javax.swing.SpinnerDateModel.setValue +javax.swing.SpinnerDateModel.getNextValue +javax.swing.SpinnerDateModel.constructors +javax.swing.JDialog.isRootPaneCheckingEnabled +javax.swing.JPopupMenu.getInputMap +javax.swing.JSlider.getPaintTrack +javax.swing.JSlider.addChangeListener +javax.swing.JSlider.setMinimum +javax.swing.JSlider.setSnapToTicks +javax.swing.JSlider.setOrientation +javax.swing.JSlider.getMinorTickSpacing +javax.swing.JSlider.setValue +javax.swing.JSlider.setMaximum +javax.swing.JSlider.setExtent +javax.swing.JSlider.setPaintLabels +javax.swing.JSlider.getSnapToTicks +javax.swing.JSlider.setMinorTickSpacing +javax.swing.JSlider.getUIClassID +javax.swing.JSlider.setLabelTable +javax.swing.JSlider.getPaintTicks +javax.swing.JSlider.setModel +javax.swing.JSlider.getMaximum +javax.swing.JSlider.setPaintTicks +javax.swing.JSlider.getPaintLabels +javax.swing.JSlider.getMinimum +javax.swing.JSlider.getModel +javax.swing.JSlider.getInverted +javax.swing.JSlider.setInverted +javax.swing.JSlider.constructors +javax.swing.JSlider.getMajorTickSpacing +javax.swing.JSlider.createStandardLabels +javax.swing.JSlider.setMajorTickSpacing +javax.swing.JSlider.getExtent +javax.swing.JSlider.setPaintTrack +javax.swing.JSlider.getLabelTable +javax.swing.DefaultButtonModel.addActionListener +javax.swing.DefaultButtonModel.setPressed +javax.swing.DefaultButtonModel.setEnabled +javax.swing.DefaultButtonModel.constructor +javax.swing.DefaultButtonModel.setActionCommand +javax.swing.DefaultButtonModel.getSelectedObjects +javax.swing.DefaultButtonModel.setArmed +javax.swing.DefaultButtonModel.setSelected +javax.swing.DefaultButtonModel.constants +javax.swing.DefaultButtonModel.setRollover +javax.swing.DefaultButtonModel.setGroup +javax.swing.JComponent.getListeners +javax.swing.JComponent.setVerifyInputWhenFocusTarget +javax.swing.JComponent.getVetoableChangeListeners +javax.swing.JComponent.setInheritsPopupMenu +javax.swing.JComponent.getPreferredSize +javax.swing.JComponent.setEnabled +javax.swing.JComponent.constructor +javax.swing.JComponent.registerKeyboardAction +javax.swing.JComponent.setUI +javax.swing.JComponent.getActionForKeyStroke +javax.swing.JComponent.setMinimumSize +javax.swing.JComponent.setPreferredSize +javax.swing.JComponent.setDefaultLocale +javax.swing.JComponent.setBackground +javax.swing.JComponent.setBorder +javax.swing.JComponent.getInputMap +javax.swing.JComponent.setVisible +javax.swing.JComponent.setAlignmentX +javax.swing.JComponent.setComponentPopupMenu +javax.swing.JComponent.getFont +javax.swing.JComponent.setAlignmentY +javax.swing.JComponent.setMaximumSize +javax.swing.JComponent.setFont +javax.swing.JComponent.getVerifyInputWhenFocusTarget +javax.swing.JComponent.putClientProperty +javax.swing.JComponent.getAlignmentY +javax.swing.JComponent.getComponentPopupMenu +javax.swing.JComponent.getAlignmentX +javax.swing.JComponent.removeVetoableChangeListener +javax.swing.JComponent.getRegisteredKeyStrokes +javax.swing.JComponent.setForeground +javax.swing.JComponent.paint +javax.swing.JComponent.setOpaque +javax.swing.JComponent.addVetoableChangeListener +javax.swing.JProgressBar.isStringPainted +javax.swing.JProgressBar.setOrientation +javax.swing.JProgressBar.setValue +javax.swing.JProgressBar.setBorderPainted +javax.swing.JProgressBar.setStringPainted +javax.swing.JProgressBar.getAccessibleContext +javax.swing.JProgressBar.getPercentComplete +javax.swing.JProgressBar.paramString +javax.swing.JMenu.uidelegate +javax.swing.JMenu.getInputMap +javax.swing.JMenu.getActionCommand +javax.swing.JMenu.model +javax.swing.JMenu.getPopUpMenu +javax.swing.JMenu.remove +javax.swing.UIManager.LookAndFeelInfo.constructor +javax.swing.UIManager.getPropertyChangeListeners +javax.swing.UIManager.getBoolean +javax.swing.UIManager.addAuxiliaryLookAndFeel +javax.swing.UIManager.getString +javax.swing.UIManager.getBorder +javax.swing.UIManager.getIcon +javax.swing.UIManager.getInsets +javax.swing.UIManager.removeAuxiliaryLookAndFeel +javax.swing.UIManager.setLookAndFeel +javax.swing.UIManager.getFont +javax.swing.UIManager.getDefaults +javax.swing.UIManager.getInt +javax.swing.UIManager.addPropertyChangeListener +javax.swing.UIManager.getUI +javax.swing.UIManager.getDimension +javax.swing.UIManager.getLookAndFeelDefaults +javax.swing.UIManager.getCrossPlatformLookAndFeelClassName +javax.swing.UIManager.getColor +javax.swing.UIManager.getAuxiliaryLookAndFeels +javax.swing.JPanel.setBorder +javax.swing.JPanel.Layouter +javax.swing.JTree.getCellRenderer +javax.swing.JTree.isRowSelected +javax.swing.JTree.setModel +javax.swing.TransferHandler.exportToClipboard +javax.swing.TransferHandler.TransferActionConstructor +javax.swing.TransferHandler.canImport +javax.swing.TransferHandler.importData +javax.swing.TransferHandler.createTransferable +javax.swing.JToolTip.setComponent +javax.swing.JToolTip.setTipText +javax.swing.JToolTip.getAccessibleContext +javax.swing.JToolTip.getUIClassID +javax.swing.JToolTip.getTipText +javax.swing.JToolTip.paramString +javax.swing.JToolTip.getComponent +javax.swing.JToolBar.buttonInsets +javax.swing.JToolBar.getInputMap +javax.swing.JRootPane.RootLayout.layoutContainer +javax.swing.JRootPane.RootLayout.getLayoutAlignmentY +javax.swing.JRootPane.RootLayout.getLayoutAlignmentX +javax.swing.JRootPane.RootLayout.preferredLayoutSize +javax.swing.JRootPane.setLayeredPane +javax.swing.ScrollPaneLayout.minimumLayoutSize +javax.swing.Timer.preparatory +javax.swing.Timer.setDelay +javax.swing.Timer.basic +javax.swing.Timer.test_23918 +javax.swing.Timer.setInitialDelay +javax.swing.ActionMap.newMapKeysNull +javax.swing.InputMap.put +javax.swing.InputMap.constructor +javax.swing.InputMap.keys +javax.swing.InputMap.setParent +javax.swing.InputMap.size +javax.swing.InputMap.newMapKeysNull +javax.swing.InputMap.get +javax.swing.InputMap.getParent +javax.swing.InputMap.remove +javax.swing.InputMap.clear +javax.swing.InputMap.allKeys +javax.swing.filechooser.FileView.getDescription +javax.swing.filechooser.FileView.getIcon +javax.swing.filechooser.FileView.getName +javax.swing.filechooser.FileView.isTraversable +javax.swing.filechooser.FileView.getTypeDescription +javax.swing.filechooser.FileSystemView.getFileSystemView +javax.swing.ViewportLayout.layoutContainer +javax.swing.ViewportLayout.minimumLayoutSize +javax.swing.JList.AccessibleJList.AccessibleJListChild.isFocusTraversable +javax.swing.JList.AccessibleJList.AccessibleJListChild.isEnabled +javax.swing.JList.AccessibleJList.AccessibleJListChild.setEnabled +javax.swing.JList.AccessibleJList.AccessibleJListChild.setCursor +javax.swing.JList.AccessibleJList.AccessibleJListChild.getForeground +javax.swing.JList.AccessibleJList.AccessibleJListChild.setBackground +javax.swing.JList.AccessibleJList.AccessibleJListChild.isVisible +javax.swing.JList.AccessibleJList.AccessibleJListChild.isShowing +javax.swing.JList.AccessibleJList.AccessibleJListChild.getFont +javax.swing.JList.AccessibleJList.AccessibleJListChild.getCursor +javax.swing.JList.AccessibleJList.AccessibleJListChild.getAccessibleRole +javax.swing.JList.AccessibleJList.AccessibleJListChild.setFont +javax.swing.JList.AccessibleJList.AccessibleJListChild.getAccessibleStateSet +javax.swing.JList.AccessibleJList.AccessibleJListChild.setForeground +javax.swing.JList.AccessibleJList.AccessibleJListChild.getBackground +javax.swing.JList.AccessibleJList.valueChanged +javax.swing.JList.AccessibleJList.getAccessibleChild +javax.swing.JList.AccessibleJList.getAccessibleRole +javax.swing.JList.AccessibleJList.intervalAdded +javax.swing.JList.AccessibleJList.intervalRemoved +javax.swing.JList.AccessibleJList.contentsChanged +javax.swing.JList.AccessibleJList.getAccessibleStateSet +javax.swing.JList.setValueIsAdjusting +javax.swing.JList.setVisibleRowCount +javax.swing.JList.setSelectionBackground +javax.swing.JList.setBackground +javax.swing.JList.getSelectionBackground +javax.swing.JList.getInputMap +javax.swing.JList.setModel +javax.swing.JList.getNextMatch +javax.swing.JList.setLayoutOrientation +javax.swing.JList.constructors +javax.swing.JList.getBackground +javax.swing.ToolTipManager.setReshowDelay +javax.swing.ToolTipManager.setInitialDelay +javax.swing.ToolTipManager.setDismissDelay +javax.swing.AbstractButton.constructor +javax.swing.AbstractButton.setRolloverEnabled +javax.swing.AbstractButton.setRolloverSelectedIcon +javax.swing.AbstractButton.init +javax.swing.AbstractButton.setVerticalTextPosition +javax.swing.AbstractButton.setHorizontalAlignment +javax.swing.AbstractButton.setHorizontalTextPosition +javax.swing.AbstractButton.setRolloverIcon +javax.swing.AbstractButton.setVerticalAlignment +javax.swing.AbstractButton.createChangeListener +javax.swing.JLayeredPane.defaultLayoutManager +javax.swing.JLayeredPane.getComponentsInLayer +javax.swing.JLayeredPane.setPosition +javax.swing.JLayeredPane.moveToFront +javax.swing.JLayeredPane.addImpl +javax.swing.DefaultListModel.toArray +javax.swing.DefaultListModel.trimToSize +javax.swing.DefaultListModel.removeAllElements +javax.swing.DefaultListModel.constructor +javax.swing.DefaultListModel.add +javax.swing.DefaultListModel.lastElement +javax.swing.DefaultListModel.copyInto +javax.swing.DefaultListModel.firstElement +javax.swing.DefaultListModel.setElementAt +javax.swing.DefaultListModel.set +javax.swing.DefaultListModel.elementAt +javax.swing.DefaultListModel.ensureCapacity +javax.swing.DefaultListModel.indexOf +javax.swing.DefaultListModel.insertElementAt +javax.swing.DefaultListModel.setSize +javax.swing.DefaultListModel.lastIndexOf +javax.swing.DefaultListModel.elements +javax.swing.DefaultListModel.size +javax.swing.DefaultListModel.getSize +javax.swing.DefaultListModel.capacity +javax.swing.DefaultListModel.removeElementAt +javax.swing.DefaultListModel.get +javax.swing.DefaultListModel.contains +javax.swing.DefaultListModel.getElementAt +javax.swing.DefaultListModel.removeRange +javax.swing.DefaultListModel.addElement +javax.swing.DefaultListModel.removeElement +javax.swing.DefaultListModel.isEmpty +javax.swing.DefaultListModel.remove +javax.swing.DefaultListModel.clear +javax.swing.JFormattedTextField.JFormattedTextFieldTests +javax.swing.AbstractAction.clone +javax.swing.AbstractAction.setEnabled +javax.swing.AbstractAction.getValue +javax.swing.AbstractAction.constructors +javax.swing.AbstractAction.putValue +javax.swing.JTextArea.preferredSize +javax.swing.JTextArea.isValidChecks +javax.swing.JTextArea.text +javax.swing.JTextArea.gettingText +javax.swing.JCheckBox.constructor +javax.swing.JCheckBox.isFocusable +javax.swing.JCheckBox.uidelegate +javax.swing.JCheckBox.getActionCommand +javax.swing.JCheckBox.model +javax.swing.JButton.uidelegate +javax.swing.JButton.getActionCommand +javax.swing.JButton.model +javax.swing.SizeRequirements.calculateAlignedPositions +javax.swing.tree.TreePath.getParentPath +javax.swing.tree.TreePath.serialization +javax.swing.tree.TreePath.getPath +javax.swing.tree.TreePath.getLastPathComponent +javax.swing.tree.TreePath.PR27651 +javax.swing.tree.TreePath.isDescendant +javax.swing.tree.TreePath.equals +javax.swing.tree.TreePath.getPathCount +javax.swing.tree.TreePath.constructors +javax.swing.tree.TreePath.getPathComponent +javax.swing.tree.TreePath.pathByAddingChild +javax.swing.tree.DefaultMutableTreeNode.clone +javax.swing.tree.DefaultMutableTreeNode.getChildAt +javax.swing.tree.DefaultMutableTreeNode.getChildBefore +javax.swing.tree.DefaultMutableTreeNode.getSiblingCount +javax.swing.tree.DefaultMutableTreeNode.isNodeSibling +javax.swing.tree.DefaultMutableTreeNode.getIndex +javax.swing.tree.DefaultMutableTreeNode.isNodeChild +javax.swing.tree.DefaultMutableTreeNode.add +javax.swing.tree.DefaultMutableTreeNode.getFirstChild +javax.swing.tree.DefaultMutableTreeNode.getPath +javax.swing.tree.DefaultMutableTreeNode.removeAllChildren +javax.swing.tree.DefaultMutableTreeNode.getChildCount +javax.swing.tree.DefaultMutableTreeNode.isNodeRelated +javax.swing.tree.DefaultMutableTreeNode.getNextSibling +javax.swing.tree.DefaultMutableTreeNode.getPreviousSibling +javax.swing.tree.DefaultMutableTreeNode.setAllowsChildren +javax.swing.tree.DefaultMutableTreeNode.getPreviousLeaf +javax.swing.tree.DefaultMutableTreeNode.isNodeAncestor +javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode +javax.swing.tree.DefaultMutableTreeNode.isNodeDescendant +javax.swing.tree.DefaultMutableTreeNode.breadthFirstEnumeration +javax.swing.tree.DefaultMutableTreeNode.getLastLeaf +javax.swing.tree.DefaultMutableTreeNode.children +javax.swing.tree.DefaultMutableTreeNode.getAllowsChildren +javax.swing.tree.DefaultMutableTreeNode.getFirstLeaf +javax.swing.tree.DefaultMutableTreeNode.constructors +javax.swing.tree.DefaultMutableTreeNode.isLeaf +javax.swing.tree.DefaultMutableTreeNode.insert +javax.swing.tree.DefaultMutableTreeNode.DefaultMutableTreeNodeTest +javax.swing.tree.DefaultMutableTreeNode.getParent +javax.swing.tree.DefaultMutableTreeNode.getLastChild +javax.swing.tree.DefaultMutableTreeNode.pathFromAncestorEnumeration +javax.swing.tree.DefaultMutableTreeNode.remove +javax.swing.tree.DefaultMutableTreeNode.getNextLeaf +javax.swing.tree.DefaultMutableTreeNode.getChildAfter +javax.swing.tree.DefaultTreeCellRenderer.getBackgroundSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.getOpenIcon +javax.swing.tree.DefaultTreeCellRenderer.getClosedIcon +javax.swing.tree.DefaultTreeCellRenderer.setOpenIcon +javax.swing.tree.DefaultTreeCellRenderer.constructor +javax.swing.tree.DefaultTreeCellRenderer.getLeafIcon +javax.swing.tree.DefaultTreeCellRenderer.getBorderSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.setLeafIcon +javax.swing.tree.DefaultTreeCellRenderer.getDefaultLeafIcon +javax.swing.tree.DefaultTreeCellRenderer.setBackgroundSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.getDefaultOpenIcon +javax.swing.tree.DefaultTreeCellRenderer.getDefaultClosedIcon +javax.swing.tree.DefaultTreeCellRenderer.setBackgroundNonSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.setBorderSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.getBackgroundNonSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.setClosedIcon +javax.swing.tree.VariableHeightLayoutCache.getBounds +javax.swing.BoxLayout.layoutContainer +javax.swing.BoxLayout.invalidateLayout +javax.swing.BoxLayout.constructor +javax.swing.BoxLayout.simplevertical +javax.swing.BoxLayout.maximumLayoutSize2 +javax.swing.BoxLayout.getLayoutAlignmentY +javax.swing.BoxLayout.horizontal2 +javax.swing.BoxLayout.getLayoutAlignmentX +javax.swing.BoxLayout.simplehorizontal +javax.swing.BoxLayout.constants +javax.swing.BoxLayout.preferredLayoutSize +javax.swing.BoxLayout.minimumLayoutSize +javax.swing.BoxLayout.maximumLayoutSize +javax.swing.JApplet.isRootPaneCheckingEnabled +javax.swing.DefaultBoundedRangeModel.setValueIsAdjusting +javax.swing.DefaultBoundedRangeModel.setMinimum +javax.swing.DefaultBoundedRangeModel.serialization +javax.swing.DefaultBoundedRangeModel.setValue +javax.swing.DefaultBoundedRangeModel.setMaximum +javax.swing.DefaultBoundedRangeModel.setExtent +javax.swing.DefaultBoundedRangeModel.getChangeListeners +javax.swing.DefaultBoundedRangeModel.getValue +javax.swing.DefaultBoundedRangeModel.setRangeProperties +javax.swing.DefaultBoundedRangeModel.getMaximum +javax.swing.DefaultBoundedRangeModel.getValueIsAdjusting +javax.swing.DefaultBoundedRangeModel.getMinimum +javax.swing.DefaultBoundedRangeModel.general +javax.swing.DefaultBoundedRangeModel.toString +javax.swing.DefaultBoundedRangeModel.getExtent +javax.swing.undo.UndoableEditSupport.getUndoableEditListeners +javax.swing.undo.UndoableEditSupport.createCompoundEdit +javax.swing.undo.UndoableEditSupport.toString +javax.swing.undo.UndoableEditSupport.beginUpdate +javax.swing.undo.UndoableEditSupport.UndoableEditSupport +javax.swing.undo.UndoableEditSupport.getUpdateLevel +javax.swing.undo.CompoundEdit.lastEdit +javax.swing.undo.CompoundEdit.addEdit +javax.swing.undo.CompoundEdit.canRedo +javax.swing.undo.CompoundEdit.canUndo +javax.swing.undo.CompoundEdit.isInProgress +javax.swing.undo.AbstractUndoableEdit.getRedoPresentationName +javax.swing.undo.AbstractUndoableEdit.addEdit +javax.swing.undo.AbstractUndoableEdit.canRedo +javax.swing.undo.AbstractUndoableEdit.redo +javax.swing.undo.AbstractUndoableEdit.undo +javax.swing.undo.AbstractUndoableEdit.canUndo +javax.swing.undo.AbstractUndoableEdit.getPresentationName +javax.swing.undo.AbstractUndoableEdit.replaceEdit +javax.swing.undo.AbstractUndoableEdit.isSignificant +javax.swing.undo.AbstractUndoableEdit.getUndoPresentationName +javax.swing.undo.StateEdit.undo +javax.swing.undo.StateEdit.getPresentationName +javax.swing.undo.UndoManager.getRedoPresentationName +javax.swing.undo.UndoManager.getUndoOrRedoPresentationName +javax.swing.undo.UndoManager.addEdit +javax.swing.undo.UndoManager.canRedo +javax.swing.undo.UndoManager.trimEdits +javax.swing.undo.UndoManager.undoTo +javax.swing.undo.UndoManager.editToBeUndone +javax.swing.undo.UndoManager.canUndo +javax.swing.undo.UndoManager.undoableEditHappened +javax.swing.undo.UndoManager.setLimit +javax.swing.undo.UndoManager.discardAllEdits +javax.swing.undo.UndoManager.redoTo +javax.swing.undo.UndoManager.end +javax.swing.undo.UndoManager.toString +javax.swing.undo.UndoManager.getUndoPresentationName +javax.swing.undo.UndoManager.getLimit +javax.swing.undo.UndoManager.editToBeRedone +javax.swing.undo.UndoManager.canUndoOrRedo +javax.swing.JMenuItem.getActionCommand +javax.swing.JMenuItem.constructors +javax.swing.DefaultComboBoxModel.removeAllElements +javax.swing.DefaultComboBoxModel.insertElementAt +javax.swing.DefaultComboBoxModel.getIndexOf +javax.swing.DefaultComboBoxModel.getSize +javax.swing.DefaultComboBoxModel.constructors +javax.swing.DefaultComboBoxModel.removeElementAt +javax.swing.DefaultComboBoxModel.getSelectedItem +javax.swing.DefaultComboBoxModel.getElementAt +javax.swing.DefaultComboBoxModel.addElement +javax.swing.DefaultComboBoxModel.removeElement +javax.swing.SizeSequence.getIndex +javax.swing.SizeSequence.getSizes +javax.swing.SizeSequence.removeEntries +javax.swing.SizeSequence.setSizes +javax.swing.SizeSequence.setSize +javax.swing.SizeSequence.getSize +javax.swing.SizeSequence.constructors +javax.swing.SizeSequence.insertEntries +javax.swing.JTextField.CopyPaste +javax.swing.JTextField.createDefaultModel +javax.swing.JTextField.setDocument +javax.swing.JTextField.fireActionPerformed +javax.swing.UIDefaults.putDefaults +javax.swing.UIDefaults.getBoolean +javax.swing.UIDefaults.remove +javax.swing.RepaintManager.addDirtyRegion +javax.swing.JInternalFrame.AccessibleJInternalFrame.getAccessibleName +javax.swing.JInternalFrame.AccessibleJInternalFrame.getCurrentAccessibleValue +javax.swing.JInternalFrame.AccessibleJInternalFrame.getMaximumAccessibleValue +javax.swing.JInternalFrame.AccessibleJInternalFrame.setCurrentAccessibleValue +javax.swing.JInternalFrame.AccessibleJInternalFrame.getAccessibleRole +javax.swing.JInternalFrame.AccessibleJInternalFrame.getAccessibleValue +javax.swing.JInternalFrame.AccessibleJInternalFrame.getMinimumAccessibleValue +javax.swing.JInternalFrame.getDesktopIcon +javax.swing.JInternalFrame.isRootPaneCheckingEnabled +javax.swing.JInternalFrame.setDefaultCloseOperation +javax.swing.JInternalFrame.isIconifiable +javax.swing.JInternalFrame.setTitle +javax.swing.JInternalFrame.setClosable +javax.swing.JInternalFrame.setResizable +javax.swing.JInternalFrame.setIconifiable +javax.swing.JInternalFrame.setFrameIcon +javax.swing.JInternalFrame.setMaximizable +javax.swing.JInternalFrame.getInputMap +javax.swing.JInternalFrame.setClosed +javax.swing.JInternalFrame.setNormalBounds +javax.swing.JInternalFrame.setSelected2 +javax.swing.JInternalFrame.dispose +javax.swing.JInternalFrame.isResizable +javax.swing.JInternalFrame.constructors +javax.swing.JInternalFrame.paramString +javax.swing.JInternalFrame.setDesktopIcon +javax.swing.JInternalFrame.getNormalBounds +javax.swing.SpinnerListModel.Constructors +javax.swing.SpinnerListModel.Ordering +javax.swing.SpinnerListModel.SetList +javax.swing.SpinnerListModel.ArrayModel +javax.swing.SpinnerListModel.ListModel +javax.swing.JRadioButtonMenuItem.isFocusable +javax.swing.JRadioButtonMenuItem.uidelegate +javax.swing.JRadioButtonMenuItem.getActionCommand +javax.swing.JRadioButtonMenuItem.model +javax.swing.KeyStroke.getKeyStroke +javax.swing.SpinnerNumberModel.getPreviousValue +javax.swing.SpinnerNumberModel.setMinimum +javax.swing.SpinnerNumberModel.setValue +javax.swing.SpinnerNumberModel.setMaximum +javax.swing.SpinnerNumberModel.getNextValue +javax.swing.SpinnerNumberModel.setStepSize +javax.swing.SpinnerNumberModel.constructors +javax.swing.JLabel.AccessibleJLabel.getAccessibleName +javax.swing.JLabel.setDisplayedMnemonicIndex +javax.swing.JLabel.constructor +javax.swing.JLabel.getAccessibleContext +javax.swing.JLabel.Icon +javax.swing.JLabel.getInputMap +javax.swing.JLabel.setHorizontalAlignment +javax.swing.JLabel.setFont +javax.swing.JLabel.setDisplayedMnemonic +javax.swing.JLabel.getActionMap +javax.swing.JLabel.Mnemonic +javax.swing.JLabel.paramString +javax.swing.JLabel.setVerticalAlignment +javax.swing.JEditorPane.ContentType +javax.swing.JEditorPane.ViewType +javax.swing.JEditorPane.setText +javax.swing.JEditorPane.getScrollableTracks +javax.swing.DefaultListSelectionModel.clone +javax.swing.DefaultListSelectionModel.getListeners +javax.swing.DefaultListSelectionModel.setValueIsAdjusting +javax.swing.DefaultListSelectionModel.setAnchorSelectionIndex +javax.swing.DefaultListSelectionModel.removeListSelectionListener +javax.swing.DefaultListSelectionModel.constructor +javax.swing.DefaultListSelectionModel.removeIndexInterval +javax.swing.DefaultListSelectionModel.removeSelectionInterval +javax.swing.DefaultListSelectionModel.getAnchorSelectionIndex +javax.swing.DefaultListSelectionModel.getLeadSelectionIndex +javax.swing.DefaultListSelectionModel.isLeadAnchorNotificationEnabled +javax.swing.DefaultListSelectionModel.setSelectionInterval +javax.swing.DefaultListSelectionModel.getSelectionMode +javax.swing.DefaultListSelectionModel.isSelectedIndex +javax.swing.DefaultListSelectionModel.moveLeadSelectionIndex +javax.swing.DefaultListSelectionModel.leadSelectionIndex +javax.swing.DefaultListSelectionModel.getMaxSelectionIndex +javax.swing.DefaultListSelectionModel.getMinSelectionIndex +javax.swing.DefaultListSelectionModel.getListSelectionListeners +javax.swing.DefaultListSelectionModel.getValueIsAdjusting +javax.swing.DefaultListSelectionModel.isSelectionEmpty +javax.swing.DefaultListSelectionModel.addSelectionInterval +javax.swing.DefaultListSelectionModel.setLeadSelectionIndex +javax.swing.DefaultListSelectionModel.toString +javax.swing.DefaultListSelectionModel.setSelectionMode +javax.swing.DefaultListSelectionModel.clearSelection +javax.swing.DefaultListSelectionModel.insertIndexInterval +javax.swing.DefaultListSelectionModel.addListSelectionListener +javax.swing.SwingUtilities.calculateInnerArea +javax.swing.SwingUtilities.isRectangleContainingRectangle +javax.swing.SwingUtilities.computeIntersection +javax.swing.SwingUtilities.replaceUIActionMap +javax.swing.SwingUtilities.computeUnion +javax.swing.JSpinner.ListEditor.constructor +javax.swing.JSpinner.ListEditor.getModel +javax.swing.JSpinner.NumberEditor.getModel +javax.swing.JSpinner.NumberEditor.constructors +javax.swing.JSpinner.NumberEditor.getFormat +javax.swing.JSpinner.DefaultEditor.constructor +javax.swing.JSpinner.DefaultEditor.stateChanged +javax.swing.JSpinner.DefaultEditor.propertyChange +javax.swing.JSpinner.DefaultEditor.preferredLayoutSize +javax.swing.JSpinner.DefaultEditor.minimumLayoutSize +javax.swing.JSpinner.DateEditor.getModel +javax.swing.JSpinner.getPreviousValue +javax.swing.JSpinner.addChangeListener +javax.swing.JSpinner.createEditor +javax.swing.JSpinner.getChangeListeners +javax.swing.JSpinner.setEditor +javax.swing.JSpinner.getUIClassID +javax.swing.JSpinner.getEditor +javax.swing.JSpinner.setModel +javax.swing.JSpinner.getNextValue +javax.swing.JSpinner.getModel +javax.swing.JSpinner.constructors +javax.swing.JSpinner.removeChangeListener +javax.swing.ButtonGroup.constructor +javax.swing.ButtonGroup.add +javax.swing.ButtonGroup.isSelected +javax.swing.ButtonGroup.getSelection +javax.swing.ButtonGroup.getElements +javax.swing.ButtonGroup.getButtonCount +javax.swing.ButtonGroup.setSelected +javax.swing.ButtonGroup.remove +javax.swing.JViewport.setView +gnu.javax.crypto.jce.TestOfDHKeyAgreement2 +gnu.javax.crypto.jce.TestOfPR27849 +gnu.javax.crypto.jce.TestOfPR27228 +java.rmi.server.Uniqueness +java.lang.Integer.compareTo +java.lang.Integer.decode +java.lang.Integer.new_Integer +java.lang.Integer.IntegerTest +java.lang.Integer.getInteger +java.lang.Integer.parseInt +java.lang.ClassLoader.redefine +java.lang.ClassLoader.security +java.lang.ClassLoader.loadClass +java.lang.ClassLoader.initialize +java.lang.ClassLoader.Resources +java.lang.ClassLoader.BootDefinedPackages +java.lang.Number.NumberTest +java.lang.ProcessBuilder.simple +java.lang.System.getProperty +java.lang.System.arraycopy +java.lang.System.identityHashCode +java.lang.ThreadGroup.enumerate +java.lang.ThreadGroup.insecurity +java.lang.ThreadGroup.security +java.lang.String.substring +java.lang.String.compareTo +java.lang.String.getBytes13 +java.lang.String.hash +java.lang.String.split +java.lang.String.getBytes14 +java.lang.String.startsWith +java.lang.String.equals +java.lang.String.indexOf +java.lang.String.to +java.lang.String.StringTest +java.lang.String.surrogate +java.lang.String.charAt +java.lang.String.new_String +java.lang.String.getBytes +java.lang.String.CASE_INSENSITIVE_ORDER +java.lang.Class.ClassTest +java.lang.Class.serialization +java.lang.Class.reflect +java.lang.Class.security +java.lang.Class.init +java.lang.Class.newInstance +java.lang.Class.reflect2 +java.lang.Cloneable.CloneableTest +java.lang.ref.WeakReference.weakref +java.lang.ref.PhantomReference.phantom +java.lang.Double.compareTo +java.lang.Double.DoubleSetterTest +java.lang.Double.DoubleTest +java.lang.Double.toHexString +java.lang.Double.parseDouble +java.lang.Double.compare +java.lang.Double.valueOf +java.lang.StrictMath.cbrt +java.lang.StrictMath.expm1 +java.lang.StrictMath.cosh +java.lang.StrictMath.sinh +java.lang.StrictMath.tanh +java.lang.Short.hash +java.lang.Short.ShortTest +java.lang.InheritableThreadLocal.simple +java.lang.Math.max +java.lang.Math.ulp +java.lang.Math.sin +java.lang.Math.min +java.lang.Math.cos +java.lang.Math.MathTest +java.lang.Math.rint +java.lang.Boolean.BooleanTest +java.lang.Boolean.equals_Boolean +java.lang.Boolean.new_Boolean +java.lang.Boolean.hashcode_Boolean +java.lang.Boolean.get +java.lang.Boolean.value +java.lang.Float.compareTo +java.lang.Float.toHexString +java.lang.Float.compare +java.lang.Float.parseFloat +java.lang.Float.valueOf +java.lang.Float.FloatTest +java.lang.Float.new_Float +java.lang.reflect.Array.set +java.lang.reflect.Array.newInstance +java.lang.reflect.AccessibleObject.accessible +java.lang.reflect.Field.promotion +java.lang.reflect.Field.access +java.lang.reflect.Field.toString +java.lang.reflect.Modifier.toString12 +java.lang.reflect.Modifier.toString +java.lang.reflect.Constructor.newInstance +java.lang.reflect.Constructor.toString +java.lang.reflect.Proxy.DeclaringClass +java.lang.reflect.Proxy.check13 +java.lang.reflect.Proxy.ExceptionRaising +java.lang.reflect.Proxy.ToString +java.lang.reflect.InvocationTargetException.Chain +java.lang.reflect.Method.equals +java.lang.reflect.Method.toString +java.lang.reflect.Method.invoke +java.lang.reflect.ReflectAccess +java.lang.ThreadLocal.simple +java.lang.Object.clone +java.lang.Object.wait +java.lang.Object.ObjectTest +java.lang.Object.oom +java.lang.Byte.ByteTest +java.lang.Byte.new_Byte +java.lang.StringBuffer.StringBufferTest +java.lang.StringBuffer.plus +java.lang.Long.Tests15 +java.lang.Long.getLong +java.lang.Long.LongTest +java.lang.Long.new_Long +java.lang.Thread.join +java.lang.Thread.isAlive +java.lang.Thread.name +java.lang.Thread.interrupt +java.lang.Thread.contextClassLoader +java.lang.Thread.getThreadGroup +java.lang.Thread.priority +java.lang.Thread.stop +java.lang.Thread.daemon +java.lang.Package.getPackage +java.lang.Character.digit +java.lang.Character.Blocks +java.lang.Character.unicode +java.lang.Character.getNumericValue +java.lang.Character.getType +java.lang.Character.hash +java.lang.Character.classify +java.lang.Character.classify12 +java.lang.Character.to +java.lang.Character.consts +java.lang.Character.forDigit +java.lang.Character.getType12 +java.lang.Character.equals_Character +java.lang.Character.CharacterTest +java.lang.Character.Blocks15 +java.lang.SecurityManager.thread +java.text.StringCharacterIterator.constructor +java.text.StringCharacterIterator.iter +java.text.CollationElementIterator.offset +java.text.CollationElementIterator.jdk11 +java.text.AttributedString.constructors +java.text.AttributedString.addAttribute +java.text.AttributedString.getIterator +java.text.AttributedString.addAttributes +java.text.AttributedString.Test +java.text.DecimalFormat.setCurrency +java.text.DecimalFormat.clone +java.text.DecimalFormat.setDecimalFormatSymbols +java.text.DecimalFormat.getNegativePrefix +java.text.DecimalFormat.applyPattern +java.text.DecimalFormat.formatToCharacterIterator +java.text.DecimalFormat.getNegativeSuffix +java.text.DecimalFormat.setNegativePrefix +java.text.DecimalFormat.applyLocalizedPattern +java.text.DecimalFormat.getDecimalFormatSymbols +java.text.DecimalFormat.toLocalizedPattern +java.text.DecimalFormat.isDecimalSeparatorAlwaysShown +java.text.DecimalFormat.setNegativeSuffix +java.text.DecimalFormat.PR27311 +java.text.DecimalFormat.getPositivePrefix +java.text.DecimalFormat.getCurrency +java.text.DecimalFormat.equals +java.text.DecimalFormat.digits +java.text.DecimalFormat.setDecimalSeparatorAlwaysShown +java.text.DecimalFormat.setPositiveSuffix +java.text.DecimalFormat.parse +java.text.DecimalFormat.setPositivePrefix +java.text.DecimalFormat.toPattern14 +java.text.DecimalFormat.setMultiplier +java.text.DecimalFormat.format +java.text.DecimalFormat.getPositiveSuffix +java.text.DecimalFormat.setGroupingSize +java.text.DecimalFormat.PR23996 +java.text.DecimalFormat.toPattern +java.text.DecimalFormat.constructors +java.text.DecimalFormat.MaximumAndMinimumDigits +java.text.DecimalFormat.formatExp +java.text.DecimalFormat.getGroupingSize +java.text.DecimalFormat.hashCode +java.text.DecimalFormat.position +java.text.DecimalFormat.getMultiplier +java.text.NumberFormat.UK +java.text.CharacterIterator.implement +java.text.ParsePosition.Test +java.text.BreakIterator.chariter +java.text.BreakIterator.patho +java.text.BreakIterator.lineiter +java.text.BreakIterator.sentiter +java.text.BreakIterator.worditer +java.text.Collator.Constants +java.text.Collator.GetSet +java.text.ParseException.Test +java.text.Annotation.Test +java.text.RuleBasedCollator.CollatorTests +java.text.RuleBasedCollator.VeryBasic +java.text.MessageFormat.format14 +java.text.MessageFormat.attribute +java.text.MessageFormat.parse +java.text.MessageFormat.format +java.text.ChoiceFormat.next +java.text.ChoiceFormat.parse +java.text.ChoiceFormat.format +java.text.DateFormatSymbols.setMonths +java.text.DateFormatSymbols.setShortMonths +java.text.DateFormatSymbols.setEras +java.text.DateFormatSymbols.setAmPmStrings +java.text.DateFormatSymbols.setWeekdays +java.text.DateFormatSymbols.setZoneStrings +java.text.DateFormatSymbols.setShortWeekdays +java.text.DateFormatSymbols.Test +java.text.AttributedCharacterIterator.Attribute.toString +java.text.AttributedCharacterIterator.getRunLimit +java.text.AttributedCharacterIterator.implement +java.text.AttributedCharacterIterator.getRunStart +java.text.AttributedCharacterIterator.getAttribute +java.text.DateFormat.equals +java.text.DateFormat.hashCode +java.text.DateFormat.Test +java.text.ACIAttribute.Test +java.text.DecimalFormatSymbols.serial +java.text.DecimalFormatSymbols.GetSet12 +java.text.DecimalFormatSymbols.getCurrency +java.text.DecimalFormatSymbols.DumpDefault11 +java.text.DecimalFormatSymbols.GetSet11 +java.text.DecimalFormatSymbols.DumpDefault12 +java.text.FieldPosition.Test +java.text.SimpleDateFormat.applyPattern +java.text.SimpleDateFormat.Localization +java.text.SimpleDateFormat.applyLocalizedPattern +java.text.SimpleDateFormat.toLocalizedPattern +java.text.SimpleDateFormat.attribute +java.text.SimpleDateFormat.Cloning +java.text.SimpleDateFormat.getDateFormatSymbols +java.text.SimpleDateFormat.parse +java.text.SimpleDateFormat.toPattern +java.text.SimpleDateFormat.constructors +java.text.SimpleDateFormat.setDateFormatSymbols +java.text.SimpleDateFormat.getAndSet2DigitYearStart +java.text.SimpleDateFormat.Test +java.text.Bidi.Basic +java.text.Bidi.reorderVisually +java.math.BigInteger.compareTo +java.math.BigInteger.modInverse +java.math.BigInteger.shift +java.math.BigInteger.serialization +java.math.BigInteger.add +java.math.BigInteger.TestOfPR27372 +java.math.BigInteger.signum +java.math.BigInteger.modPow +java.math.BigInteger.equals +java.math.BigInteger.divide +java.math.BigInteger.setBit +java.math.BigInteger.multiply +java.math.BigInteger.TestOfToByteArray +java.math.BigInteger.toString +java.math.BigInteger.ctor +java.math.BigInteger.abs +java.math.BigInteger.valueOf +java.math.BigDecimal.compareTo +java.math.BigDecimal.divide +java.math.BigDecimal.DiagBigDecimal +java.math.BigDecimal.construct +java.math.BigDecimal.setScale +java.security.MessageDigest.Instance +java.security.AccessController.doPrivileged +java.security.AccessController.contexts +java.security.Security.getAlgorithms +java.security.Security.provider +java.security.Provider.NameVersionInfo +java.security.SecureRandom.SHA1PRNG +java.security.SecureRandom.TestOfPR23899 +java.security.SecureRandom.Instance +java.security.KeyPairGenerator.getInstance14 +java.security.AlgorithmParameters.getInstance14 +java.security.AlgorithmParameterGenerator.getInstance14 +java.security.DigestInputStream.readMD5 +java.security.KeyFactory.getInstance14 +java.security.Signature.getInstance14 +java.security.Signature.Instance +java.security.BasicPermission.newPermission +java.sql.Clob.ClobTest +java.sql.Types.TestJdbc10 +java.sql.Types.TestJdbc20 +java.sql.Array.ArrayTest +java.sql.Blob.BlobTest +java.sql.Connection.TestJdbc +java.sql.Time.TimeTest +java.sql.DriverManager.DriverManagerTest +java.sql.Date.DateTest +java.sql.DatabaseMetaData.TestJdbc +java.sql.Timestamp.TimestampTest +java.io.RandomAccessFile.setLength +java.io.RandomAccessFile.security +java.io.RandomAccessFile.jdk11 +java.io.RandomAccessFile.randomaccessfile +java.io.BufferedWriter.Test +java.io.PipedReaderWriter.Test +java.io.PushbackInputStream.ProtectedVars +java.io.PushbackInputStream.BufferOverflow +java.io.PushbackInputStream.Unread +java.io.FileOutputStream.append +java.io.FileOutputStream.fileoutputstream +java.io.FileOutputStream.security +java.io.FileOutputStream.write +java.io.FileOutputStream.jdk12 +java.io.StringWriter.Test +java.io.FilterOutputStream.write +java.io.ObjectInputStream.security +java.io.ObjectInputStream.readResolve +java.io.ObjectInputStream.ClassLoaderTest +java.io.ObjectOutputStream.security +java.io.ObjectOutputStream.StreamDataTest +java.io.ObjectOutputStream.useProtocolVersion +java.io.InputStream.Test +java.io.Utf8Encoding.ReadReference +java.io.Utf8Encoding.WriteRead +java.io.FilePermission.traversal2 +java.io.FilePermission.simple +java.io.FilePermission.traversal +java.io.FileWriter.jdk11 +java.io.OutputStreamWriter.jdk11 +java.io.Serializable.BreakMe +java.io.Serializable.BreakMeTestSer +java.io.Serializable.ParentReadResolve +java.io.Serializable.readResolve +java.io.Serializable.ParentWriteReplace +java.io.ObjectInputOutput.LoopSerializationTest +java.io.ObjectInputOutput.ExtTest +java.io.ObjectInputOutput.Deserializable +java.io.ObjectInputOutput.ProxySerializationTest +java.io.ObjectInputOutput.Compat1 +java.io.ObjectInputOutput.SerTest +java.io.ObjectInputOutput.HierarchyTest +java.io.ObjectInputOutput.OutputTest +java.io.ObjectInputOutput.InputTest +java.io.PrintWriter.jdk11 +java.io.PrintWriter.checkError +java.io.SequenceInputStream.Test +java.io.StringBufferInputStream.ProtectedVars +java.io.StringBufferInputStream.SimpleRead +java.io.StringBufferInputStream.MarkReset +java.io.LineNumberReader.Test2 +java.io.LineNumberReader.mark +java.io.LineNumberReader.Test +java.io.InputStreamReader.hang +java.io.InputStreamReader.utf8 +java.io.InputStreamReader.jdk11 +java.io.InputStreamReader.except +java.io.InputStreamReader.getEncoding +java.io.DataInputStream.readLine +java.io.DataInputStream.ReadReference +java.io.DataInputStream.ReadReference2 +java.io.FilterWriter.write +java.io.CharArrayWriter.ProtectedVars +java.io.CharArrayWriter.BasicTests +java.io.FileDescriptor.jdk11 +java.io.Reader.Test +java.io.PushbackReader.BufferOverflow +java.io.PushbackReader.Unread +java.io.ByteArrayOutputStream.subclass +java.io.ByteArrayOutputStream.write +java.io.PrintStream.subclass +java.io.PrintStream.encodings +java.io.ObjectStreamClass.ProxyTest +java.io.ObjectStreamClass.Test +java.io.FilterReader.SimpleRead +java.io.FilterReader.MarkReset +java.io.BufferedOutputStream.interrupt +java.io.BufferedOutputStream.Test +java.io.BufferedInputStream.Skip +java.io.BufferedInputStream.BigMark +java.io.BufferedInputStream.ProtectedVars +java.io.BufferedInputStream.ZeroRead +java.io.BufferedInputStream.SimpleRead +java.io.BufferedInputStream.MarkReset +java.io.BufferedReader.mark +java.io.BufferedReader.SimpleRead +java.io.BufferedReader.MarkReset +java.io.BufferedReader.boundary +java.io.DataOutputStream.WriteRead2 +java.io.DataOutputStream.writeUTF +java.io.DataOutputStream.WriteRead +java.io.PipedStream.close +java.io.PipedStream.receive +java.io.PipedStream.Test +java.io.FileInputStream.fileinputstream +java.io.FileInputStream.read +java.io.FileInputStream.security +java.io.Writer.Test +java.io.FilterInputStream.SimpleRead +java.io.FilterInputStream.MarkReset +java.io.FileReader.jdk11 +java.io.StringReader.Test +java.io.ByteArrayInputStream.ProtectedVars +java.io.ByteArrayInputStream.SimpleRead +java.io.ByteArrayInputStream.MarkReset +java.io.File.newFileURI +java.io.File.URI +java.io.File.createFile +java.io.File.security +java.io.File.ReadMethods +java.io.File.ExecuteMethods +java.io.File.list +java.io.File.jdk11 +java.io.File.newFile +java.io.File.WriteMethods +java.io.File.canWrite +java.io.File.listFiles +java.io.File.emptyFile +java.io.File.UnicodeURI +java.io.OutputStream.Test +java.io.StreamTokenizer.WordWhiteChars +java.io.StreamTokenizer.slashstar +java.io.StreamTokenizer.commentchar +java.io.StreamTokenizer.slashslash +java.io.StreamTokenizer.newline +java.io.StreamTokenizer.misc +java.io.StreamTokenizer.Test +java.io.LineNumberInputStream.Test +java.io.CharArrayReader.ProtectedVars +java.io.CharArrayReader.OutOfBounds +java.io.CharArrayReader.SimpleRead +java.io.CharArrayReader.MarkReset +java.util.Stack.AcuniaStackTest +java.util.Arrays.asList +java.util.Arrays.fill +java.util.Arrays.equals +java.util.Arrays.sort +java.util.Arrays.binarySearch +java.util.Properties.getProperty +java.util.Properties.AcuniaPropertiesTest +java.util.Properties.load +java.util.TreeSet.basic +java.util.Observable.observable +java.util.StringTokenizer.hasMoreElements +java.util.StringTokenizer.hasMoreTokens +java.util.StringTokenizer.countTokens +java.util.StringTokenizer.nextToken +java.util.StringTokenizer.constructors +java.util.StringTokenizer.nextElement +java.util.IdentityHashMap.simple +java.util.prefs.PreferenceTest +java.util.Hashtable.HashContains +java.util.Hashtable.AcuniaHashtableTest +java.util.Hashtable.EnumerateAndModify +java.util.Hashtable.basic +java.util.Hashtable.ContainsHash +java.util.Hashtable.NullValue +java.util.TreeMap.serialization +java.util.TimeZone.setDefault +java.util.TimeZone.zdump +java.util.TimeZone.setID +java.util.UUID.TestAll +java.util.Currency.Constructors +java.util.Currency.Germany +java.util.Currency.ReferenceEquality +java.util.Currency.France +java.util.Currency.getInstance +java.util.Currency.Japan +java.util.Currency.UK +java.util.Currency.Korea +java.util.Currency.PRC +java.util.Currency.Canada +java.util.Currency.CanadaFrench +java.util.Currency.China +java.util.Currency.Taiwan +java.util.Currency.Italy +java.util.AbstractCollection.AcuniaAbstractCollectionTest +java.util.AbstractCollection.AcuniaAddCollectionTest +java.util.AbstractCollection.toString +java.util.SimpleTimeZone.clone +java.util.SimpleTimeZone.hasSameRules +java.util.SimpleTimeZone.getRawOffset +java.util.SimpleTimeZone.setRawOffset +java.util.SimpleTimeZone.check14 +java.util.SimpleTimeZone.equals +java.util.SimpleTimeZone.inDaylightTime +java.util.SimpleTimeZone.setStartYear +java.util.SimpleTimeZone.constructors +java.util.SimpleTimeZone.getOffset +java.util.SimpleTimeZone.setDSTSavings +java.util.SimpleTimeZone.hashCode +java.util.SimpleTimeZone.constants +java.util.SimpleTimeZone.getDSTSavings +java.util.AbstractList.AcuniaAbstractListTest +java.util.Collections.nCopies +java.util.Collections.fill +java.util.Collections.max +java.util.Collections.copy +java.util.Collections.rotate +java.util.Collections.unmodifiableList +java.util.Collections.min +java.util.Collections.unmodifiableMap +java.util.Collections.reverse +java.util.Collections.reverseOrder +java.util.Collections.sort +java.util.Collections.binarySearch +java.util.logging.SocketHandler.SocketHandler +java.util.logging.XMLFormatter.getTail +java.util.logging.Handler.isLoggable +java.util.logging.Handler.setEncoding +java.util.logging.Handler.setFilter +java.util.logging.Handler.getErrorManager +java.util.logging.Handler.reportError +java.util.logging.Handler.setLevel +java.util.logging.Handler.setErrorManager +java.util.logging.LogRecord.getThreadID +java.util.logging.LogRecord.setLoggerName +java.util.logging.LogRecord.getMillis +java.util.logging.LogRecord.setThrown +java.util.logging.LogRecord.setThreadID +java.util.logging.LogRecord.setSequenceNumber +java.util.logging.LogRecord.setSourceMethodName +java.util.logging.LogRecord.setResourceBundle +java.util.logging.LogRecord.setMillis +java.util.logging.LogRecord.setMessage +java.util.logging.LogRecord.setParameters +java.util.logging.LogRecord.setSourceClassName +java.util.logging.LogRecord.setLevel +java.util.logging.Level.intValue +java.util.logging.Level.equals +java.util.logging.Level.getName +java.util.logging.Level.parse +java.util.logging.Level.toString +java.util.logging.Level.hashCode +java.util.logging.LogManager.readConfiguration +java.util.logging.LoggingMXBean.Test +java.util.logging.Logger.hierarchyChecks +java.util.logging.Logger.getName +java.util.logging.Logger.getAnonymousLogger +java.util.logging.Logger.securityChecks +java.util.logging.Logger.getParent +java.util.logging.Logger.global +java.util.Iterator.ConcurrentModification +java.util.BitSet.AcuniaBitSetTest +java.util.BitSet.flip +java.util.BitSet.jdk10 +java.util.BitSet.get +java.util.BitSet.clear +java.util.Timer.taskException +java.util.GregorianCalendar.first +java.util.GregorianCalendar.setFirstDayOfWeek +java.util.GregorianCalendar.dayOfWeekInMonth +java.util.GregorianCalendar.setWeekOfMonth +java.util.GregorianCalendar.internal +java.util.GregorianCalendar.equals +java.util.GregorianCalendar.getMinimum +java.util.GregorianCalendar.getMinimalDaysInFirstWeek +java.util.GregorianCalendar.conversion +java.util.GregorianCalendar.weekOfYear +java.util.Random.basic +java.util.AbstractSet.AcuniaAbstractSetTest +java.util.Calendar.TimeZone +java.util.Calendar.ampm +java.util.Calendar.add +java.util.Calendar.minmax +java.util.Calendar.setTime +java.util.Calendar.setTimeZone +java.util.Calendar.getInstance +java.util.Calendar.set +java.util.Calendar.simple +java.util.Calendar.roll +java.util.Calendar.dstOffset +java.util.regex.Matcher.hitEnd +java.util.regex.Pattern.UnicodeSimpleCategory +java.util.regex.Pattern.pcrematches +java.util.regex.Pattern.matches +java.util.regex.PatternSplit +java.util.regex.CharacterClasses +java.util.AbstractSequentialList.AcuniaAbstractSequentialListTest +java.util.LinkedList.subList +java.util.LinkedList.AcuniaLinkedListTest +java.util.LinkedList.SubListTest +java.util.HashMap.AcuniaHashMapTest +java.util.jar.JarInputStream.getNextEntry +java.util.jar.JarFile.TestOfManifest +java.util.jar.JarFile.basic +java.util.Vector.subList +java.util.Vector.copyInto +java.util.Vector.removeAll +java.util.Vector.retainAll +java.util.Vector.VectorSerialization +java.util.zip.ZipEntry.time +java.util.zip.ZipEntry.Size +java.util.zip.ZipEntry.newZipEntry +java.util.zip.ZipEntry.setComment +java.util.zip.ZipInputStream.close +java.util.zip.ZipInputStream.basic +java.util.zip.Deflater.PR27435 +java.util.zip.Adler32.checksum +java.util.zip.GZIPInputStream.PR24461 +java.util.zip.GZIPInputStream.basic +java.util.zip.InflaterInputStream.basic +java.util.zip.ZipFile.DirEntryTest +java.util.zip.ZipFile.NoEntryTest +java.util.zip.ZipFile.newZipFile +java.util.Date.compareTo +java.util.Date.clone +java.util.Date.before +java.util.Date.serialization +java.util.Date.range +java.util.Date.equals +java.util.Date.parse +java.util.Date.after +java.util.Date.getTimezoneOffset +java.util.LinkedHashMap.LinkedHashMapTest +java.util.LinkedHashMap.Regress +java.util.ArrayList.subList +java.util.ArrayList.serial +java.util.ResourceBundle.getBundle +java.util.AbstractMap.AcuniaAbstractMapTest +java.beans.XMLDecoder.jdk14 +java.beans.Expression.check +java.beans.Introspector.getBeanInfo2 +java.beans.Introspector.getBeanInfo4 +java.beans.Introspector.getBeanInfo +java.beans.Introspector.jdk11 +java.beans.Introspector.jdk12 +java.beans.Introspector.getBeanInfo2_2 +java.beans.DesignMode.constants +java.beans.PropertyEditorSupport.setValue +java.beans.PropertyEditorSupport.getSource +java.beans.SimpleBeanInfo.getIcon +java.beans.SimpleBeanInfo.getDefaultPropertyIndex +java.beans.SimpleBeanInfo.getEventSetDescriptors +java.beans.SimpleBeanInfo.getDefaultEventIndex +java.beans.SimpleBeanInfo.getBeanDescriptor +java.beans.SimpleBeanInfo.getAdditionalBeanInfo +java.beans.SimpleBeanInfo.loadImage +java.beans.EventSetDescriptor.constructorTest1 +java.beans.FeatureDescriptor.check +java.beans.beancontext.BeanContextSupport.toArray +java.beans.beancontext.BeanContextSupport.getChildPropertyChangeListener +java.beans.beancontext.BeanContextSupport.serialize +java.beans.beancontext.BeanContextSupport.getChildBeanContextChild +java.beans.beancontext.BeanContextSupport.getChildBeanContextMembershipListener +java.beans.beancontext.BeanContextSupport.setDesignTime +java.beans.beancontext.BeanContextSupport.getChildVisibility +java.beans.beancontext.BeanContextSupport.constructors +java.beans.beancontext.BeanContextSupport.getChildVetoableChangeListener +java.beans.beancontext.BeanContextSupport.getChildSerializable +java.beans.beancontext.BeanContextSupport.getBeanContextPeer +java.beans.beancontext.BeanContextServicesSupport.getChildBeanContextServicesListener +java.beans.beancontext.InstantiateChild +java.beans.beancontext.Remove +java.beans.beancontext.Array +java.beans.beancontext.Add +java.beans.PropertyChangeSupport.firePropertyChange +java.beans.VetoableChangeSupport.addVetoableChangeListener +java.beans.Statement.check +java.beans.Beans.instantiate_1 +java.beans.EventHandler.check +java.beans.EventHandler.check14b +java.beans.PropertyDescriptor.constructorTest2 +java.beans.PropertyDescriptor.constructorTest1 +java.beans.MethodDescriptor.constructorTest1 +java.awt.AWTEvent.constants +java.awt.CardLayout.show +java.awt.CardLayout.first +java.awt.CardLayout.testMaximumLayoutSize +java.awt.CardLayout.testMinimumLayoutSize +java.awt.Graphics.clearRect +java.awt.Polygon.contains +java.awt.Polygon.getPathIterator +java.awt.BasicStroke.equals +java.awt.BasicStroke.constructors +java.awt.BasicStroke.hashCode +java.awt.BasicStroke.constants +java.awt.Graphics2D.setClip +java.awt.Graphics2D.getClip +java.awt.Graphics2D.getClipBounds +java.awt.Graphics2D.setTransform +java.awt.Graphics2D.clip +java.awt.Graphics2D.transform +java.awt.Point.move +java.awt.Point.clone +java.awt.Point.equals +java.awt.Point.constructors +java.awt.Point.setLocation +java.awt.Point.translate +java.awt.Point.getLocation +java.awt.event.ComponentEvent.paramString +java.awt.image.ShortLookupTable.getTable +java.awt.image.ShortLookupTable.lookupPixel +java.awt.image.ShortLookupTable.constructors +java.awt.image.PixelGrabber.SimpleGrabber +java.awt.image.PixelGrabber.testNullProducer +java.awt.image.ConvolveOp.getEdgeCondition +java.awt.image.ConvolveOp.getKernel +java.awt.image.ConvolveOp.filterRaster +java.awt.image.ConvolveOp.getRenderingHints +java.awt.image.ConvolveOp.getPoint2D +java.awt.image.ConvolveOp.createCompatibleDestRaster +java.awt.image.ConvolveOp.constructors +java.awt.image.ConvolveOp.getBounds2D +java.awt.image.ConvolveOp.constants +java.awt.image.IndexColorModel.getGreens +java.awt.image.IndexColorModel.getComponentSize +java.awt.image.IndexColorModel.getTransparentPixel +java.awt.image.IndexColorModel.getColorSpace +java.awt.image.IndexColorModel.getAlphas +java.awt.image.IndexColorModel.getPixelSize +java.awt.image.IndexColorModel.isValid +java.awt.image.IndexColorModel.constructors +java.awt.image.IndexColorModel.getBlues +java.awt.image.IndexColorModel.getReds +java.awt.image.IndexColorModel.getTransparency +java.awt.image.DataBuffer.getDataTypeSize +java.awt.image.DataBuffer.getOffset +java.awt.image.DataBuffer.constants +java.awt.image.DataBuffer.getOffsets +java.awt.image.DataBufferUShort.getData +java.awt.image.DataBufferUShort.getBankData +java.awt.image.DataBufferUShort.setElem +java.awt.image.DataBufferUShort.getElem +java.awt.image.DataBufferUShort.getDataType +java.awt.image.DataBufferUShort.constructors +java.awt.image.ComponentSampleModel.setPixels +java.awt.image.ComponentSampleModel.getPixelStride +java.awt.image.ComponentSampleModel.getDataElements +java.awt.image.ComponentSampleModel.getSample +java.awt.image.ComponentSampleModel.getBandOffsets +java.awt.image.ComponentSampleModel.equals +java.awt.image.ComponentSampleModel.getPixel +java.awt.image.ComponentSampleModel.getNumDataElements +java.awt.image.ComponentSampleModel.getSamples +java.awt.image.ComponentSampleModel.getSampleSize +java.awt.image.ComponentSampleModel.getSampleFloat +java.awt.image.ComponentSampleModel.setDataElements +java.awt.image.ComponentSampleModel.constructors +java.awt.image.ComponentSampleModel.setPixel +java.awt.image.ComponentSampleModel.createDataBuffer +java.awt.image.ComponentSampleModel.getOffset +java.awt.image.ComponentSampleModel.getSampleDouble +java.awt.image.ComponentSampleModel.createCompatibleSampleModel +java.awt.image.ComponentSampleModel.setSamples +java.awt.image.ComponentSampleModel.hashCode +java.awt.image.ComponentSampleModel.getPixels +java.awt.image.ComponentSampleModel.getScanlineStride +java.awt.image.ComponentSampleModel.createSubsetSampleModel +1 problem (1 error)java.awt.image.ColorModel.getComponentSize +java.awt.image.ColorModel.getRGBdefault +java.awt.image.ColorModel.constructors +java.awt.image.LookupTable.constructor +java.awt.image.LookupTable.getNumComponents +java.awt.image.RescaleOp.getScaleFactors +java.awt.image.RescaleOp.getRenderingHints +java.awt.image.RescaleOp.getPoint2D +java.awt.image.RescaleOp.constructors +java.awt.image.RescaleOp.getNumFactors +java.awt.image.RescaleOp.getOffsets +java.awt.image.DirectColorModel.coerceData +java.awt.image.WritableRaster.createChild +java.awt.image.WritableRaster.createWritableChild +java.awt.image.ComponentColorModel.coerceData +java.awt.image.SampleModel.setPixels +java.awt.image.SampleModel.getSample +java.awt.image.SampleModel.getPixel +java.awt.image.SampleModel.getSamples +java.awt.image.SampleModel.getSampleSize +java.awt.image.SampleModel.getSampleFloat +java.awt.image.SampleModel.setPixel +java.awt.image.SampleModel.setSample +java.awt.image.SampleModel.createDataBuffer +java.awt.image.SampleModel.getSampleDouble +java.awt.image.SampleModel.setSamples +java.awt.image.SampleModel.getPixels +java.awt.image.BandCombineOp.getPoint2D +java.awt.image.BandCombineOp.createCompatibleDestRaster +java.awt.image.BandCombineOp.getBounds2D +java.awt.image.BandCombineOp.filter +java.awt.image.LookupOp.constructor +java.awt.image.LookupOp.filterRaster +java.awt.image.LookupOp.getRenderingHints +java.awt.image.LookupOp.getTable +java.awt.image.LookupOp.getPoint2D +java.awt.image.Kernel.getYOrigin +java.awt.image.Kernel.constructor +java.awt.image.Kernel.getXOrigin +java.awt.image.Kernel.getHeight +java.awt.image.Kernel.check +java.awt.image.Kernel.getKernelData +java.awt.image.Kernel.getWidth +java.awt.image.BufferedImage.getSubimage +java.awt.image.BufferedImage.getSetRgb1Pixel +java.awt.image.DataBufferByte.getData +java.awt.image.DataBufferByte.getBankData +java.awt.image.DataBufferByte.setElem +java.awt.image.DataBufferByte.getElem +java.awt.image.DataBufferByte.getDataType +java.awt.image.DataBufferByte.constructors +java.awt.image.DataBufferShort.getData +java.awt.image.DataBufferShort.getBankData +java.awt.image.DataBufferShort.setElem +java.awt.image.DataBufferShort.getElem +java.awt.image.DataBufferShort.getDataType +java.awt.image.DataBufferShort.constructors +java.awt.image.Raster.createChild +java.awt.image.DataBufferInt.getData +java.awt.image.DataBufferInt.getBankData +java.awt.image.DataBufferInt.setElem +java.awt.image.DataBufferInt.getElem +java.awt.image.DataBufferInt.getDataType +java.awt.image.DataBufferInt.constructors +java.awt.image.SinglePixelPackedSampleModel.getBitOffsets +java.awt.image.SinglePixelPackedSampleModel.getDataElements +java.awt.image.SinglePixelPackedSampleModel.getSample +java.awt.image.SinglePixelPackedSampleModel.equals +java.awt.image.SinglePixelPackedSampleModel.getPixel +java.awt.image.SinglePixelPackedSampleModel.getNumDataElements +java.awt.image.SinglePixelPackedSampleModel.getSamples +java.awt.image.SinglePixelPackedSampleModel.getSampleSize +java.awt.image.SinglePixelPackedSampleModel.setDataElements +java.awt.image.SinglePixelPackedSampleModel.constructors +java.awt.image.SinglePixelPackedSampleModel.getBitMasks +java.awt.image.SinglePixelPackedSampleModel.setPixel +java.awt.image.SinglePixelPackedSampleModel.setSample +java.awt.image.SinglePixelPackedSampleModel.createDataBuffer +java.awt.image.SinglePixelPackedSampleModel.getOffset +java.awt.image.SinglePixelPackedSampleModel.createCompatibleSampleModel +java.awt.image.SinglePixelPackedSampleModel.hashCode +java.awt.image.SinglePixelPackedSampleModel.getPixels +java.awt.image.SinglePixelPackedSampleModel.getScanlineStride +java.awt.image.SinglePixelPackedSampleModel.createSubsetSampleModel +java.awt.image.ByteLookupTable.getTable +java.awt.image.ByteLookupTable.lookupPixel +java.awt.image.ByteLookupTable.constructors +java.awt.image.MultiPixelPackedSampleModel.getBitOffset +java.awt.image.MultiPixelPackedSampleModel.getTransferType +java.awt.image.MultiPixelPackedSampleModel.getDataElements +java.awt.image.MultiPixelPackedSampleModel.getSample +java.awt.image.MultiPixelPackedSampleModel.equals +java.awt.image.MultiPixelPackedSampleModel.getPixel +java.awt.image.MultiPixelPackedSampleModel.getSampleSize +java.awt.image.MultiPixelPackedSampleModel.setDataElements +java.awt.image.MultiPixelPackedSampleModel.constructors +java.awt.image.MultiPixelPackedSampleModel.setPixel +java.awt.image.MultiPixelPackedSampleModel.setSample +java.awt.image.MultiPixelPackedSampleModel.createDataBuffer +java.awt.image.MultiPixelPackedSampleModel.getPixelBitStride +java.awt.image.MultiPixelPackedSampleModel.getOffset +java.awt.image.MultiPixelPackedSampleModel.createCompatibleSampleModel +java.awt.image.MultiPixelPackedSampleModel.hashCode +java.awt.image.MultiPixelPackedSampleModel.getScanlineStride +java.awt.image.MultiPixelPackedSampleModel.createSubsetSampleModel +java.awt.image.AffineTransformOp.getPoint2D +java.awt.image.AffineTransformOp.createCompatibleDestRaster +java.awt.image.AffineTransformOp.constructors +java.awt.image.AffineTransformOp.getBounds2D +java.awt.image.PixelInterleavedSampleModel.createSubsetSampleModel +java.awt.image.BandedSampleModel.setPixels +java.awt.image.BandedSampleModel.getDataElements +java.awt.image.BandedSampleModel.getSample +java.awt.image.BandedSampleModel.getPixel +java.awt.image.BandedSampleModel.getSamples +java.awt.image.BandedSampleModel.getSampleFloat +java.awt.image.BandedSampleModel.setDataElements +java.awt.image.BandedSampleModel.constructors +java.awt.image.BandedSampleModel.setPixel +java.awt.image.BandedSampleModel.setSample +java.awt.image.BandedSampleModel.createDataBuffer +java.awt.image.BandedSampleModel.getSampleDouble +java.awt.image.BandedSampleModel.createCompatibleSampleModel +java.awt.image.BandedSampleModel.setSamples +java.awt.image.BandedSampleModel.hashCode +java.awt.image.BandedSampleModel.getPixels +java.awt.image.BandedSampleModel.createSubsetSampleModel +java.awt.image.ColorConvertOp.filterRaster +java.awt.image.ColorConvertOp.getPoint2D +java.awt.image.ColorConvertOp.createCompatibleDestRaster +java.awt.image.ColorConvertOp.constructors +java.awt.image.ColorConvertOp.getBounds2D +java.awt.ScrollPaneAdjustable.paramString +java.awt.GridBagLayout.AdjustForGravity +java.awt.GridBagLayout.toString +java.awt.Dimension.clone +java.awt.Dimension.equals +java.awt.Dimension.setSize +java.awt.Dimension.getSize +java.awt.Dimension.constructors +java.awt.TextField.getPreferredSize +java.awt.TextField.getMinimumSize +java.awt.TextField.constructors +java.awt.BorderLayout.layoutContainer +java.awt.BorderLayout.getHgap +java.awt.BorderLayout.maxLayoutSize +java.awt.BorderLayout.setVgap +java.awt.BorderLayout.getVgap +java.awt.BorderLayout.getLayoutAlignmentY +java.awt.BorderLayout.Test15 +java.awt.BorderLayout.getLayoutAlignmentX +java.awt.BorderLayout.setHgap +java.awt.BorderLayout.constructors +java.awt.BorderLayout.constants +java.awt.BorderLayout.preferredLayoutSize +java.awt.BorderLayout.addLayoutComponent +java.awt.Scrollbar.testSetBlockIncrement +java.awt.Scrollbar.testSetUnitIncrement +java.awt.Scrollbar.testSetValues +java.awt.List.testSelected +java.awt.ScrollPane.add +java.awt.ScrollPane.getScrollPosition +java.awt.ScrollPane.testSetLayout +java.awt.ScrollPane.setScrollPosition +java.awt.ScrollPane.doLayout +java.awt.Choice.getSelected +java.awt.Choice.remove +java.awt.KeyboardFocusManager.getFocusOwner +java.awt.KeyboardFocusManager.getGlobalPermanentFocusOwner +java.awt.KeyboardFocusManager.getGlobalFocusOwner +java.awt.AWTPermission.constructor +java.awt.ColorClass.decode +java.awt.ColorClass.serialization +java.awt.ColorClass.equals +java.awt.ColorClass.getGreen +java.awt.ColorClass.constructors +java.awt.ColorClass.brighter +java.awt.ColorClass.hashCode +java.awt.ColorClass.constants +java.awt.ColorClass.getBlue +java.awt.ColorClass.getRed +java.awt.RenderingHints.Key.isCompatibleValue +java.awt.RenderingHints.clone +java.awt.RenderingHints.keySet +java.awt.RenderingHints.put +java.awt.RenderingHints.add +java.awt.RenderingHints.putAll +java.awt.RenderingHints.entrySet +java.awt.RenderingHints.equals +java.awt.RenderingHints.size +java.awt.RenderingHints.get +java.awt.RenderingHints.values +java.awt.RenderingHints.containsValue +java.awt.RenderingHints.isEmpty +java.awt.RenderingHints.remove +java.awt.RenderingHints.clear +java.awt.Panel.TestPanelRepaint +java.awt.AWTKeyStroke.serialization +java.awt.AWTKeyStroke.equals +java.awt.AWTKeyStroke.getAWTKeyStroke +java.awt.Rectangle.clone +java.awt.Rectangle.add +java.awt.Rectangle.setRect +java.awt.Rectangle.setBounds +java.awt.Rectangle.equals +java.awt.Rectangle.intersects +java.awt.Rectangle.setSize +java.awt.Rectangle.grow +java.awt.Rectangle.outcode +java.awt.Rectangle.union +java.awt.Rectangle.constructors +java.awt.Rectangle.intersection +java.awt.Rectangle.setLocation +java.awt.Rectangle.translate +java.awt.Rectangle.contains +java.awt.Rectangle.isEmpty +java.awt.Menu.insert +java.awt.AlphaComposite.getInstance +java.awt.AlphaComposite.equals +java.awt.AlphaComposite.getInstance14 +java.awt.AlphaComposite.getRule +java.awt.Window.security +java.awt.Window.focusCycleRootTest +java.awt.EventClass.constants +java.awt.Frame.isDisplayable1 +java.awt.Frame.isDisplayable5 +java.awt.Frame.isDisplayable4 +java.awt.Frame.isDisplayable3 +java.awt.Frame.isDisplayable6 +java.awt.Frame.menubar +java.awt.Frame.isDisplayable2 +java.awt.Frame.isDisplayable7 +java.awt.Container.getListeners +java.awt.Container.setLayout +java.awt.Container.getPreferredSize +java.awt.Container.applyComponentOrientation +java.awt.Container.getComponentAt +java.awt.Container.getAlignmentY +java.awt.Container.getAlignmentX +java.awt.Container.addImpl +java.awt.FontClass.serialization +java.awt.MenuItem.label1 +java.awt.font.TextHitInfo.isLeadingEdge +java.awt.font.TextHitInfo.getOtherHit +java.awt.font.TextHitInfo.leading +java.awt.font.TextHitInfo.getOffsetHit +java.awt.font.TextHitInfo.equals +java.awt.font.TextHitInfo.getCharIndex +java.awt.font.TextHitInfo.afterOffset +java.awt.font.TextHitInfo.getInsertionIndex +java.awt.font.TextHitInfo.toString +java.awt.font.TextHitInfo.beforeOffset +java.awt.font.TextHitInfo.hashCode +java.awt.font.TextHitInfo.trailing +java.awt.font.TransformAttribute.serialization +java.awt.font.TransformAttribute.getTransform +java.awt.font.TransformAttribute.isIdentity +java.awt.font.ShapeGraphicAttribute.ShapeGraphicAttributeTest +java.awt.font.ImageGraphicAttribute.ImageGraphicAttributeTest +java.awt.font.TextAttribute.toString13 +java.awt.font.TextAttribute.serialization +java.awt.font.TextAttribute.toString +java.awt.font.TextAttribute.constants13 +java.awt.font.TextAttribute.constants +java.awt.GradientPaint.getPoint2 +java.awt.GradientPaint.equals +java.awt.GradientPaint.getColor1 +java.awt.GradientPaint.constructors +java.awt.GradientPaint.getColor2 +java.awt.GradientPaint.isCyclic +java.awt.GradientPaint.getTransparency +java.awt.GradientPaint.getPoint1 +java.awt.TextComponent.setSelectionStart +java.awt.Component.repaint +java.awt.Component.getListeners +java.awt.Component.setName +java.awt.Component.properties14 +java.awt.Component.getMaximumSize +java.awt.Component.setMinimumSize +java.awt.Component.getForeground +java.awt.Component.setPreferredSize +java.awt.Component.properties +java.awt.Component.requestFocus +java.awt.Component.isValid +java.awt.Component.getFont +java.awt.Component.setMaximumSize +java.awt.Component.setComponentOrientation +java.awt.datatransfer.DataFlavor.writeExternal +java.awt.datatransfer.StringSelection.selection +java.awt.TextArea.getPreferredSize +java.awt.TextArea.getMinimumSize +java.awt.TextArea.testReplaceText +java.awt.TextArea.constructors +java.awt.TextArea.testAppendText +java.awt.TextArea.testInsertText +java.awt.TextArea.testInvalidConstructorValues +java.awt.color.ColorSpace.isCS_sRGB +java.awt.color.ColorSpace.getInstance +java.awt.FlowLayout.minimumLayoutSize +java.awt.geom.Ellipse2D.Double.clone +java.awt.geom.Ellipse2D.Double.getY +java.awt.geom.Ellipse2D.Double.setFrame +java.awt.geom.Ellipse2D.Double.getHeight +java.awt.geom.Ellipse2D.Double.getX +java.awt.geom.Ellipse2D.Double.constructors +java.awt.geom.Ellipse2D.Double.getBounds2D +java.awt.geom.Ellipse2D.Double.isEmpty +java.awt.geom.Ellipse2D.Double.getWidth +java.awt.geom.Ellipse2D.Float.clone +java.awt.geom.Ellipse2D.Float.getY +java.awt.geom.Ellipse2D.Float.setFrame +java.awt.geom.Ellipse2D.Float.getHeight +java.awt.geom.Ellipse2D.Float.getX +java.awt.geom.Ellipse2D.Float.constructors +java.awt.geom.Ellipse2D.Float.getBounds2D +java.awt.geom.Ellipse2D.Float.isEmpty +java.awt.geom.Ellipse2D.Float.getWidth +java.awt.geom.Ellipse2D.intersects +java.awt.geom.Ellipse2D.contains +java.awt.geom.GeneralPath.getCurrentPoint +java.awt.geom.GeneralPath.GeneralPath +java.awt.geom.GeneralPath.append_PathIterator +java.awt.geom.GeneralPath.contains +java.awt.geom.GeneralPath.getPathIterator +java.awt.geom.RectangularShape.getFrame +java.awt.geom.RectangularShape.setFrame +java.awt.geom.RectangularShape.getMinY +java.awt.geom.RectangularShape.intersects +java.awt.geom.RectangularShape.getMaxY +java.awt.geom.RectangularShape.getMaxX +java.awt.geom.RectangularShape.setFrameFromCenter +java.awt.geom.RectangularShape.setFrameFromDiagonal +java.awt.geom.RectangularShape.getMinX +java.awt.geom.RectangularShape.getCenterX +java.awt.geom.RectangularShape.getCenterY +java.awt.geom.RectangularShape.contains +java.awt.geom.RectangularShape.isEmpty +java.awt.geom.RectangularShape.getBounds +java.awt.geom.Line2D.clone +java.awt.geom.Line2D.getP1 +java.awt.geom.Line2D.linesIntersect +java.awt.geom.Line2D.ptSegDistSq +java.awt.geom.Line2D.relativeCCW +java.awt.geom.Line2D.getP2 +java.awt.geom.Line2D.setLine +java.awt.geom.Line2D.equals +java.awt.geom.Line2D.intersects +java.awt.geom.Line2D.ptLineDistSq +java.awt.geom.Line2D.ptSegDist +java.awt.geom.Line2D.intersectsLine +java.awt.geom.Line2D.contains +java.awt.geom.Line2D.ptLineDist +java.awt.geom.Line2D.getPathIterator +java.awt.geom.Line2D.getBounds +java.awt.geom.Area.clone +java.awt.geom.Area.add +java.awt.geom.Area.isRectangular +java.awt.geom.Area.createTransformedArea +java.awt.geom.Area.isPolygonal +java.awt.geom.Area.intersect +java.awt.geom.Area.equals +java.awt.geom.Area.exclusiveOr +java.awt.geom.Area.intersects +java.awt.geom.Area.reset +java.awt.geom.Area.isSingular +java.awt.geom.Area.constructors +java.awt.geom.Area.getBounds2D +java.awt.geom.Area.contains +java.awt.geom.Area.subtract +java.awt.geom.Area.isEmpty +java.awt.geom.Area.transform +java.awt.geom.Area.getBounds +java.awt.geom.Rectangle2D.Double.clone +java.awt.geom.Rectangle2D.Double.createIntersection +java.awt.geom.Rectangle2D.Double.setRect +java.awt.geom.Rectangle2D.Double.outcode +java.awt.geom.Rectangle2D.Double.createUnion +java.awt.geom.Rectangle2D.Double.isEmpty +java.awt.geom.Rectangle2D.Float.clone +java.awt.geom.Rectangle2D.Float.createIntersection +java.awt.geom.Rectangle2D.Float.setRect +java.awt.geom.Rectangle2D.Float.outcode +java.awt.geom.Rectangle2D.Float.createUnion +java.awt.geom.Rectangle2D.Float.isEmpty +java.awt.geom.Rectangle2D.add +java.awt.geom.Rectangle2D.setFrame +java.awt.geom.Rectangle2D.intersect +java.awt.geom.Rectangle2D.equals +java.awt.geom.Rectangle2D.intersects +java.awt.geom.Rectangle2D.union +java.awt.geom.Rectangle2D.intersectsLine +java.awt.geom.Rectangle2D.getBounds2D +java.awt.geom.Rectangle2D.contains +java.awt.geom.Rectangle2D.constants +java.awt.geom.Rectangle2D.getPathIterator +java.awt.geom.Rectangle2D.getBounds +java.awt.geom.Arc2D.Double.clone +java.awt.geom.Arc2D.Float.clone +java.awt.geom.Arc2D.setFrame +java.awt.geom.Arc2D.setAngleStart +java.awt.geom.Arc2D.setArc +java.awt.geom.Arc2D.setArcByTangent +java.awt.geom.Arc2D.containsAngle +java.awt.geom.Arc2D.setArcByCenter +java.awt.geom.Arc2D.intersects +java.awt.geom.Arc2D.getEndPoint +java.awt.geom.Arc2D.setAngleExtent +java.awt.geom.Arc2D.constructors +java.awt.geom.Arc2D.getBounds2D +java.awt.geom.Arc2D.contains +java.awt.geom.Arc2D.getStartPoint +java.awt.geom.Arc2D.constants +java.awt.geom.Arc2D.isEmpty +java.awt.geom.Arc2D.getPathIterator +java.awt.geom.Arc2D.setAngles +java.awt.geom.Arc2D.setArcType +java.awt.geom.QuadCurve2D.Double.getP1 +java.awt.geom.QuadCurve2D.Double.getP2 +java.awt.geom.QuadCurve2D.Double.getCtrlPt +java.awt.geom.QuadCurve2D.Double.getBounds2D +java.awt.geom.QuadCurve2D.Double.Double +java.awt.geom.QuadCurve2D.Double.setCurve +java.awt.geom.QuadCurve2D.Float.getP1 +java.awt.geom.QuadCurve2D.Float.Float +java.awt.geom.QuadCurve2D.Float.getP2 +java.awt.geom.QuadCurve2D.Float.getCtrlPt +java.awt.geom.QuadCurve2D.Float.getBounds2D +java.awt.geom.QuadCurve2D.Float.setCurve +java.awt.geom.QuadCurve2D.clone +java.awt.geom.QuadCurve2D.getFlatness +java.awt.geom.QuadCurve2D.subdivide +java.awt.geom.QuadCurve2D.getFlatnessSq +java.awt.geom.QuadCurve2D.setCurve +java.awt.geom.QuadCurve2D.getPathIterator +java.awt.geom.CubicCurve2D.Double.getP1 +java.awt.geom.CubicCurve2D.Double.getCtrlP2 +java.awt.geom.CubicCurve2D.Double.getP2 +java.awt.geom.CubicCurve2D.Double.getBounds2D +java.awt.geom.CubicCurve2D.Double.Double +java.awt.geom.CubicCurve2D.Double.setCurve +java.awt.geom.CubicCurve2D.Double.getCtrlP1 +java.awt.geom.CubicCurve2D.Float.getP1 +java.awt.geom.CubicCurve2D.Float.getCtrlP2 +java.awt.geom.CubicCurve2D.Float.Float +java.awt.geom.CubicCurve2D.Float.getP2 +java.awt.geom.CubicCurve2D.Float.getBounds2D +java.awt.geom.CubicCurve2D.Float.setCurve +java.awt.geom.CubicCurve2D.Float.getCtrlP1 +java.awt.geom.CubicCurve2D.clone +java.awt.geom.CubicCurve2D.getFlatness +java.awt.geom.CubicCurve2D.subdivide +java.awt.geom.CubicCurve2D.getFlatnessSq +java.awt.geom.CubicCurve2D.setCurve +java.awt.geom.CubicCurve2D.getPathIterator +java.awt.geom.FlatteningPathIterator.FlatteningPathIterator +java.awt.geom.FlatteningPathIterator.getWindingRule +java.awt.geom.FlatteningPathIterator.getFlatness +java.awt.geom.FlatteningPathIterator.getRecursionLimit +java.awt.geom.FlatteningPathIterator.currentSegment +java.awt.geom.AffineTransform.clone +java.awt.geom.AffineTransform.preConcatenate +java.awt.geom.AffineTransform.getRotateInstance +java.awt.geom.AffineTransform.getMatrix +java.awt.geom.AffineTransform.inverseTransform +java.awt.geom.AffineTransform.getScaleInstance +java.awt.geom.AffineTransform.createInverse +java.awt.geom.AffineTransform.deltaTransform +java.awt.geom.AffineTransform.equals +java.awt.geom.AffineTransform.setTransform +java.awt.geom.AffineTransform.constructors +java.awt.geom.AffineTransform.getTranslateInstance +java.awt.geom.AffineTransform.constants +java.awt.geom.AffineTransform.concatenate +java.awt.geom.AffineTransform.getShearInstance +java.awt.geom.AffineTransform.transform +java.awt.geom.AffineTransform.getDeterminant +java.awt.geom.AffineTransform.isIdentity +java.awt.geom.RoundRectangle2D.intersects +java.awt.geom.RoundRectangle2D.contains +java.awt.testName +java.nio.Buffer.IntBufferTest +java.nio.Buffer.ShortBufferTest +java.nio.Buffer.FloatBufferTest +java.nio.Buffer.LongBufferTest +java.nio.Buffer.ByteBufferTest +java.nio.Buffer.DoubleBufferTest +java.nio.Buffer.CharBufferTest +java.nio.LongBuffer.compact +java.nio.ShortBuffer.compact +java.nio.IntBuffer.compareTo +java.nio.IntBuffer.compact +java.nio.channels.Channels.ChannelsTest +java.nio.channels.Selector.testEmptySelect +java.nio.channels.FileChannel.copyIO +java.nio.channels.FileChannel.multibufferIO +java.nio.channels.FileChannel.truncate +java.nio.channels.FileChannel.map +java.nio.channels.FileChannel.offsetSingleBuffer +java.nio.channels.FileChannel.singlebufferIO +java.nio.channels.FileChannel.multidirectbufferIO +java.nio.channels.FileChannel.offsetSingleDirectBuffer +java.nio.DoubleBuffer.compareTo +java.nio.DoubleBuffer.compact +java.nio.ByteBuffer.direct +java.nio.ByteBuffer.compact +java.nio.ByteBuffer.TestAllocateDirect +java.nio.ByteBuffer.GetPut +java.nio.ByteBuffer.putDouble +java.nio.ByteBuffer.Order +java.nio.ByteBuffer.Allocating +java.nio.CharBuffer.compact +java.nio.FloatBuffer.compareTo +java.nio.FloatBuffer.compact +java.nio.charset.Charset.UTF8Charset +java.nio.charset.Charset.utf16 +java.nio.charset.Charset.canEncode +java.nio.charset.Charset.forName --- openjdk-6-6b16~pre5.orig/debian/control +++ openjdk-6-6b16~pre5/debian/control @@ -0,0 +1,163 @@ +Source: openjdk-6 +Section: java +Priority: extra +Maintainer: OpenJDK Team +Uploaders: Michael Koch , Torsten Werner , Matthias Klose +Build-Depends: debhelper (>= 5), autotools-dev, lzma, m4, lsb-release, wget, zip, unzip, sharutils, gawk, cpio, pkg-config, procps, automake, autoconf, ant, libtool, g++-4.4 (>= 4.4.1), openjdk-6-jdk (>= 6b14) [alpha armel amd64 hppa i386 ia64 lpia powerpc m68k mips mipsel sparc s390], libxtst-dev, libxi-dev, libxt-dev, libxp-dev, libxaw7-dev, libxrender-dev, libcups2-dev, libasound2-dev, libfreetype6-dev, libxalan2-java, rhino, liblcms1-dev, libxinerama-dev, libffi-dev, llvm-dev (>= 2.5) [amd64 i386 lpia], libjpeg62-dev, libpng12-dev, libgif-dev, zlib1g-dev, xulrunner-dev (>= 1.9.1), fastjar (>= 2:0.96-0ubuntu2), libpulse-dev (>= 0.9.12), pulseaudio (>= 0.9.12), mauve, xvfb, autoconf, automake, xauth, xfonts-base +Standards-Version: 3.8.2 +Homepage: http://openjdk.java.net/ +Vcs-Bzr: bzr+ssh://@bazaar.launchpad.net/~openjdk/openjdk/openjdk6 +Vcs-Browser: https://code.launchpad.net/~openjdk/openjdk/openjdk6 + +Package: openjdk-6-jdk +Architecture: any +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-6-jre (>= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Recommends: libxt-dev +Suggests: openjdk-6-demo, openjdk-6-source, visualvm +Provides: java-sdk, java2-sdk, java5-sdk, java6-sdk, java-compiler +Description: OpenJDK Development Kit (JDK) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: openjdk-6-jre-headless +Architecture: any +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-6-jre-lib (>= ${binary:Version}), ca-certificates-java, tzdata-java, rhino, java-common (>= 0.28), ${dlopenhl:Depends}, ${shlibs:Depends}, ${misc:Depends} +Recommends: ${dlopenjl:Recommends}, ${cacao:Recommends} +Suggests: libnss-mdns, sun-java6-fonts, ttf-dejavu-core, ttf-baekmuk | ttf-unfonts | ttf-unfonts-core, ttf-kochi-gothic | ttf-sazanami-gothic, ttf-kochi-mincho | ttf-sazanami-mincho, ttf-wqy-zenhei, ttf-indic-fonts-core, ttf-telugu-fonts, ttf-oriya-fonts, ttf-kannada-fonts, ttf-bengali-fonts, +Provides: java-virtual-machine, java-runtime-headless, java2-runtime-headless, java5-runtime-headless, java6-runtime-headless +Replaces: openjdk-6-jre-lib (<< 6b06-0ubuntu11), openjdk-6-jre (<< 6b09dfsg-0ubuntu2) +Description: OpenJDK Java runtime, using ${vm:Name} (headless) + Minimal Java runtime - needed for executing non GUI Java programs. + Using ${vm:Name}. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: openjdk-6-jre +Architecture: any +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-6-jre-headless (>= ${binary:Version}), ${xandsound:Depends}, ${shlibs:Depends}, ${dlopenjre:Depends}, ${misc:Depends}, ${dep:bridge} +Recommends: ${dlopenjre:Recommends}, ${pkg:pulseaudio} +Suggests: icedtea6-plugin +Conflicts: icedtea-gcjwebplugin (<< 1.0-1ubuntu4) +Replaces: openjdk-6-jre-headless (<< 6b16~pre3) +Provides: java-runtime, java2-runtime, java5-runtime, java6-runtime +Description: OpenJDK Java runtime, using ${vm:Name} + Full Java runtime environment - needed for executing Java GUI and Webstart + programs. Using ${vm:Name}. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: openjdk-6-jre-lib +Architecture: all +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-6-jre-headless (>= ${base:Version}), ${misc:Depends} +Recommends: ${dlopen:Recommends} +Description: OpenJDK Java runtime (architecture independent libraries) + OpenJDK Java runtime, using ${vm:Name}. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: openjdk-6-demo +Architecture: any +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-6-jre (>= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Java runtime based on OpenJDK (demos and examples) + OpenJDK Java runtime + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: openjdk-6-source +Architecture: all +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-6-jre (>= ${binary:Version}), openjdk-6-jdk (>= ${binary:Version}) +Description: OpenJDK Development Kit (JDK) source files + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the Java programming language source files + (src.zip) for all classes that make up the Java core API. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: openjdk-6-doc +Section: doc +Pre-Depends: ${dpkg:Depends} +Architecture: all +Suggests: openjdk-6-jdk +Description: OpenJDK Development Kit (JDK) documentation + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the API documentation. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: openjdk-6-dbg +Architecture: any +Section: debug +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-6-jre-headless (= ${binary:Version}) +Recommends: openjdk-6-jre (= ${binary:Version}) +Suggests: openjdk-6-jdk (= ${binary:Version}) +Description: Java runtime based on OpenJDK (debugging symbols) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the debugging symbols. + . + The packages are built using the IcedTea build support and patches + from the IcedTea project. + +Package: icedtea6-plugin +Section: web +Architecture: any +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-6-jre (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Conflicts: icedtea-gcjwebplugin (<< 1.0-1ubuntu4) +Replaces: icedtea-gcjwebplugin, openjdk-6-jre (<< 6b12) +Xb-Npp-Description: IcedTea6 Java Web Browser Plugin (execution of applets on web pages) +Xb-Npp-Applications: ec8030f7-c20a-464f-9b0e-13a3a9e97384, 92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a, aa5ca914-c309-495d-91cf-3141bbb04115 +Xb-Npp-Name: The IcedTea Web Browser Plugin +Xb-Npp-MimeType: application/x-java-vm, application/x-java-applet, application/x-java-applet;version=1.1, application/x-java-applet;version=1.1.1, application/x-java-applet;version=1.1.2, application/x-java-applet;version=1.1.3, application/x-java-applet;version=1.2, application/x-java-applet;version=1.2.1, application/x-java-applet;version=1.2.2, application/x-java-applet;version=1.3, application/x-java-applet;version=1.3.1, application/x-java-applet;version=1.4, application/x-java-applet;version=1.4.1, application/x-java-applet;version=1.4.2, application/x-java-applet;version=1.5, application/x-java-applet;version=1.6, application/x-java-applet;jpi-version=1.6.0_00, application/x-java-bean, application/x-java-bean;version=1.1, application/x-java-bean;version=1.1.1, application/x-java-bean;version=1.1.2, application/x-java-bean;version=1.1.3, application/x-java-bean;version=1.2, application/x-java-bean;version=1.2.1, application/x-java-bean;version=1.2.2, application/x-java-bean;version=1.3, application/x-java-bean;version=1.3.1, application/x-java-bean;version=1.4, application/x-java-bean;version=1.4.1, application/x-java-bean;version=1.4.2, application/x-java-bean;version=1.5, application/x-java-bean;version=1.6, application/x-java-bean;jpi-version=1.6.0_00 +Description: web browser plugin based on OpenJDK and IcedTea to execute Java applets + IcedTeaPlugin is a web browser plugin to execute Java applets, supporting + LiveConnect/Javascript. It is targeted for xulrunner-1.9 and compatible + browsers that support the NPAPI. + . + Icedtea is a temporary fork of OpenJDK + +Package: icedtea-6-jre-cacao +Architecture: alpha amd64 armel i386 lpia powerpc m68k mips mipsel s390 +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-6-jre-headless (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Provides: icedtea6-jre-cacao +Description: Alternative JVM for OpenJDK, using Cacao + The package provides an alternative runtime using the Cacao VM and the + Cacao Just In Time Compiler (JIT). This is a somewhat faster alternative + than the Zero port on architectures like alpha, armel, m68k, mips, mipsel, + powerpc and s390. + . + The VM is started with the option `-cacao'. See the README.Debian for details. + +Package: openjdk-6-jre-zero +Architecture: amd64 i386 lpia +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-6-jre-headless (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Alternative JVM for OpenJDK, using Zero/Shark + The package provides an alternative runtime using the Zero VM and the + Shark Just In Time Compiler (JIT). Built on architectures in addition + to the Hotspot VM as a debugging aid for those architectures which don't + have a Hotspot VM. + . + The VM is started with the option `-zero'. See the README.Debian for details. --- openjdk-6-6b16~pre5.orig/debian/font.properties.ja.wgy_zenhai +++ openjdk-6-6b16~pre5/debian/font.properties.ja.wgy_zenhai @@ -0,0 +1,244 @@ +# @(#)font.properties.ja.linux 1.7 02/03/07 +# +# Copyright 2002 Sun Microsystems, Inc. All rights reserved. +# + +# Component Font Mappings +# +serif.0=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1 +serif.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +serif.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.italic.0=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1 +serif.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +serif.italic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.bold.0=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1 +serif.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +serif.bold.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.bolditalic.0=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1 +serif.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +serif.bolditalic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +sansserif.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.italic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +sansserif.italic.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.bold.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +sansserif.bold.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.bolditalic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +sansserif.bolditalic.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +monospaced.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +monospaced.italic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +monospaced.bold.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +monospaced.bolditalic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialog.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.italic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialog.italic.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.bold.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialog.bold.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.bolditalic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialog.bolditalic.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialoginput.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialoginput.italic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialoginput.bold.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialoginput.bolditalic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +# Missing Glyph Character +# +default.char=274f + +# Component Font Character Encodings +# +fontcharset.serif.0=sun.io.CharToByteISO8859_1 +fontcharset.serif.1=sun.awt.motif.CharToByteX11JIS0208 +fontcharset.serif.2=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.sansserif.0=sun.io.CharToByteISO8859_1 +fontcharset.sansserif.1=sun.awt.motif.CharToByteX11JIS0208 +fontcharset.sansserif.2=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.monospaced.0=sun.io.CharToByteISO8859_1 +fontcharset.monospaced.1=sun.awt.motif.CharToByteX11JIS0208 +fontcharset.monospaced.2=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.dialog.0=sun.io.CharToByteISO8859_1 +fontcharset.dialog.1=sun.awt.motif.CharToByteX11JIS0208 +fontcharset.dialog.2=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1 +fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11JIS0208 +fontcharset.dialoginput.2=sun.awt.motif.CharToByteX11JIS0208 + +# Exclusion Ranges +# + +# XFontSet Information +# +fontset.serif.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.default=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + --- openjdk-6-6b16~pre5.orig/debian/accessibility.properties +++ openjdk-6-6b16~pre5/debian/accessibility.properties @@ -0,0 +1,9 @@ +# +# The following line specifies the assistive technology classes +# that should be loaded into the Java VM when the AWT is initialized. +# Specify multiple classes by separating them with commas. +# Note: the line below cannot end the file (there must be at +# a minimum a blank line following it). +# +assistive_technologies=org.GNOME.Accessibility.JavaBridge + --- openjdk-6-6b16~pre5.orig/debian/JB-web-start.keys.in +++ openjdk-6-6b16~pre5/debian/JB-web-start.keys.in @@ -0,0 +1,6 @@ +application/x-java-jnlp-file + description=Java Web Start Application + icon_filename=sun-java + default_action_type=application + default_application_id=java-web-start + short_list_application_user_additions=java-web-start --- openjdk-6-6b16~pre5.orig/debian/patches/set-exec-name-original.diff +++ openjdk-6-6b16~pre5/debian/patches/set-exec-name-original.diff @@ -0,0 +1,69 @@ +--- openjdk/hotspot/src/os/linux/launcher/java_md.c.orig 2008-05-13 11:00:46.020643623 +0200 ++++ openjdk/hotspot/src/os/linux/launcher/java_md.c 2008-05-13 11:02:27.212170074 +0200 +@@ -1011,8 +1011,19 @@ + char buf[PATH_MAX+1]; + int len = readlink(self, buf, PATH_MAX); + if (len >= 0) { ++ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL}; ++ const char **prefix; ++ size_t prefix_len = 0; + buf[len] = '\0'; /* readlink doesn't nul terminate */ +- exec_path = strdup(buf); ++ for (prefix = prefixes; *prefix; prefix++) { ++ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix); ++ if (!strncmp(*prefix, buf, prefix_len)) { ++ prefix_len--; ++ break; ++ } ++ prefix_len = 0; ++ } ++ exec_path = strdup(buf + prefix_len); + } + } + #else /* !__sun && !__linux */ +--- openjdk/hotspot/src/os/solaris/launcher/java_md.c.orig 2008-05-13 11:00:46.020643623 +0200 ++++ openjdk/hotspot/src/os/solaris/launcher/java_md.c 2008-05-13 11:02:08.771891907 +0200 +@@ -1011,8 +1011,19 @@ + char buf[PATH_MAX+1]; + int len = readlink(self, buf, PATH_MAX); + if (len >= 0) { ++ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL}; ++ const char **prefix; ++ size_t prefix_len = 0; + buf[len] = '\0'; /* readlink doesn't nul terminate */ +- exec_path = strdup(buf); ++ for (prefix = prefixes; *prefix; prefix++) { ++ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix); ++ if (!strncmp(*prefix, buf, prefix_len)) { ++ prefix_len--; ++ break; ++ } ++ prefix_len = 0; ++ } ++ exec_path = strdup(buf + prefix_len); + } + } + #else /* !__sun && !__linux */ +--- openjdk/jdk/src/solaris/bin/java_md.c.orig 2008-05-13 11:00:46.020643623 +0200 ++++ openjdk/jdk/src/solaris/bin/java_md.c 2008-05-13 11:01:28.581285640 +0200 +@@ -884,8 +884,19 @@ + char buf[PATH_MAX+1]; + int len = readlink(self, buf, PATH_MAX); + if (len >= 0) { ++ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL}; ++ const char **prefix; ++ size_t prefix_len = 0; + buf[len] = '\0'; /* readlink doesn't nul terminate */ +- exec_path = JLI_StringDup(buf); ++ for (prefix = prefixes; *prefix; prefix++) { ++ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix); ++ if (!strncmp(*prefix, buf, prefix_len)) { ++ prefix_len--; ++ break; ++ } ++ prefix_len = 0; ++ } ++ exec_path = JLI_StringDup(buf + prefix_len); + } + } + #else /* !__sun && !__linux */ --- openjdk-6-6b16~pre5.orig/debian/patches/default-libpath.diff +++ openjdk-6-6b16~pre5/debian/patches/default-libpath.diff @@ -0,0 +1,16 @@ +--- openjdk/hotspot/src/os/linux/vm/os_linux.cpp.orig 2009-03-14 19:24:41.000000000 +0100 ++++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp 2009-03-17 09:20:37.000000000 +0100 +@@ -279,12 +279,7 @@ + * ... + * 7: The default directories, normally /lib and /usr/lib. + */ +- +-#if defined(AMD64) || defined(_LP64) && (defined(PPC) || defined(S390)) +-#define DEFAULT_LIBPATH "/usr/lib64:/lib64:/lib:/usr/lib" +-#else +-#define DEFAULT_LIBPATH "/lib:/usr/lib" +-#endif ++#define DEFAULT_LIBPATH "/usr/lib/jni:/lib:/usr/lib" + + #define EXTENSIONS_DIR "/lib/ext" + #define ENDORSED_DIR "/lib/endorsed" --- openjdk-6-6b16~pre5.orig/debian/patches/nonreparenting-wm.diff +++ openjdk-6-6b16~pre5/debian/patches/nonreparenting-wm.diff @@ -0,0 +1,66 @@ +diff --git a/jdk/src/solaris/classes/sun/awt/X11/XWM.java b/jdk/src/solaris/classes/sun/awt/X11/XWM.java +index 68d1ff7..878327e 100644 +--- openjdk/jdk/src/solaris/classes/sun/awt/X11/XWM.java ++++ openjdk/jdk/src/solaris/classes/sun/awt/X11/XWM.java +@@ -98,11 +98,14 @@ class XWM implements MWMConstants, XUtilConstants { + ICE_WM = 10, + METACITY_WM = 11, + COMPIZ_WM = 12, +- LG3D_WM = 13; ++ LG3D_WM = 13, ++ OTHER_NONREPARENTING_WM = 14; + public String toString() { + switch (WMID) { + case NO_WM: + return "NO WM"; ++ case OTHER_NONREPARENTING_WM: ++ return "Other non-reparenting WM"; + case OTHER_WM: + return "Other WM"; + case OPENLOOK_WM: +@@ -564,7 +567,7 @@ class XWM implements MWMConstants, XUtilConstants { + } + + static boolean isNonReparentingWM() { +- return (XWM.getWMID() == XWM.COMPIZ_WM || XWM.getWMID() == XWM.LG3D_WM); ++ return (XWM.getWMID() == XWM.COMPIZ_WM || XWM.getWMID() == XWM.LG3D_WM || XWM.getWMID() == XWM.OTHER_NONREPARENTING_WM); + } + + /* +@@ -764,9 +767,17 @@ class XWM implements MWMConstants, XUtilConstants { + * supports WIN or _NET wm spec. + */ + else if (l_net_protocol.active()) { +- awt_wmgr = XWM.OTHER_WM; ++ if (XToolkit.getEnv("_JAVA_AWT_WM_NONREPARENTING") != null) { ++ awt_wmgr = XWM.OTHER_NONREPARENTING_WM; ++ } else { ++ awt_wmgr = XWM.OTHER_WM; ++ } + } else if (win.active()) { +- awt_wmgr = XWM.OTHER_WM; ++ if (XToolkit.getEnv("_JAVA_AWT_WM_NONREPARENTING") != null) { ++ awt_wmgr = XWM.OTHER_NONREPARENTING_WM; ++ } else { ++ awt_wmgr = XWM.OTHER_WM; ++ } + } + /* + * Check for legacy WMs. +@@ -777,6 +788,8 @@ class XWM implements MWMConstants, XUtilConstants { + awt_wmgr = XWM.MOTIF_WM; + } else if (isOpenLook()) { + awt_wmgr = XWM.OPENLOOK_WM; ++ } else if (XToolkit.getEnv("_JAVA_AWT_WM_NONREPARENTING") != null) { ++ awt_wmgr = XWM.OTHER_NONREPARENTING_WM; + } else { + awt_wmgr = XWM.OTHER_WM; + } +@@ -1298,6 +1311,7 @@ class XWM implements MWMConstants, XUtilConstants { + res = new Insets(28, 6, 6, 6); + break; + case NO_WM: ++ case OTHER_NONREPARENTING_WM: + case LG3D_WM: + res = zeroInsets; + break; --- openjdk-6-6b16~pre5.orig/debian/patches/zero-notice-safepoints.diff +++ openjdk-6-6b16~pre5/debian/patches/zero-notice-safepoints.diff @@ -0,0 +1,17 @@ +diff -ruNE openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp openjdk-6-6b16~pre4/build/openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp +--- openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp 2009-04-30 23:21:47.000000000 +0000 ++++ openjdk/hotspot/src/share/vm/interpreter/cppInterpreter.hpp 2009-06-29 12:30:31.000000000 +0000 +@@ -60,8 +60,13 @@ + + + // No displatch table to switch so no need for these to do anything special ++#if defined(PRODUCT) && defined(HOTSPOT_ASM) ++ static void notice_safepoints(); ++ static void ignore_safepoints(); ++#else + static void notice_safepoints() {} + static void ignore_safepoints() {} ++#endif + + static address native_result_to_tosca() { return (address)_native_abi_to_tosca; } // aka result handler + static address tosca_result_to_stack() { return (address)_tosca_to_stack; } --- openjdk-6-6b16~pre5.orig/debian/patches/zero-asm-newfiles.diff +++ openjdk-6-6b16~pre5/debian/patches/zero-asm-newfiles.diff @@ -0,0 +1,27034 @@ +diff -ruNE ports/hotspot/src/cpu/zero/vm/bc.def ports/hotspot/src/cpu/zero/vm/bc.def +--- ports/hotspot/src/cpu/zero/vm/bc.def 1970-01-01 00:00:00.000000000 +0000 ++++ ports/hotspot/src/cpu/zero/vm/bc.def 2009-06-30 12:09:32.000000000 +0000 +@@ -0,0 +1,7863 @@ ++nop = 0x00, 1 ++aconst_null = 0x01, 1 ++iconst_m1 = 0x02, 1 ++iconst_0 = 0x03, 1 ++iconst_1 = 0x04, 1 ++iconst_2 = 0x05, 1 ++iconst_3 = 0x06, 1 ++iconst_4 = 0x07, 1 ++iconst_5 = 0x08, 1 ++lconst_0 = 0x09, 1 ++lconst_1 = 0x0a, 1 ++fconst_0 = 0x0b, 1 ++fconst_1 = 0x0c, 1 ++fconst_2 = 0x0d, 1 ++dconst_0 = 0x0e, 1 ++dconst_1 = 0x0f, 1 ++bipush = 0x10, 2 ++sipush = 0x11, 3 ++ldc = 0x12, 2 ++ldc_w = 0x13, 3 ++ldc2_w = 0x14, 3 ++iload = 0x15, 2 ++lload = 0x16, 2 ++fload = 0x17, 2 ++dload = 0x18, 2 ++aload = 0x19, 2 ++iload_0 = 0x1a, 1 ++iload_1 = 0x1b, 1 ++iload_2 = 0x1c, 1 ++iload_3 = 0x1d, 1 ++lload_0 = 0x1e, 1 ++lload_1 = 0x1f, 1 ++lload_2 = 0x20, 1 ++lload_3 = 0x21, 1 ++fload_0 = 0x22, 1 ++fload_1 = 0x23, 1 ++fload_2 = 0x24, 1 ++fload_3 = 0x25, 1 ++dload_0 = 0x26, 1 ++dload_1 = 0x27, 1 ++dload_2 = 0x28, 1 ++dload_3 = 0x29, 1 ++aload_0 = 0x2a, 1 ++aload_1 = 0x2b, 1 ++aload_2 = 0x2c, 1 ++aload_3 = 0x2d, 1 ++iaload = 0x2e, 1 ++laload = 0x2f, 1 ++faload = 0x30, 1 ++daload = 0x31, 1 ++aaload = 0x32, 1 ++baload = 0x33, 1 ++caload = 0x34, 1 ++saload = 0x35, 1 ++istore = 0x36, 2 ++lstore = 0x37, 2 ++fstore = 0x38, 2 ++dstore = 0x39, 2 ++astore = 0x3a, 2 ++istore_0 = 0x3b, 1 ++istore_1 = 0x3c, 1 ++istore_2 = 0x3d, 1 ++istore_3 = 0x3e, 1 ++lstore_0 = 0x3f, 1 ++lstore_1 = 0x40, 1 ++lstore_2 = 0x41, 1 ++lstore_3 = 0x42, 1 ++fstore_0 = 0x43, 1 ++fstore_1 = 0x44, 1 ++fstore_2 = 0x45, 1 ++fstore_3 = 0x46, 1 ++dstore_0 = 0x47, 1 ++dstore_1 = 0x48, 1 ++dstore_2 = 0x49, 1 ++dstore_3 = 0x4a, 1 ++astore_0 = 0x4b, 1 ++astore_1 = 0x4c, 1 ++astore_2 = 0x4d, 1 ++astore_3 = 0x4e, 1 ++iastore = 0x4f, 1 ++lastore = 0x50, 1 ++fastore = 0x51, 1 ++dastore = 0x52, 1 ++aastore = 0x53, 1 ++bastore = 0x54, 1 ++castore = 0x55, 1 ++sastore = 0x56, 1 ++pop = 0x57, 1 ++pop2 = 0x58, 1 ++dup = 0x59, 1 ++dup_x1 = 0x5a, 1 ++dup_x2 = 0x5b, 1 ++dup2 = 0x5c, 1 ++dup2_x1 = 0x5d, 1 ++dup2_x2 = 0x5e, 1 ++swap = 0x5f, 1 ++iadd = 0x60, 1 ++ladd = 0x61, 1 ++fadd = 0x62, 1 ++dadd = 0x63, 1 ++isub = 0x64, 1 ++lsub = 0x65, 1 ++fsub = 0x66, 1 ++dsub = 0x67, 1 ++imul = 0x68, 1 ++lmul = 0x69, 1 ++fmul = 0x6a, 1 ++dmul = 0x6b, 1 ++idiv = 0x6c, 1 ++ldiv = 0x6d, 1 ++fdiv = 0x6e, 1 ++ddiv = 0x6f, 1 ++irem = 0x70, 1 ++lrem = 0x71, 1 ++frem = 0x72, 1 ++drem = 0x73, 1 ++ineg = 0x74, 1 ++lneg = 0x75, 1 ++fneg = 0x76, 1 ++dneg = 0x77, 1 ++ishl = 0x78, 1 ++lshl = 0x79, 1 ++ishr = 0x7a, 1 ++lshr = 0x7b, 1 ++iushr = 0x7c, 1 ++lushr = 0x7d, 1 ++iand = 0x7e, 1 ++land = 0x7f, 1 ++ior = 0x80, 1 ++lor = 0x81, 1 ++ixor = 0x82, 1 ++lxor = 0x83, 1 ++iinc = 0x84, 3 ++i2l = 0x85, 1 ++i2f = 0x86, 1 ++i2d = 0x87, 1 ++l2i = 0x88, 1 ++l2f = 0x89, 1 ++l2d = 0x8a, 1 ++f2i = 0x8b, 1 ++f2l = 0x8c, 1 ++f2d = 0x8d, 1 ++d2i = 0x8e, 1 ++d2l = 0x8f, 1 ++d2f = 0x90, 1 ++i2b = 0x91, 1 ++i2c = 0x92, 1 ++i2s = 0x93, 1 ++lcmp = 0x94, 1 ++fcmpl = 0x95, 1 ++fcmpg = 0x96, 1 ++dcmpl = 0x97, 1 ++dcmpg = 0x98, 1 ++ifeq = 0x99, 0 ++ifne = 0x9a, 0 ++iflt = 0x9b, 0 ++ifge = 0x9c, 0 ++ifgt = 0x9d, 0 ++ifle = 0x9e, 0 ++if_icmpeq = 0x9f, 0 ++if_icmpne = 0xa0, 0 ++if_icmplt = 0xa1, 0 ++if_icmpge = 0xa2, 0 ++if_icmpgt = 0xa3, 0 ++if_icmple = 0xa4, 0 ++if_acmpeq = 0xa5, 0 ++if_acmpne = 0xa6, 0 ++goto = 0xa7, 0 ++jsr = 0xa8, 0 ++ret = 0xa9, 0 ++tableswitch = 0xaa, 0 ++lookupswitch = 0xab, 0 ++ireturn = 0xac, 0 ++lreturn = 0xad, 0 ++freturn = 0xae, 0 ++dreturn = 0xaf, 0 ++areturn = 0xb0, 0 ++return = 0xb1, 0 ++getstatic = 0xb2, 3 ++putstatic = 0xb3, 3 ++getfield = 0xb4, 3 ++putfield = 0xb5, 3 ++invokevirtual = 0xb6, 3 ++invokespecial = 0xb7, 3 ++invokestatic = 0xb8, 3 ++invokeinterface = 0xb9, 0 ++new = 0xbb, 3 ++newarray = 0xbc, 2 ++anewarray = 0xbd, 3 ++arraylength = 0xbe, 1 ++athrow = 0xbf, 0 ++checkcast = 0xc0, 3 ++instanceof = 0xc1, 3 ++monitorenter = 0xc2, 1 ++monitorexit = 0xc3, 1 ++wide = 0xc4, 1 ++multianewarray = 0xc5, 4 ++ifnull = 0xc6, 0 ++ifnonnull = 0xc7, 0 ++goto_w = 0xc8, 0 ++jsr_w = 0xc9, 0 ++breakpoint = 0xca, 0 ++ ++#agetfield = 0xcb, 3 ++bgetfield = 0xcc, 3 ++cgetfield = 0xcd, 3 ++#dgetfield = 0xce, 3 ++#fgetfield = 0xcf, 3 ++igetfield = 0xd0, 3 ++lgetfield = 0xd1, 3 ++sgetfield = 0xd2, 3 ++ ++aputfield = 0xd3, 3 ++bputfield = 0xd4, 3 ++cputfield = 0xd5, 3 ++#dputfield = 0xd6, 3 ++#fputfield = 0xd7, 3 ++iputfield = 0xd8, 3 ++lputfield = 0xd9, 3 ++#sputfield = 0xda, 3 ++ ++iaccess_0 = 0xdb, 4 ++iaccess_1 = 0xdc, 4 ++iaccess_2 = 0xdd, 4 ++iaccess_3 = 0xde, 4 ++ ++#fast_iload = 0xdf, 2 ++#fast_iload2 = 0xe0, 4 ++#fast_icaload = 0xe1, 3 ++ ++invokevfinal = 0xe2, 3 ++#linearswitch = 0xe3, 0 ++#binaryswitch = 0xe4, 0 ++ ++iload_0_iconst_N = 231, 2 ++iload_1_iconst_N = 232, 2 ++iload_2_iconst_N = 233, 2 ++iload_3_iconst_N = 234, 2 ++iload_iconst_N = 235, 3 ++invokeresolved = 236, 3 ++iadd_istore_N = 237, 2 ++isub_istore_N = 238, 2 ++iand_istore_N = 239, 2 ++ior_istore_N = 240, 2 ++ixor_istore_N = 241, 2 ++iadd_u4store = 242, 3 ++isub_u4store = 243, 3 ++iand_u4store = 244, 3 ++ior_u4store = 245, 3 ++ixor_u4store = 246, 3 ++invokespecialresolved = 247, 3 ++invokestaticresolved = 248, 3 ++ ++return_register_finalizer = 229, 0 ++ ++(nop) { ++ DISPATCH \seq_len ++} ++ ++(aconst_null,fconst_0) u4const_0 { ++ DISPATCH_START \seq_len ++ mov lr, #0 ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) iconst_N { ++ sub lr, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(lconst_0,dconst_0) u8const_0 { ++ DISPATCH_START \seq_len ++ mov tmp1, #0 ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(lconst_1) lconst_1 { ++ DISPATCH_START \seq_len ++ mov tmp2, #1 ++ DISPATCH_NEXT ++ mov tmp1, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++(fconst_1) fconst_1 { ++ DISPATCH_START \seq_len ++ mov tmp1, #0x3f800000 ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(fconst_2) fconst_2 { ++ DISPATCH_START \seq_len ++ mov r2, #0x40000000 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(dconst_1) dconst_1 { ++ DISPATCH_START \seq_len ++ mov tmp1, #0x3f000000 ++ DISPATCH_NEXT ++ orr tmp1, tmp1, #0x00f00000 ++ DISPATCH_NEXT ++ mov tmp2, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++(bipush) bipush { ++ DISPATCH_START \seq_len ++ mov tmp1, r2, lsl #24 ++ DISPATCH_NEXT ++ mov tmp1, tmp1, asr #24 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++# r1 = [jpc, #2] ++(sipush) sipush { ++ DISPATCH_START \seq_len ++ mov tmp1, r1 ++ DISPATCH_NEXT ++ mov r2, r2, lsl #24 ++ DISPATCH_NEXT ++ orr tmp1, tmp1, r2, asr #16 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,fload,aload) u4load { ++ DISPATCH_START \seq_len ++ rsb tmp1, r2, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(lload,dload) u8load { ++ DISPATCH_START \seq_len ++ sub r3, locals, r2, lsl #2 ++ DISPATCH_NEXT ++ ldmda r3, {tmp2, tmp1} ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++(aload_0,aload_1,aload_2,aload_3) { ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) { ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(fload_0,fload_1,fload_2,fload_3) { ++ rsb tmp1, r0, #opc_fload_0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(lload_0,dload_0) u8load_0 { ++ DISPATCH_START \seq_len ++ ldmda locals, {tmp2-tmp1} ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(lload_1,dload_1) u8load_1 { ++ DISPATCH_START \seq_len ++ ldmdb locals, {tmp2-tmp1} ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(lload_2,dload_2) u8load_2 { ++ DISPATCH_START \seq_len ++ ldr tmp2, [locals, #-12] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, #-8] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++(lload_3,dload_3) u8load_3 { ++ DISPATCH_START \seq_len ++ ldr tmp2, [locals, #-16] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, #-12] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload) u4aload { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry5: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ DISPATCH_NEXT ++ ldr tmp1, [r3, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(laload,daload) u8aload { ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry6: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #3 ++ ldr tmp2, [r3, #16] ++ DISPATCH_NEXT ++ ldr tmp1, [r3, #20] ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++(baload) baload { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry7: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2 ++ DISPATCH_NEXT ++ ldrsb tmp1, [r3, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(caload) caload { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry8: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #1 ++ DISPATCH_NEXT ++ ldrh tmp1, [r3, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(saload) saload { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry9: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #1 ++ DISPATCH_NEXT ++ ldrsh tmp1, [r3, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(astore,istore,fstore) u4store { ++ DISPATCH_START \seq_len ++ rsb tmp1, r2, #0 ++ DISPATCH_NEXT ++ POP r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(lstore,dstore) u8store { ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ sub r3, locals, r2, lsl #2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ stmda r3, {tmp2, tmp1} ++ DISPATCH_FINISH ++} ++ ++(astore_0,istore_0,fstore_0) u4store_0 { ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #0] ++ DISPATCH_FINISH ++} ++ ++(astore_1,istore_1,fstore_1) u4store_1 { ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #-4] ++ DISPATCH_FINISH ++} ++ ++(astore_2,istore_2,fstore_2) u4store_2 { ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #-8] ++ DISPATCH_FINISH ++} ++ ++(astore_3,istore_3,fstore_3) u4store_3 { ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #-12] ++ DISPATCH_FINISH ++} ++ ++(lstore_0,dstore_0) u8store_0 { ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ stmda locals, {tmp2, tmp1} ++ DISPATCH_FINISH ++} ++ ++(lstore_1,dstore_1) u8store_1 { ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ stmdb locals, {tmp2, tmp1} ++ DISPATCH_FINISH ++} ++ ++(lstore_2,dstore_2) u8store_2 { ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ str tmp2, [locals, #-12] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #-8] ++ DISPATCH_FINISH ++} ++ ++(lstore_3,dstore_3) u8store_3 { ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ str tmp2, [locals, #-16] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #-12] ++ DISPATCH_FINISH ++} ++ ++(iastore,fastore) u4astore { ++ POP3 r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry10: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp tmp2, lr ++ bcs array_bound_exception_jpc_1_tmp2 ++ DISPATCH_NEXT ++ add tmp1, tmp1, tmp2, lsl #2 ++ DISPATCH_NEXT ++ str r3, [tmp1, #12] ++ DISPATCH_FINISH ++} ++ ++(lastore,dastore) u8astore { ++ POP4 r2, r3, tmp2, tmp1 @ r2,r3 = value, tmp2 = index, tmp1 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry11: ++ ldr ip, [tmp1, #8] @ ip = limit ++ cmp tmp2, ip ++ DISPATCH_NEXT ++ bcs array_bound_exception_jpc_1_tmp2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2, lsl #3 ++ str r2, [tmp2, #16] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str r3, [tmp2, #20] ++ DISPATCH_FINISH ++} ++ ++(bastore) bastore { ++ POP3 r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry12: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp tmp2, lr ++ bcs array_bound_exception_jpc_1_tmp2 ++ DISPATCH_NEXT ++ add tmp1, tmp1, tmp2 ++ DISPATCH_NEXT ++ strb r3, [tmp1, #12] ++ DISPATCH_FINISH ++} ++ ++(castore,sastore) u2astore { ++ POP3 r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry13: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp tmp2, lr ++ bcs array_bound_exception_jpc_1_tmp2 ++ DISPATCH_NEXT ++ add tmp1, tmp1, tmp2, lsl #1 ++ DISPATCH_NEXT ++ strh r3, [tmp1, #12] ++ DISPATCH_FINISH ++} ++ ++(pop) jpop { ++ DISPATCH_START \seq_len ++ add stack, stack, #4 ++ DISPATCH_FINISH ++} ++ ++(pop2) jpop2 { ++ DISPATCH_START \seq_len ++ add stack, stack, #8 ++ DISPATCH_FINISH ++} ++ ++(dup) dup { ++ DISPATCH_START \seq_len ++ ldr lr, [stack, #4] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(dup_x1) dup_x1 { ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(dup_x2) dup_x2 { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, lr ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_NEXT ++ PUSH3 r2, r3, lr ++ DISPATCH_FINISH ++} ++ ++(dup2) dup2 { ++ DISPATCH_START \seq_len ++ ldmib stack, {r2, r3} ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(dup2_x1) dup2_x1 { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, lr ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_NEXT ++ PUSH3 r2, r3, lr ++ DISPATCH_FINISH ++} ++ ++(dup2_x2) dup2_x2 { ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ PUSH4 r2, r3, tmp1, lr ++ DISPATCH_FINISH ++} ++ ++(swap) swap { ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++ ++(iadd) iadd { ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ add tmp2, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(ladd) ladd { ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ adds r2, r2, tmp1 ++ adc r3, r3, lr ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(fadd) fadd { ++ POP2 r0, r1 ++ bl __aeabi_fadd ++ PUSH r0 ++ DISPATCH \seq_len ++} ++ ++(isub) isub { ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(lsub) lsub { ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ subs r2, tmp1, r2 ++ sbc r3, lr, r3 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(fsub) fsub { ++ POP r1 ++ POP r0 ++ bl __aeabi_fsub ++ PUSH r0 ++ DISPATCH \seq_len ++} ++ ++(imul) imul { ++ DISPATCH_START \seq_len ++ POP2 r2, tmp1 ++ DISPATCH_NEXT ++ mul tmp2, r2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(lmul) lmul { ++ POP4 r2, tmp1, ip, lr ++ umull r3, r0, ip, r2 ++ mla tmp1, ip, tmp1, r0 ++ DISPATCH_START \seq_len ++ mla tmp1, lr, r2, tmp1 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++} ++ ++(fmul) fmul { ++ POP2 r0, r1 ++ bl __aeabi_fmul ++ PUSH r0 ++ DISPATCH \seq_len ++} ++ ++(ldiv) ldiv { ++ POP2 r2, r3 ++ POP2 r0, r1 ++ orrs lr, r2, r3 ++ beq .ldiv_0 ++ bl __aeabi_ldivmod ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++} ++ ++(fdiv) fdiv { ++ POP r1 ++ POP r0 ++ bl __aeabi_fdiv ++ PUSH r0 ++ DISPATCH \seq_len ++} ++ ++(ddiv) ddiv { ++ POP2 r2, r3 ++ POP2 r0, r1 ++ bl __aeabi_ddiv ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++} ++ ++(lrem) lrem { ++ POP2 r2, r3 ++ POP2 r0, r1 ++ orrs lr, r2, r3 ++ beq .lrem_0 ++ bl __aeabi_ldivmod ++ PUSH2 r2, r3 ++ DISPATCH \seq_len ++} ++ ++(frem) frem { ++@ ECN: It must be possible to do better than this ++ POP r0 ++ bl __aeabi_f2d ++ PUSH2 r0, r1 ++ GET_STACK 2, r0 ++ bl __aeabi_f2d ++ POP2 r2, r3 ++ bl fmod ++ bl __aeabi_d2f ++ PUT_STACK 0, r0 ++ DISPATCH \seq_len ++} ++ ++(drem) drem { ++ POP2 r2, r3 ++ POP2 r0, r1 ++ bl fmod ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++} ++ ++(ineg) ineg { ++ DISPATCH_START \seq_len ++ POP tmp1 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(lneg) lneg { ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ rsbs r2, r2, #0 ++ rsc r3, r3, #0 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(fneg) fneg { ++ DISPATCH_START \seq_len ++ POP r2 ++ DISPATCH_NEXT ++ eor r2, r2, #0x80000000 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(dneg) dneg { ++ DISPATCH_START \seq_len ++ GET_STACK 1, r2 ++ DISPATCH_NEXT ++ eor r2, r2, #0x80000000 ++ DISPATCH_NEXT ++ PUT_STACK 1, r2 ++ DISPATCH_FINISH ++} ++ ++(ishl) ishl { ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ and r2, r2, #31 ++ mov r2, r3, lsl r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(lshl) lshl { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, lr ++ DISPATCH_NEXT ++ tst r2, #32 ++ and r2, r2, #31 ++ movne tmp1, #0 ++ movne lr, r3, lsl r2 ++ moveq tmp1, r3, lsl r2 ++ moveq lr, lr, lsl r2 ++ rsbeq r2, r2, #32 ++ orreq lr, lr, r3, lsr r2 ++ PUSH2 tmp1, lr ++ DISPATCH_FINISH ++} ++ ++(ishr) ishr { ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ and r2, r2, #31 ++ mov r2, r3, asr r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(lshr) lshr { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ tst r2, #32 ++ and r2, r2, #31 ++ movne lr, tmp1, asr #31 ++ movne r3, tmp1, asr r2 ++ moveq lr, tmp1, asr r2 ++ moveq r3, r3, lsr r2 ++ rsbeq r2, r2, #32 ++ orreq r3, r3, tmp1, lsl r2 ++ PUSH2 r3, lr ++ DISPATCH_FINISH ++} ++ ++(iushr) iushr { ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ and r2, r2, #31 ++ mov r2, r3, lsr r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(lushr) lushr { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ tst r2, #32 ++ and r2, r2, #31 ++ movne lr, #0 ++ movne r3, tmp1, lsr r2 ++ moveq lr, tmp1, lsr r2 ++ moveq r3, r3, lsr r2 ++ rsbeq r2, r2, #32 ++ orreq r3, r3, tmp1, lsl r2 ++ PUSH2 r3, lr ++ DISPATCH_FINISH ++} ++ ++(iand) iand { ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(land) land { ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ and r2, tmp1, r2 ++ and r3, lr, r3 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(ior) ior { ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(lor) lor { ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ orr r2, tmp1, r2 ++ orr r3, lr, r3 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(ixor) ixor { ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(lxor) lxor { ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ eor r2, tmp1, r2 ++ eor r3, lr, r3 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iinc) iinc { ++ ldrsb lr, [jpc, #2] ++ DISPATCH_START \seq_len ++ rsb tmp1, r2, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ add r3, r3, lr ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(i2l) i2l { ++ DISPATCH_START \seq_len ++ POP r2 ++ DISPATCH_NEXT ++ mov r3, r2, asr #31 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(i2f) i2f { ++ POP r0 ++ bl __aeabi_i2f ++ PUSH r0 ++ DISPATCH \seq_len ++} ++ ++(i2d) i2d { ++ POP r0 ++ bl __aeabi_i2d ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++} ++ ++(l2i) l2i { ++ DISPATCH_START \seq_len ++ POP r3 ++ DISPATCH_NEXT ++ PUT_STACK 0, r3 ++ DISPATCH_FINISH ++} ++ ++(l2f) l2f { ++ POP2 r0, r1 ++ bl __aeabi_l2f ++ PUSH r0 ++ DISPATCH \seq_len ++} ++ ++(l2d) l2d { ++ POP2 r0, r1 ++ bl __aeabi_l2d ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++} ++ ++(f2i) f2i { ++ POP r0 ++ bl _ZN13SharedRuntime3f2iEf ++ PUSH r0 ++ DISPATCH \seq_len ++} ++ ++(f2l) f2l { ++ POP r0 ++ bl _ZN13SharedRuntime3f2lEf ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++} ++ ++(f2d) f2d { ++ POP r0 ++ bl __aeabi_f2d ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++} ++ ++(d2i) d2i { ++ POP2 r0, r1 ++ bl _ZN13SharedRuntime3d2iEd ++ PUSH r0 ++ DISPATCH \seq_len ++} ++ ++(d2l) d2l { ++ POP2 r0, r1 ++ bl _ZN13SharedRuntime3d2lEd ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++} ++ ++(d2f) d2f { ++ POP2 r0, r1 ++ bl __aeabi_d2f ++ PUSH r0 ++ DISPATCH \seq_len ++} ++ ++(i2b) i2b { ++ DISPATCH_START \seq_len ++ POP r3 ++ DISPATCH_NEXT ++ mov r3, r3, asl #24 ++ mov r3, r3, asr #24 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(i2c) i2c { ++ DISPATCH_START \seq_len ++ POP r3 ++ DISPATCH_NEXT ++ mov r3, r3, asl #16 ++ mov r3, r3, lsr #16 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(i2s) i2s { ++ DISPATCH_START \seq_len ++ POP r3 ++ DISPATCH_NEXT ++ mov r3, r3, asl #16 ++ mov r3, r3, asr #16 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(lcmp) lcmp { ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_START \seq_len ++ subs r2, tmp1, r2 ++ movne r2, #1 ++ sbcs lr, lr, r3 ++ DISPATCH_NEXT ++ movne r2, #1 ++ rsblt r2, r2, #0 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(fcmpl) fcmpl { ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmpgt ++ cmp r0, #0 ++ movne r3, #-1 ++ bne 3f ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmplt ++ cmp r0, #0 ++ movne r3, #1 ++ bne 3f ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmpeq ++ cmp r0, #0 ++ movne r3, #0 ++ moveq r3, #-1 ++3: ++ DISPATCH_START \seq_len ++ add stack, stack, #8 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(fcmpg) fcmpg { ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmpgt ++ cmp r0, #0 ++ movne r3, #-1 ++ bne 4f ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmplt ++ cmp r0, #0 ++ movne r3, #1 ++ bne 4f ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmpeq ++ cmp r0, #0 ++ movne r3, #0 ++ moveq r3, #1 ++4: ++ DISPATCH_START \seq_len ++ add stack, stack, #8 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(dcmpl) dcmpl { ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmpgt ++ cmp r0, #0 ++ movne r3, #-1 ++ bne 5f ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmplt ++ cmp r0, #0 ++ movne r3, #1 ++ bne 5f ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmpeq ++ cmp r0, #0 ++ movne r3, #0 ++ moveq r3, #-1 ++5: ++ DISPATCH_START \seq_len ++ add stack, stack, #16 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(dcmpg) dcmpg { ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmpgt ++ cmp r0, #0 ++ movne r3, #-1 ++ bne 6f ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmplt ++ cmp r0, #0 ++ movne r3, #1 ++ bne 6f ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmpeq ++ cmp r0, #0 ++ movne r3, #0 ++ moveq r3, #1 ++6: ++ DISPATCH_START \seq_len ++ add stack, stack, #16 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++# r1 = [jpc, #2] ++(ifeq,ifnull) ifeq_unsafe { ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ifne,ifnonnull) ifne_unsafe { ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iflt) iflt_unsafe { ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ifge) ifge_unsafe { ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ifgt) ifgt_unsafe { ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ifle) ifle_unsafe { ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(if_icmpeq,if_acmpeq) if_icmpeq_unsafe { ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(if_icmpne,if_acmpne) if_icmpne_unsafe { ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(if_icmplt) if_icmplt_unsafe { ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(if_icmpge) if_icmpge_unsafe { ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(if_icmpgt) if_icmpgt_unsafe { ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(if_icmple) if_icmple_unsafe { ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(goto) goto_unsafe { ++ mov r2, r2, lsl #24 ++ orr ip, r1, r2, asr #16 ++ DISPATCH_START_REG ip ++ DISPATCH_BYTECODE ++} ++ ++(jsr) jsr { ++ ldr r3, [istate, #ISTATE_METHOD] ++ ldr r1, [r3, #8] ++ rsb r2, r1, jpc ++ sub r2, r2, #45 ++ PUSH r2 ++ b do_goto_safe ++} ++ ++# r2 = [jpc, #1] ++# r1 = [jpc, #2] ++(ret) ret { ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [r0, #8] ++ ldr r1, [locals, -r2, lsl #2] ++ add jpc, r3, r1 ++ DISPATCH 48 ++} ++ ++# ECN: We dont do safe and unsafe versions of tableswitch and lookupswitch ++(tableswitch) tableswitch { ++ POP a2 ++ bic a1, jpc, #3 ++ ldr a4,[a1,#8] ++@ BYTESEX_REVERSE a3, a4, a3 ++ ++ eor a3, a4, a4, ror #16 ++ bic a3, a3, #0xff0000 ++ mov a4, a4, ror #8 ++ eor a3, a4, a3, lsr #8 ++ ++ ldr a4,[a1,#12] ++@ BYTESEX_REVERSE a4, a4, ip ++ ++ eor ip, a4, a4, ror #16 ++ bic ip, ip, #0xff0000 ++ mov a4, a4, ror #8 ++ eor a4, a4, ip, lsr #8 ++ ++ sub a2,a2,a3 ++ sub a4,a4,a3 ++ cmp a4,a2 ++ ldrcc a1,[a1,#4] ++ addcs a1,a1,a2,LSL #2 ++ ldrcs a1,[a1,#16] ++@ BYTESEX_REVERSE a1, a1, a4 ++ ++ eor a4, a1, a1, ror #16 ++ bic a4, a4, #0xff0000 ++ mov a1, a1, ror #8 ++ eors ip, a1, a4, lsr #8 ++ ++ DISPATCH_START_REG ip ++ DISPATCH_BYTECODE ++} ++ ++(lookupswitch) lookupswitch { ++ POP a2 ++ bic a1, jpc, #3 ++@ BYTESEX_REVERSE a2, a2, ip ++ ++ eor ip, a2, a2, ror #16 ++ bic ip, ip, #0xff0000 ++ mov a2, a2, ror #8 ++ eor a2, a2, ip, lsr #8 ++ ++ ldr a3,[a1,#8] ++@ BYTESEX_REVERSE a3, a3, ip ++ ++ eor ip, a3, a3, ror #16 ++ bic ip, ip, #0xff0000 ++ mov a3, a3, ror #8 ++ eor a3, a3, ip, lsr #8 ++ ++ subs a4,a3,#1 ++ bmi 1f ++ add a1, a1, #4 ++0: ++ ldr a3,[a1,#8]! ++ cmp a3,a2 ++ beq 2f ++ subs a4,a4,#1 ++ bpl 0b ++1: ++ bic a1, jpc, #3 ++2: ++ ldr a2,[a1,#4] ++@ BYTESEX_REVERSE a2, a2, ip ++ ++ eor ip, a2, a2, ror #16 ++ bic ip, ip, #0xff0000 ++ mov a2, a2, ror #8 ++ eors ip, a2, ip, lsr #8 ++ ++ DISPATCH_START_REG ip ++ DISPATCH_BYTECODE ++} ++ ++(igetfield) igetfield { ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP tmp1 ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry78: ++ ldr tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(bgetfield) bgetfield { ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP tmp1 ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry79: ++ ldrsb tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(cgetfield) cgetfield { ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP tmp1 ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry80: ++ ldrh tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(sgetfield) sgetfield { ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP tmp1 ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry81: ++ ldrsh tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(lgetfield) lgetfield { ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP tmp1 ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++.abortentry82: ++ ldmia tmp2, {tmp2, tmp1} ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++(iputfield) iputfield { ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP2 r3, tmp1 @ r3 = value, tmp1 = object ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++.abortentry83: ++ str r3, [tmp1, tmp2] ++ DISPATCH_FINISH ++} ++ ++(cputfield) cputfield { ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP2 r3, tmp1 @ r3 = value, tmp1 = object ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++.abortentry84: ++ strh r3, [tmp1, tmp2] ++ DISPATCH_FINISH ++} ++ ++(bputfield) bputfield { ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP2 r3, tmp1 @ r3 = value, tmp1 = object ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++.abortentry85: ++ strb r3, [tmp1, tmp2] ++ DISPATCH_FINISH ++} ++ ++(aputfield) aputfield { ++ GET_STACK 1, r0 @ r0 = object ++ add tmp2, constpool, r1, lsl #12 ++ POP r1 @ r1 = value ++ add tmp2, tmp2, r2, lsl #4 ++ ldr tmp2, [tmp2, #8] ++ cmp r0, #0 ++ beq null_ptr_exception ++ add r0, r0, tmp2 ++ bl oop_store ++ ldr r3, [dispatch, #Universe_collectedHeap_Address-XXX] ++ DISPATCH_START 3 ++ POP r2 ++ ldr r3, [r3, #0] ++ DISPATCH_NEXT ++ ldr r3, [r3, #12] ++ DISPATCH_NEXT ++ ldr r3, [r3, #76] ++ mov tmp2, #0 ++ strb tmp2, [r3, r2, lsr #9] ++ DISPATCH_FINISH ++} ++ ++(lputfield) lputfield { ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP3 r3, tmp1, lr @ r3, tmp1 = value, lr = object ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ add tmp2, lr, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++.abortentry86: ++ stm tmp2, {r3, tmp1} ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++# r1 = [jpc, #2] ++(getstatic) getstatic { ++ DISPATCH_START \seq_len ++ add tmp2, constpool, r1, lsl #12 ++ ldr r3, [tmp2, r2, lsl #4]! @ tmp2 = cache, r3 = flags ++ DISPATCH_NEXT ++ and r3, r3, #0x00ff0000 ++ cmp r3, #178 << 16 ++ bne resolve_getstatic ++ ldr r3, [tmp2, #4] ++ ldr r2, [tmp2, #12] ++ ldr lr, [tmp2, #8] ++ movs r2, r2, lsr #29 ++ bhi getstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 ++ bcs getstatic_h @ C = 1 => R2 = 1 ++ beq getstatic_sb @ Z = 1 => R2 = 0 ++ tst r2, #2 ++ bne getstatic_dw ++ b getstatic_sh ++} ++ ++# r2 = [jpc, #1] ++# r1 = [jpc, #2] ++(putstatic) putstatic { ++ DISPATCH_START \seq_len ++ add tmp2, constpool, r1, lsl #12 ++ ldr r3, [tmp2, r2, lsl #4]! @ tmp2 = cache, r3 = flags ++ DISPATCH_NEXT ++ and r3, r3, #0xff000000 ++ cmp r3, #179 << 24 ++ bne resolve_putstatic ++ ldr r3, [tmp2, #4] @ r3 = object ++ ldr lr, [tmp2, #12] @ lr = tos_type ++ ldr r2, [tmp2, #8] @ r2 = offset ++ movs lr, lr, lsr #29 ++ bhi putstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 ++ bcs putstatic_h @ C = 1 => R2 = 1 ++ beq putstatic_sb @ Z = 1 => R2 = 0 ++ tst lr, #2 ++ bne putstatic_dw ++ b putstatic_sh ++} ++ ++(return) return_unsafe { ++ ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ++ ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [r2, #0] ++ ldrh r0, [r0, #40] ++ add r1, r2, #4 ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ add stack, r1, r0, lsl #2 ++ cmp istate, #0 ++ beq normal_return ++ ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT ++ add r2, r2, #4 ++ DISPATCH_NEXT ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ bl return_check_monitors ++ b 2b ++} ++ ++(ireturn,areturn,freturn) ireturn_unsafe { ++ ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ++ POP r1 @ pop result before we lose stack ++ ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ bl return_check_monitors ++ b 2b ++} ++ ++(lreturn,dreturn) lreturn_unsafe { ++ ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ++ ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [r2, #0] ++ ldrh r0, [r0, #40] ++ add r1, r2, #4 ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ ++ POP2 r2, r3 ++ ++ add stack, r1, r0, lsl #2 ++ stmdb stack!, {r2, r3} ++ cmp istate, #0 ++ beq normal_return ++ ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT ++ add r2, r2, #4 ++ DISPATCH_NEXT ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ bl return_check_monitors ++ b 2b ++} ++ ++(ldc) ldc { ++ ldrb lr, [jpc, #1] ++ ldr r3, [istate, #ISTATE_METHOD] @ method ++ ++ DISPATCH_START \seq_len ++ ++ ldr r2, [r3, #12] @ constants ++ ldr r3, [r2, #8] ++ add r3, r3, #12 ++ ldrb r3, [r3, lr] ++ ++ DISPATCH_NEXT ++ ++ cmp r3, #JVM_CONSTANT_Integer ++ cmpne r3, #JVM_CONSTANT_Float ++ cmpne r3, #JVM_CONSTANT_String ++ bne 1f ++ ++ DISPATCH_NEXT ++ ++ add r3, r2, lr, lsl #2 ++ ldr lr, [r3, #32] ++ PUSH lr ++ DISPATCH_FINISH ++1: ++ cmp r3, #JVM_CONSTANT_Class ++ bne 2f ++ add r0, r2, #32 ++ ldr r0, [r0, lr, lsl #2] ++ ldr r1, [r0, #60] ++ PUSH r1 ++ DISPATCH 0 ++2: ++ sub jpc, jpc, #\seq_len ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ mov r1, #0 ++ bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb ++ ldr r0, [istate, #ISTATE_THREAD] @ thread ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr r1, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ cmp r1, #0 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++ ldr r3, [r0, #THREAD_VM_RESULT] ++ mov r2, #0 ++ PUSH r3 ++ str r2, [r0, #THREAD_VM_RESULT] ++ DISPATCH \seq_len ++} ++ ++(ldc_w) ldc_w { ++ ldrb lr, [jpc, #1] ++ ++ ldr r3, [istate, #ISTATE_METHOD] @ method ++ ldrb ip, [jpc, #2] ++ ldr r2, [r3, #12] @ constants ++ ++ DISPATCH_START \seq_len ++ ++ ldr r3, [r2, #8] ++ orr lr, ip, lr, lsl #8 ++ add r3, r3, #12 ++ ldrb r3, [r3, lr] ++ ++ DISPATCH_NEXT ++ ++ cmp r3, #JVM_CONSTANT_Integer ++ cmpne r3, #JVM_CONSTANT_Float ++ cmpne r3, #JVM_CONSTANT_String ++ bne 1f ++ ++ DISPATCH_NEXT ++ ++ add r3, r2, lr, lsl #2 ++ ldr lr, [r3, #32] ++ PUSH lr ++ DISPATCH_FINISH ++1: ++ cmp r3, #JVM_CONSTANT_Class ++ bne 2f ++ add r0, r2, #32 ++ ldr r0, [r0, lr, lsl #2] ++ ldr r1, [r0, #60] ++ PUSH r1 ++ DISPATCH 0 ++2: ++ sub jpc, jpc, #\seq_len ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ mov r1, #1 ++ bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb ++ ldr r0, [istate, #ISTATE_THREAD] @ thread ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr r1, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ cmp r1, #0 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++ ldr r3, [r0, #THREAD_VM_RESULT] ++ mov r2, #0 ++ PUSH r3 ++ str r2, [r0, #THREAD_VM_RESULT] ++ DISPATCH \seq_len ++} ++ ++(ldc2_w) ldc2_w { ++ ldrb r3, [jpc, #1] ++ ++ ldr tmp1, [istate, #ISTATE_METHOD] @ method ++ ldrb lr, [jpc, #2] ++ ldr r2, [tmp1, #12] @ constants ++ ++ DISPATCH_START \seq_len ++ ++ ldr tmp1, [r2, #8] ++ orr r3, lr, r3, lsl #8 ++ add tmp1, tmp1, #12 ++ ldrb tmp1, [tmp1, r3] ++ ++ DISPATCH_NEXT ++ ++ cmp tmp1, #JVM_CONSTANT_Long ++ cmpne tmp1, #JVM_CONSTANT_Double ++ bne vm_fatal_error ++ ++ DISPATCH_NEXT ++ add tmp1, r2, r3, lsl #2 ++ add tmp1, tmp1, #32 ++ ldmia tmp1, {r3, tmp1} ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++} ++ ++(iadd_u4store) { ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(isub_u4store) { ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iand_u4store) { ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(ior_u4store) { ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(ixor_u4store) { ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iadd_istore_N) { ++ ldrb lr, [jpc, #1] ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ rsb r3, lr, #opc_istore_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(isub_istore_N) { ++ ldrb lr, [jpc, #1] ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ rsb r3, lr, #opc_istore_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iand_istore_N) { ++ ldrb lr, [jpc, #1] ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ rsb r3, lr, #opc_istore_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(ior_istore_N) { ++ ldrb lr, [jpc, #1] ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ rsb r3, lr, #opc_istore_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(ixor_istore_N) { ++ ldrb lr, [jpc, #1] ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ rsb r3, lr, #opc_istore_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload_iconst_N) ++{ ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ rsb r2, r2, #0 ++ DISPATCH_NEXT ++ sub r3, r3, #opc_iconst_0 ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++# (aload_N)(getfield) ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++{ ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb r3, [jpc, #2] ++ add tmp2, constpool, r2, lsl #12 ++ DISPATCH_START 4 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, r3, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ DISPATCH_NEXT ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry87: ++ ldr tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++############################################################################### ++# ECN: Optimised bytecode pairs ++############################################################################### ++ ++# --- ECN: load; load --------------------------------------------------------- ++ ++(aload_0,aload_1,aload_2,aload_3) ++(aload_0,aload_1,aload_2,aload_3) ++{ ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_aload_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(iload_0,iload_1,iload_2,iload_3) ++{ ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_iload_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(aload_0,aload_1,aload_2,aload_3) ++{ ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_aload_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++# 7 cycles ++(iload_0,iload_1,iload_2,iload_3) ++(iload_0,iload_1,iload_2,iload_3) ++{ ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_iload_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(iload,aload,fload) ++{ ++ ldrb r3, [jpc, #2] ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(iload,aload,fload) ++{ ++ ldrb r3, [jpc, #2] ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload) ++(aload_0,aload_1,aload_2,aload_3) ++{ ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_aload_0 ++ DISPATCH_NEXT ++ rsb tmp1, r2, #0 ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload) ++(iload_0,iload_1,iload_2,iload_3) ++{ ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_iload_0 ++ DISPATCH_NEXT ++ rsb tmp1, r2, #0 ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload)(iload,aload,fload) { ++ ldrb tmp2, [jpc, #3] ++ rsb tmp1, r2, #0 ++ DISPATCH_START \seq_len ++ rsb tmp2, tmp2, #0 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++} ++ ++# --- ECN: load; store -------------------------------------------------------- ++ ++(aload_0,aload_1,aload_2,aload_3) ++(astore_0,astore_1,astore_2,astore_3) ++{ ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_astore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(istore_0,istore_1,istore_2,istore_3) ++{ ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(astore,istore,fstore) ++{ ++ ldrb tmp2, [jpc, #2] ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, tmp2, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(astore,istore,fstore) ++{ ++ ldrb tmp2, [jpc, #2] ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, tmp2, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload) ++(astore_0,astore_1,astore_2,astore_3) ++{ ++ DISPATCH_START \seq_len ++ rsb tmp1, r1, #opc_astore_0 ++ DISPATCH_NEXT ++ rsb tmp2, r2, #0 ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload) ++(istore_0,istore_1,istore_2,istore_3) ++{ ++ DISPATCH_START \seq_len ++ rsb tmp1, r1, #opc_istore_0 ++ DISPATCH_NEXT ++ rsb tmp2, r2, #0 ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload)(astore,istore,fstore) { ++ ldrb tmp1, [jpc, #3] ++ rsb tmp2, r2, #0 ++ DISPATCH_START \seq_len ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++# --- ECN: load; const ------------------------------------------------------- ++ ++(aload_0,aload_1,aload_2,aload_3) ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) ++{ ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ sub tmp2, r1, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) ++{ ++ add r0, r0, #opc_iload_0_iconst_N-opc_iload_0 ++ strb r0, [jpc] ++ b do_iload_0_iconst_N ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload) ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) ++{ ++ cmp r0, #opc_iload ++ DISPATCH_START \seq_len ++ sub r3, r1, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ beq 1f ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++1: ++ mov tmp1, #opc_iload_iconst_N ++ strb tmp1, [jpc, #-\seq_len]! ++ b do_iload_iconst_N ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(bipush) ++{ ++ ldrsb r2, [jpc, #2] ++ rsb r3, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(bipush) ++{ ++ ldrsb r2, [jpc, #2] ++ rsb r3, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(sipush) ++{ ++ ldrsb r2, [jpc, #2] @ zero_extendqisi2 ++ ldrb lr, [jpc, #3] @ zero_extendqisi2 ++ rsb r3, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ orr r2, lr, r2, asl #8 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(sipush) ++{ ++ ldrsb r2, [jpc, #2] @ zero_extendqisi2 ++ ldrb lr, [jpc, #3] @ zero_extendqisi2 ++ rsb r3, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ orr r2, lr, r2, asl #8 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload)(bipush) { ++ ldrsb r3, [jpc, #3] ++ DISPATCH_START \seq_len ++ ldr lr, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ PUSH2 r3, lr ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload)(sipush) { ++ ldrsb r3, [jpc, #3] ++ ldrb lr, [jpc, #4] ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, -r2, lsl #2] ++ orr r3, lr, r3, asl #8 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++} ++ ++# --- ECN: load; Xaload ------------------------------------------------------- ++ ++(iload_0,iload_1,iload_2,iload_3) ++(iaload,aaload,faload) ++{ ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry19: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #2 ++ ldr lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload)(iaload,aaload,faload) { ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry20: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #2 ++ ldr lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(baload) ++{ ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry21: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2 ++ ldrsb lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(caload) ++{ ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry22: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #1 ++ ldrh lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(saload) ++{ ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry23: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #1 ++ ldrsh lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload)(baload) { ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry24: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2 ++ ldrsb lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload)(caload) { ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry25: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #1 ++ ldrh lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload,aload,fload)(saload) { ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry26: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #1 ++ ldrsh lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++# --- ECN: load; Xastore ------------------------------------------------------- ++ ++(iload_0,iload_1,iload_2,iload_3) ++(iastore,fastore) ++{ ++ POP2 r2, r3 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry27: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(bastore) ++{ ++ POP2 r2, r3 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry28: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2 ++ strb tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(castore,sastore) ++{ ++ POP2 r2, r3 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry29: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #1 ++ strh tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(iastore,fastore) { ++ POP2 r3, tmp1 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry30: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r3, lr ++ bcs array_bound_exception_jpc_1_r3 ++ DISPATCH_NEXT ++ add tmp1, tmp1, r3, lsl #2 ++ str r2, [tmp1, #12] ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(bastore) { ++ POP2 r3, tmp1 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry31: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r3, lr ++ bcs array_bound_exception_jpc_1_r3 ++ DISPATCH_NEXT ++ add tmp1, tmp1, r3 ++ strb r2, [tmp1, #12] ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(castore,sastore) { ++ POP2 r3, tmp1 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry32: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r3, lr ++ bcs array_bound_exception_jpc_1_r3 ++ DISPATCH_NEXT ++ add tmp1, tmp1, r3, lsl #1 ++ strh r2, [tmp1, #12] ++ DISPATCH_FINISH ++} ++ ++# --- ECN: load; dataop ------------------------------------------------------- ++ ++(iload_0,iload_1,iload_2,iload_3) ++(iadd) ++{ ++ POP tmp2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(iadd) { ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ POP tmp1 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(isub) ++{ ++ POP tmp2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(isub) { ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ POP tmp1 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(imul) ++{ ++ POP r2 ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ mul r3, r2, lr ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(imul) { ++ DISPATCH_START \seq_len ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ mul lr, r3, r2 ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(idiv) ++{ ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ add jpc, jpc, #1 ++ POP r1 ++ b int_div ++} ++ ++(iload,aload,fload)(idiv) { ++ add jpc, jpc, #2 ++ POP r1 ++ ldr r0, [locals, -r2, lsl #2] ++ b int_div ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(irem) ++{ ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ add jpc, jpc, #1 ++ POP r1 ++ b int_rem ++} ++ ++(iload,aload,fload)(irem) { ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ POP r1 ++ b int_rem ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ineg) ++{ ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ rsb lr, lr, #0 ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(ineg) { ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ rsb r2, r2, #0 ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ishl) ++{ ++ POP r2 ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ mov lr, r2, lsl lr ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(ishl) { ++ DISPATCH_START \seq_len ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ mov r2, r3, lsl r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ishr) ++{ ++ POP r2 ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ mov lr, r2, asr lr ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(ishr) { ++ DISPATCH_START \seq_len ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ mov r2, r3, asr r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(iushr) ++{ ++ POP r2 ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ mov lr, r2, lsr lr ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(iushr) { ++ ldrb r2, [jpc, #1] ++ DISPATCH_START \seq_len ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ mov r2, r3, lsr r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(iand) ++{ ++ POP tmp2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ and tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(iand) { ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ POP tmp1 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ior) ++{ ++ POP tmp2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ orr tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(ior) { ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ POP tmp1 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ixor) ++{ ++ POP tmp2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ eor tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(ixor) { ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ POP tmp1 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(i2c) ++{ ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ mov lr, lr, asl #16 ++ mov lr, lr, lsr #16 ++ PUSH lr ++ DISPATCH_FINISH ++} ++ ++(iload,aload,fload)(i2c) { ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ mov r2, r2, asl #16 ++ mov r2, r2, lsr #16 ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++# --- ECN: load; branch ------------------------------------------------------- ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ifeq,ifnull) ++{ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(ifeq,ifnull) { ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ifne,ifnonnull) ++{ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(ifne,ifnonnull) { ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(iflt) ++{ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(iflt) { ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ifge) ++{ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(ifge) { ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ifgt) ++{ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(ifgt) { ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ifle) ++{ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(ifle) { ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(if_icmpeq,if_acmpeq) ++{ ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(if_icmpeq,if_acmpeq) { ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(if_icmpne,if_acmpne) ++{ ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(if_icmpne,if_acmpne) { ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(if_icmplt) ++{ ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(if_icmplt) { ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(if_icmpge) ++{ ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(if_icmpge) { ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(if_icmpgt) ++{ ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(if_icmpgt) { ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(if_icmple) ++{ ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload,aload,fload)(if_icmple) { ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++# --- ECN: load; return/invoke ------------------------------------------------- ++ ++(iload_0,iload_1,iload_2,iload_3) ++(ireturn,areturn,freturn) ++{ ++ rsb r0, r0, #opc_iload_0 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr r1, [locals, r0, lsl #2] ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++} ++ ++(iload,aload,fload)(ireturn,areturn,freturn) { ++ ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr r1, [locals, -r2, lsl #2] ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #2 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(invokeresolved) ++{ ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokeresolved ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(invokeresolved) ++{ ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_aload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokeresolved ++} ++ ++(iload,aload,fload)(invokeresolved) { ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokeresolved ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(invokevfinal) ++{ ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokevfinal ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(invokevfinal) ++{ ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_aload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokevfinal ++} ++ ++(iload,aload,fload)(invokevfinal) { ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokevfinal ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(invokespecialresolved) ++{ ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokespecialresolved ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(invokespecialresolved) ++{ ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_aload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokespecialresolved ++} ++ ++(iload,aload,fload)(invokespecialresolved) { ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokespecialresolved ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(invokestaticresolved) ++{ ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokestaticresolved ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(invokestaticresolved) ++{ ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_aload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokestaticresolved ++} ++ ++(iload,aload,fload)(invokestaticresolved) { ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokestaticresolved ++} ++ ++(iload_0,iload_1,iload_2,iload_3) ++(invokeinterface) ++{ ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ PUSH r0 ++ b do_invokeinterface ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(invokeinterface) ++{ ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_aload_0 ++ ldr r0, [locals, r0, lsl #2] ++ PUSH r0 ++ b do_invokeinterface ++} ++ ++(iload,aload,fload)(invokeinterface) { ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ PUSH r0 ++ b do_invokeinterface ++} ++ ++(aload_0,aload_1,aload_2,aload_3) ++(igetfield) ++{ ++ add r0, r0, #opc_iaccess_0-opc_aload_0 ++ strb r0, [jpc] ++ DISPATCH_BYTECODE ++} ++ ++# 13 cycles ++(iload,aload,fload)(igetfield) { ++ ldrb ip, [jpc, #4] ++ rsb tmp1, r2, #0 ++ ldrb r3, [jpc, #3] ++ add tmp2, constpool, ip, lsl #12 ++ DISPATCH_START 5 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, r3, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ DISPATCH_NEXT ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry88: ++ ldr tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++# --- ECN: iconst; store ------------------------------------------------- ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) ++(istore_0,istore_1,istore_2,istore_3) ++{ ++ sub r3, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ rsb r2, r1, #opc_istore_0 ++ str r3, [locals, r2, lsl #2] ++ DISPATCH_BYTECODE ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(astore,istore,fstore) { ++ ldrb r2, [jpc, #2] ++ sub r3, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ str r3, [locals, -r2, lsl #2] ++ DISPATCH_BYTECODE ++} ++ ++# --- ECN: iconst; dataop ------------------------------------------------- ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(iadd) { ++ sub tmp1, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ POP tmp2 ++ DISPATCH_NEXT ++ add tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(isub) { ++ sub tmp1, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ POP tmp2 ++ DISPATCH_NEXT ++ sub tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(idiv) { ++ subs lr, r0, #opc_iconst_2 ++ DISPATCH_START \seq_len ++ POP tmp1 ++ DISPATCH_NEXT ++ beq 5f ++ bcc 3f ++ cmp lr, #(opc_iconst_4-opc_iconst_2) ++ beq 4f ++ bcc 2f ++@ divide by 5 ++1: ++ mvn lr, #0x198 @ Form 0x66666667 in lr ++ bic lr, lr, #0x9800 ++ add lr, lr, lr, lsl #16 ++ smull a3, a4, tmp1, lr ++ mov a3, tmp1, asr #31 ++ rsb tmp1, a3, a4, asr #1 ++ b 6f ++@ divide by 3 ++2: ++ mvn lr, #0xa9 @ Form 0x55555556 in lr ++ bic lr, lr, #0xaa00 ++ add lr, lr, lr, lsl #16 ++ smull a3, a4, tmp1, lr ++ sub tmp1, a4, tmp1, asr #31 ++ b 6f ++3: ++ cmp lr, #(opc_iconst_0-opc_iconst_2) ++ beq .iconst_div_rem_0 ++ rsbcc tmp1, tmp1, #0 @ Divide by -1 or 1 ++ b 6f ++@ divide by 4 ++4: movs a4, tmp1 ++ addmi a4, a4, #3 ++ mov tmp1, a4, asr #2 ++ b 6f ++@ divide by 2 ++5: ++ add tmp1, tmp1, tmp1, lsr #31 ++ mov tmp1, tmp1, asr #1 ++6: ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(ishl) { ++ sub tmp1, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ POP r2 ++ DISPATCH_NEXT ++ mov tmp1, r2, lsl tmp1 ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++# --- ECN: iconst; branch ------------------------------------------------- ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpeq) { ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpne) { ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmplt) { ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpge) { ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmpgt) { ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(if_icmple) { ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(ireturn) { ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ sub r1, r0, #opc_iconst_0 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokeresolved) { ++ add jpc, jpc, #1 ++ sub r0, r0, #opc_iconst_0 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokeresolved ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokevfinal) { ++ add jpc, jpc, #1 ++ sub r0, r0, #opc_iconst_0 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokevfinal ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokestaticresolved) { ++ add jpc, jpc, #1 ++ sub r0, r0, #opc_iconst_0 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokestaticresolved ++} ++ ++(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5)(invokespecialresolved) { ++ add jpc, jpc, #1 ++ sub r0, r0, #opc_iconst_0 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokespecialresolved ++} ++ ++## --- Bytecode sequences iaload; xxx ----------------------------------------------- ++ ++(iaload,faload,aaload)(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) { ++ sub r2, r1, #opc_iconst_0 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry38: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(bipush) { ++ ldrsb r2, [jpc, #2] ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++.abortentry39: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_3_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(sipush) { ++ ldrsb r2, [jpc, #2] ++ ldrb tmp1, [jpc, #3] ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++ orr r2, tmp1, r2, lsl #8 ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_4 ++#endif ++.abortentry40: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_4_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(iload,fload,aload) { ++ ldrb r2, [jpc, #2] ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++.abortentry41: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_3_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload) ++(iload_0,iload_1,iload_2,iload_3) ++{ ++ rsb r2, r1, #opc_iload_0 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry42: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload) ++(aload_0,aload_1,aload_2,aload_3) ++{ ++ rsb r2, r1, #opc_aload_0 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry42_1: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(iaload,faload,aaload) ++{ ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry43: ++ ldr tmp1, [r3, #8] @ tmp1 = length ++ DISPATCH_START \seq_len ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_2 ++ add r3, r3, r2, lsl #2 ++ POP lr @ r2 = index, lr = arrayref ++ ldr r2, [r3, #12] ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry44: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr r2, [lr, #12] ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(astore,istore,fstore) { ++ ldrb r2, [jpc, #2] ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++.abortentry45: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_3_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ str r3, [locals, -r2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload) ++(istore_0,istore_1,istore_2,istore_3) { ++ rsb r2, r1, #opc_istore_0 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry46: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ str r3, [locals, r2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(iastore,fastore) { ++ POP2 r3, lr @ r3 = index, lr = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry47: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_START \seq_len ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr tmp1, [lr, #12] ++ ++ POP2 r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry48: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(bastore) { ++ POP2 r3, lr @ r3 = index, lr = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry49: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_START \seq_len ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr tmp1, [lr, #12] ++ ++ POP2 r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry50: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2 ++ strb tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(castore,sastore) { ++ POP2 r3, lr @ r3 = index, lr = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry51: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_START \seq_len ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr tmp1, [lr, #12] ++ ++ POP2 r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry52: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #1 ++ strh tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(iand) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry58: ++ ldr tmp1, [r3, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_2 ++ add r3, r3, r2, lsl #2 ++ ldr tmp1, [r3, #12] @ tmp1 = tos ++ POP r2 @ r2 = tosm1 ++ DISPATCH_NEXT ++ and tmp1, r2, tmp1 @ tosm1 tos ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(ior) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry59: ++ ldr tmp1, [r3, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_2 ++ add r3, r3, r2, lsl #2 ++ ldr tmp1, [r3, #12] @ tmp1 = tos ++ POP r2 @ r2 = tosm1 ++ DISPATCH_NEXT ++ orr tmp1, r2, tmp1 @ tosm1 tos ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(ixor) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry60: ++ ldr tmp1, [r3, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_2 ++ add r3, r3, r2, lsl #2 ++ ldr tmp1, [r3, #12] @ tmp1 = tos ++ POP r2 @ r2 = tosm1 ++ DISPATCH_NEXT ++ eor tmp1, r2, tmp1 @ tosm1 tos ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iaload,faload,aaload)(ifeq,ifnull) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry61: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(ifne,ifnonnull) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry62: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(iflt) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry63: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(ifge) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry64: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(ifgt) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry65: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(ifle) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry66: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(if_icmpeq,if_acmpeq) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry67: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(if_icmpne,if_acmpne) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry68: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(if_icmplt) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry69: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(if_icmpge) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry70: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(if_icmpgt) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry71: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaload,faload,aaload)(if_icmple) { ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry72: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++# ---- iadd; xxx ------------------------------------------------------------ ++ ++(iadd)(iload,fload,aload) { ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(iadd) ++(iload_0,iload_1,iload_2,iload_3) ++{ ++ DISPATCH_START \seq_len ++ rsb r3, r1, #opc_iload_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(iadd)(iaload,aaload,faload) { ++ POP3 r2, r3, lr @ lr = ref ++ DISPATCH_START \seq_len ++ add r2, r3, r2 @ r2 = index ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry73: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr tmp1, [lr, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iadd)(istore) { ++ mov r0, #opc_iadd_u4store ++ strb r0, [jpc] ++ b do_iadd_u4store ++} ++ ++(iadd) ++(istore_0,istore_1,istore_2,istore_3) { ++ mov r0, #opc_iadd_istore_N ++ strb r0, [jpc] ++ b do_iadd_istore_N ++} ++ ++(iadd)(iastore,fastore) { ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++ add tmp1, r3, r2 @ tmp1 = value ++ POP2 r2, r3 @ r2, index, r3 = ref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry106: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(iadd)(iadd) { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ add tmp2, r3, r2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iadd)(isub) { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ add tmp2, r3, r2 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iadd)(ifeq,ifnull) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(ifne,ifnonnull) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(iflt) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(ifge) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(ifgt) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(ifle) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(if_icmpeq,if_acmpeq) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(if_icmpne,if_acmpne) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(if_icmplt) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(if_icmpge) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(if_icmpgt) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(if_icmple) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iadd)(goto) { ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++ POP2 r2, r3 ++ add r2, r3, r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(iadd)(ireturn) { ++ POP2 r2, r3 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ add r1, r3, r2 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++} ++ ++(iadd)(iinc) { ++ POP2 tmp1, lr ++ DISPATCH_START \seq_len ++ add tmp1, lr, tmp1 ++ ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc ++ ldrsb r2, [jpc, #-1] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ ldr tmp1, [locals, -r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp1, r2 ++ str tmp1, [locals, -r3, lsl #2] ++ DISPATCH_FINISH ++} ++# ---- sub; xxx ------------------------------------------------------------ ++ ++(isub)(iload,fload,aload) { ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(isub) ++(iload_0,iload_1,iload_2,iload_3) ++{ ++ DISPATCH_START \seq_len ++ rsb r3, r1, #opc_iload_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(isub)(iaload,aaload,faload) { ++ POP3 r2, r3, lr @ lr = ref ++ DISPATCH_START \seq_len ++ sub r2, r3, r2 @ r2 = index ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry74: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr tmp1, [lr, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(isub)(istore) { ++ mov r0, #opc_isub_u4store ++ strb r0, [jpc] ++ b do_isub_u4store ++} ++ ++(isub) ++(istore_0,istore_1,istore_2,istore_3) { ++ mov r0, #opc_isub_istore_N ++ strb r0, [jpc] ++ b do_isub_istore_N ++} ++ ++(isub)(iastore,fastore) { ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++ sub tmp1, r3, r2 @ tmp1 = value ++ POP2 r2, r3 @ r2, index, r3 = ref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry105: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(isub)(iadd) { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ sub tmp2, r3, r2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(isub)(isub) { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ sub tmp2, r3, r2 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(isub)(ifeq,ifnull) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(ifne,ifnonnull) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(iflt) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(ifge) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(ifgt) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(ifle) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(if_icmpeq,if_acmpeq) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(if_icmpne,if_acmpne) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(if_icmplt) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(if_icmpge) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(if_icmpgt) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(if_icmple) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(isub)(goto) { ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++ POP2 r2, r3 ++ sub r2, r3, r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(isub)(ireturn) { ++ POP2 r2, r3 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ sub r1, r3, r2 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++} ++ ++(isub)(iinc) { ++ POP2 tmp1, lr ++ DISPATCH_START \seq_len ++ sub tmp1, lr, tmp1 ++ ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc ++ ldrsb r2, [jpc, #-1] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ ldr tmp1, [locals, -r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp1, r2 ++ str tmp1, [locals, -r3, lsl #2] ++ DISPATCH_FINISH ++} ++# ---- iand; xxx ------------------------------------------------------------ ++ ++(iand)(iload,fload,aload) { ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(iand) ++(iload_0,iload_1,iload_2,iload_3) ++{ ++ DISPATCH_START \seq_len ++ rsb r3, r1, #opc_iload_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(iand)(iaload,aaload,faload) { ++ POP3 r2, r3, lr @ lr = ref ++ DISPATCH_START \seq_len ++ and r2, r3, r2 @ r2 = index ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry75: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr tmp1, [lr, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iand)(istore) { ++ mov r0, #opc_iand_u4store ++ strb r0, [jpc] ++ b do_iand_u4store ++} ++ ++(iand) ++(istore_0,istore_1,istore_2,istore_3) { ++ mov r0, #opc_iand_istore_N ++ strb r0, [jpc] ++ b do_iand_istore_N ++} ++ ++(iand)(iastore,fastore) { ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++ and tmp1, r3, r2 @ tmp1 = value ++ POP2 r2, r3 @ r2, index, r3 = ref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry107: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(iand)(iadd) { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ and tmp2, r3, r2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iand)(isub) { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ and tmp2, r3, r2 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iand)(ifeq,ifnull) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(ifne,ifnonnull) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(iflt) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(ifge) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(ifgt) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(ifle) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(if_icmpeq,if_acmpeq) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(if_icmpne,if_acmpne) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(if_icmplt) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(if_icmpge) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(if_icmpgt) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(if_icmple) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iand)(goto) { ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++ POP2 r2, r3 ++ and r2, r3, r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(iand)(ireturn) { ++ POP2 r2, r3 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ and r1, r3, r2 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++} ++ ++(iand)(iinc) { ++ POP2 tmp1, lr ++ DISPATCH_START \seq_len ++ and tmp1, lr, tmp1 ++ ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc ++ ldrsb r2, [jpc, #-1] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ ldr tmp1, [locals, -r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp1, r2 ++ str tmp1, [locals, -r3, lsl #2] ++ DISPATCH_FINISH ++} ++# ---- ior; xxx ------------------------------------------------------------ ++ ++(ior)(iload,fload,aload) { ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(ior) ++(iload_0,iload_1,iload_2,iload_3) ++{ ++ DISPATCH_START \seq_len ++ rsb r3, r1, #opc_iload_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(ior)(iaload,aaload,faload) { ++ POP3 r2, r3, lr @ lr = ref ++ DISPATCH_START \seq_len ++ orr r2, r3, r2 @ r2 = index ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry76: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr tmp1, [lr, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(ior)(istore) { ++ mov r0, #opc_ior_u4store ++ strb r0, [jpc] ++ b do_ior_u4store ++} ++ ++(ior) ++(istore_0,istore_1,istore_2,istore_3) { ++ mov r0, #opc_ior_istore_N ++ strb r0, [jpc] ++ b do_ior_istore_N ++} ++ ++(ior)(iastore,fastore) { ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++ orr tmp1, r3, r2 @ tmp1 = value ++ POP2 r2, r3 @ r2, index, r3 = ref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry108: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(ior)(iadd) { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ orr tmp2, r3, r2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(ior)(isub) { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ orr tmp2, r3, r2 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(ior)(ifeq,ifnull) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(ifne,ifnonnull) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(iflt) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(ifge) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(ifgt) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(ifle) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(if_icmpeq,if_acmpeq) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(if_icmpne,if_acmpne) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(if_icmplt) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(if_icmpge) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(if_icmpgt) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(if_icmple) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ior)(goto) { ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++ POP2 r2, r3 ++ orr r2, r3, r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(ior)(ireturn) { ++ POP2 r2, r3 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ orr r1, r3, r2 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++} ++ ++(ior)(iinc) { ++ POP2 tmp1, lr ++ DISPATCH_START \seq_len ++ orr tmp1, lr, tmp1 ++ ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc ++ ldrsb r2, [jpc, #-1] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ ldr tmp1, [locals, -r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp1, r2 ++ str tmp1, [locals, -r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++# ---- ixor; xxx ------------------------------------------------------------ ++ ++(ixor)(iload,fload,aload) { ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(ixor) ++(iload_0,iload_1,iload_2,iload_3) ++{ ++ DISPATCH_START \seq_len ++ rsb r3, r1, #opc_iload_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(ixor)(iaload,aaload,faload) { ++ POP3 r2, r3, lr @ lr = ref ++ DISPATCH_START \seq_len ++ eor r2, r3, r2 @ r2 = index ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry77: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr tmp1, [lr, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(ixor)(istore) { ++ mov r0, #opc_ixor_u4store ++ strb r0, [jpc] ++ b do_ixor_u4store ++} ++ ++(ixor) ++(istore_0,istore_1,istore_2,istore_3) { ++ mov r0, #opc_ixor_istore_N ++ strb r0, [jpc] ++ b do_ixor_istore_N ++} ++ ++(ixor)(iastore,fastore) { ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++ eor tmp1, r3, r2 @ tmp1 = value ++ POP2 r2, r3 @ r2, index, r3 = ref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry109: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++} ++ ++(ixor)(iadd) { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ eor tmp2, r3, r2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(ixor)(isub) { ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ eor tmp2, r3, r2 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(ixor)(ifeq,ifnull) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(ifne,ifnonnull) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(iflt) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(ifge) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(ifgt) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(ifle) { ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(if_icmpeq,if_acmpeq) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(if_icmpne,if_acmpne) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(if_icmplt) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(if_icmpge) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(if_icmpgt) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(if_icmple) { ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(ixor)(goto) { ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++ POP2 r2, r3 ++ eor r2, r3, r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++} ++ ++(ixor)(ireturn) { ++ POP2 r2, r3 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ eor r1, r3, r2 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++} ++ ++(ixor)(iinc) { ++ POP2 tmp1, lr ++ DISPATCH_START \seq_len ++ eor tmp1, lr, tmp1 ++ ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc ++ ldrsb r2, [jpc, #-1] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ ldr tmp1, [locals, -r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp1, r2 ++ str tmp1, [locals, -r3, lsl #2] ++ DISPATCH_FINISH ++} ++ ++# --- iinc; xxx -------------------------------------------------------------- ++ ++(iinc)(iconst_m1,iconst_0,iconst_1,iconst_2,iconst_3,iconst_4,iconst_5) { ++ ldrsb tmp1, [jpc, #2] ++ sub lr, r1, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ ldr r3, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ add r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iinc)(iload,aload,fload) { ++ ldrb lr, [jpc, #4] ++ ldrsb tmp1, [jpc, #2] ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ ldr r3, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ rsb lr, lr, #0 ++ DISPATCH_NEXT ++ add r3, r3, tmp1 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ ldr tmp1, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++(iinc) ++(iload_0,iload_1,iload_2,iload_3) ++{ ++ rsb lr, r1, #opc_iload_0 ++ ldrsb tmp1, [jpc, #2] ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ ldr r3, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ add r3, r3, tmp1 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++} ++ ++################################################################################ ++## ECN: Optimised bytecode triples ++################################################################################ ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(iload,fload,aload) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb r3, [jpc, #2] ++ add tmp2, constpool, r2, lsl #12 ++ DISPATCH_START 6 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, r3, lsl #4 ++ ldrb r3, [jpc, #-1] ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_5 ++#endif ++ DISPATCH_NEXT ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++.abortentry89: ++ ldr tmp2, [tmp1, tmp2] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(iload_0,iload_1,iload_2,iload_3) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add tmp2, constpool, r2, lsl #12 ++ DISPATCH_START 5 ++ rsb r3, r1, #opc_iload_0 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_4 ++#endif ++ DISPATCH_NEXT ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry90: ++ ldr tmp2, [tmp1, tmp2] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(iadd) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add tmp2, constpool, r2, lsl #12 ++ DISPATCH_START 5 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_4 ++#endif ++ DISPATCH_NEXT ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ POP r3 ++.abortentry91: ++ ldr tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ add tmp2, tmp2, r3 ++ PUSH tmp2 ++ DISPATCH_FINISH ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(ifeq,ifnull) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry92: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(ifne,ifnonnull) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry93: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(iflt) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry94: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(ifge) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry95: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(ifgt) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry96: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(ifle) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry97: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(if_icmpeq,if_acmpeq) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry98: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(if_icmpne,if_acmpne) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry99: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(if_icmplt) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry100: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(if_icmpge) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry101: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(if_icmpgt) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry102: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iaccess_0,iaccess_1,iaccess_2,iaccess_3) ++(if_icmple) { ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry103: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(iadd) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ add r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(isub) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ sub r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(iand) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ and r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(ior) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ orr r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(ixor) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ eor r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload_iconst_N) ++(iadd) ++{ ++ ldrb r3, [jpc, #2] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr r2, [locals, r2, lsl #2] ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ add r3, r2, r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload_iconst_N) ++(isub) ++{ ++ ldrb r3, [jpc, #2] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr r2, [locals, r2, lsl #2] ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ sub r3, r2, r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload_iconst_N) ++(iand) ++{ ++ ldrb r3, [jpc, #2] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr r2, [locals, r2, lsl #2] ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ and r3, r2, r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload_iconst_N) ++(ior) ++{ ++ ldrb r3, [jpc, #2] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr r2, [locals, r2, lsl #2] ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ orr r3, r2, r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++# r2 = [jpc, #1] ++(iload_iconst_N) ++(ixor) ++{ ++ ldrb r3, [jpc, #2] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr r2, [locals, r2, lsl #2] ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ eor r3, r2, r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++} ++ ++# Former quads ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(iadd_u4store) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ add r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_iconst_N) ++(iadd_u4store) ++{ ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #5] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ add r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(iadd_istore_N) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ add r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #opc_istore_0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_iconst_N) ++(iadd_istore_N) ++{ ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #4] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ add r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(isub_u4store) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_iconst_N) ++(isub_u4store) ++{ ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #5] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ sub r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(isub_istore_N) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #opc_istore_0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_iconst_N) ++(isub_istore_N) ++{ ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #4] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ sub r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(iand_u4store) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ and r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_iconst_N) ++(iand_u4store) ++{ ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #5] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ and r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(iand_istore_N) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ and r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #opc_istore_0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_iconst_N) ++(iand_istore_N) ++{ ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #4] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ and r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(ior_u4store) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ orr r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_iconst_N) ++(ior_u4store) ++{ ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #5] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ orr r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(ior_istore_N) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ orr r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #opc_istore_0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_iconst_N) ++(ior_istore_N) ++{ ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #4] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ orr r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(ixor_u4store) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ eor r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_iconst_N) ++(ixor_u4store) ++{ ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #5] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ eor r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_0_iconst_N,iload_1_iconst_N,iload_2_iconst_N,iload_3_iconst_N) ++(ixor_istore_N) ++{ ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ eor r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #opc_istore_0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++} ++ ++(iload_iconst_N) ++(ixor_istore_N) ++{ ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #4] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ eor r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++} +diff -ruNE ports/hotspot/src/cpu/zero/vm/bytecodes.s ports/hotspot/src/cpu/zero/vm/bytecodes.s +--- ports/hotspot/src/cpu/zero/vm/bytecodes.s 1970-01-01 00:00:00.000000000 +0000 ++++ ports/hotspot/src/cpu/zero/vm/bytecodes.s 2009-06-30 12:13:52.000000000 +0000 +@@ -0,0 +1,12797 @@ ++#define opc_nop 0x00 ++#define opc_aconst_null 0x01 ++#define opc_iconst_m1 0x02 ++#define opc_iconst_0 0x03 ++#define opc_iconst_1 0x04 ++#define opc_iconst_2 0x05 ++#define opc_iconst_3 0x06 ++#define opc_iconst_4 0x07 ++#define opc_iconst_5 0x08 ++#define opc_lconst_0 0x09 ++#define opc_lconst_1 0x0a ++#define opc_fconst_0 0x0b ++#define opc_fconst_1 0x0c ++#define opc_fconst_2 0x0d ++#define opc_dconst_0 0x0e ++#define opc_dconst_1 0x0f ++#define opc_bipush 0x10 ++#define opc_sipush 0x11 ++#define opc_ldc 0x12 ++#define opc_ldc_w 0x13 ++#define opc_ldc2_w 0x14 ++#define opc_iload 0x15 ++#define opc_lload 0x16 ++#define opc_fload 0x17 ++#define opc_dload 0x18 ++#define opc_aload 0x19 ++#define opc_iload_0 0x1a ++#define opc_iload_1 0x1b ++#define opc_iload_2 0x1c ++#define opc_iload_3 0x1d ++#define opc_lload_0 0x1e ++#define opc_lload_1 0x1f ++#define opc_lload_2 0x20 ++#define opc_lload_3 0x21 ++#define opc_fload_0 0x22 ++#define opc_fload_1 0x23 ++#define opc_fload_2 0x24 ++#define opc_fload_3 0x25 ++#define opc_dload_0 0x26 ++#define opc_dload_1 0x27 ++#define opc_dload_2 0x28 ++#define opc_dload_3 0x29 ++#define opc_aload_0 0x2a ++#define opc_aload_1 0x2b ++#define opc_aload_2 0x2c ++#define opc_aload_3 0x2d ++#define opc_iaload 0x2e ++#define opc_laload 0x2f ++#define opc_faload 0x30 ++#define opc_daload 0x31 ++#define opc_aaload 0x32 ++#define opc_baload 0x33 ++#define opc_caload 0x34 ++#define opc_saload 0x35 ++#define opc_istore 0x36 ++#define opc_lstore 0x37 ++#define opc_fstore 0x38 ++#define opc_dstore 0x39 ++#define opc_astore 0x3a ++#define opc_istore_0 0x3b ++#define opc_istore_1 0x3c ++#define opc_istore_2 0x3d ++#define opc_istore_3 0x3e ++#define opc_lstore_0 0x3f ++#define opc_lstore_1 0x40 ++#define opc_lstore_2 0x41 ++#define opc_lstore_3 0x42 ++#define opc_fstore_0 0x43 ++#define opc_fstore_1 0x44 ++#define opc_fstore_2 0x45 ++#define opc_fstore_3 0x46 ++#define opc_dstore_0 0x47 ++#define opc_dstore_1 0x48 ++#define opc_dstore_2 0x49 ++#define opc_dstore_3 0x4a ++#define opc_astore_0 0x4b ++#define opc_astore_1 0x4c ++#define opc_astore_2 0x4d ++#define opc_astore_3 0x4e ++#define opc_iastore 0x4f ++#define opc_lastore 0x50 ++#define opc_fastore 0x51 ++#define opc_dastore 0x52 ++#define opc_aastore 0x53 ++#define opc_bastore 0x54 ++#define opc_castore 0x55 ++#define opc_sastore 0x56 ++#define opc_pop 0x57 ++#define opc_pop2 0x58 ++#define opc_dup 0x59 ++#define opc_dup_x1 0x5a ++#define opc_dup_x2 0x5b ++#define opc_dup2 0x5c ++#define opc_dup2_x1 0x5d ++#define opc_dup2_x2 0x5e ++#define opc_swap 0x5f ++#define opc_iadd 0x60 ++#define opc_ladd 0x61 ++#define opc_fadd 0x62 ++#define opc_dadd 0x63 ++#define opc_isub 0x64 ++#define opc_lsub 0x65 ++#define opc_fsub 0x66 ++#define opc_dsub 0x67 ++#define opc_imul 0x68 ++#define opc_lmul 0x69 ++#define opc_fmul 0x6a ++#define opc_dmul 0x6b ++#define opc_idiv 0x6c ++#define opc_ldiv 0x6d ++#define opc_fdiv 0x6e ++#define opc_ddiv 0x6f ++#define opc_irem 0x70 ++#define opc_lrem 0x71 ++#define opc_frem 0x72 ++#define opc_drem 0x73 ++#define opc_ineg 0x74 ++#define opc_lneg 0x75 ++#define opc_fneg 0x76 ++#define opc_dneg 0x77 ++#define opc_ishl 0x78 ++#define opc_lshl 0x79 ++#define opc_ishr 0x7a ++#define opc_lshr 0x7b ++#define opc_iushr 0x7c ++#define opc_lushr 0x7d ++#define opc_iand 0x7e ++#define opc_land 0x7f ++#define opc_ior 0x80 ++#define opc_lor 0x81 ++#define opc_ixor 0x82 ++#define opc_lxor 0x83 ++#define opc_iinc 0x84 ++#define opc_i2l 0x85 ++#define opc_i2f 0x86 ++#define opc_i2d 0x87 ++#define opc_l2i 0x88 ++#define opc_l2f 0x89 ++#define opc_l2d 0x8a ++#define opc_f2i 0x8b ++#define opc_f2l 0x8c ++#define opc_f2d 0x8d ++#define opc_d2i 0x8e ++#define opc_d2l 0x8f ++#define opc_d2f 0x90 ++#define opc_i2b 0x91 ++#define opc_i2c 0x92 ++#define opc_i2s 0x93 ++#define opc_lcmp 0x94 ++#define opc_fcmpl 0x95 ++#define opc_fcmpg 0x96 ++#define opc_dcmpl 0x97 ++#define opc_dcmpg 0x98 ++#define opc_ifeq 0x99 ++#define opc_ifne 0x9a ++#define opc_iflt 0x9b ++#define opc_ifge 0x9c ++#define opc_ifgt 0x9d ++#define opc_ifle 0x9e ++#define opc_if_icmpeq 0x9f ++#define opc_if_icmpne 0xa0 ++#define opc_if_icmplt 0xa1 ++#define opc_if_icmpge 0xa2 ++#define opc_if_icmpgt 0xa3 ++#define opc_if_icmple 0xa4 ++#define opc_if_acmpeq 0xa5 ++#define opc_if_acmpne 0xa6 ++#define opc_goto 0xa7 ++#define opc_jsr 0xa8 ++#define opc_ret 0xa9 ++#define opc_tableswitch 0xaa ++#define opc_lookupswitch 0xab ++#define opc_ireturn 0xac ++#define opc_lreturn 0xad ++#define opc_freturn 0xae ++#define opc_dreturn 0xaf ++#define opc_areturn 0xb0 ++#define opc_return 0xb1 ++#define opc_getstatic 0xb2 ++#define opc_putstatic 0xb3 ++#define opc_getfield 0xb4 ++#define opc_putfield 0xb5 ++#define opc_invokevirtual 0xb6 ++#define opc_invokespecial 0xb7 ++#define opc_invokestatic 0xb8 ++#define opc_invokeinterface 0xb9 ++#define opc_new 0xbb ++#define opc_newarray 0xbc ++#define opc_anewarray 0xbd ++#define opc_arraylength 0xbe ++#define opc_athrow 0xbf ++#define opc_checkcast 0xc0 ++#define opc_instanceof 0xc1 ++#define opc_monitorenter 0xc2 ++#define opc_monitorexit 0xc3 ++#define opc_wide 0xc4 ++#define opc_multianewarray 0xc5 ++#define opc_ifnull 0xc6 ++#define opc_ifnonnull 0xc7 ++#define opc_goto_w 0xc8 ++#define opc_jsr_w 0xc9 ++#define opc_breakpoint 0xca ++#define opc_bgetfield 0xcc ++#define opc_cgetfield 0xcd ++#define opc_igetfield 0xd0 ++#define opc_lgetfield 0xd1 ++#define opc_sgetfield 0xd2 ++#define opc_aputfield 0xd3 ++#define opc_bputfield 0xd4 ++#define opc_cputfield 0xd5 ++#define opc_iputfield 0xd8 ++#define opc_lputfield 0xd9 ++#define opc_iaccess_0 0xdb ++#define opc_iaccess_1 0xdc ++#define opc_iaccess_2 0xdd ++#define opc_iaccess_3 0xde ++#define opc_invokevfinal 0xe2 ++#define opc_return_register_finalizer 0xe5 ++#define opc_iload_0_iconst_N 0xe7 ++#define opc_iload_1_iconst_N 0xe8 ++#define opc_iload_2_iconst_N 0xe9 ++#define opc_iload_3_iconst_N 0xea ++#define opc_iload_iconst_N 0xeb ++#define opc_invokeresolved 0xec ++#define opc_iadd_istore_N 0xed ++#define opc_isub_istore_N 0xee ++#define opc_iand_istore_N 0xef ++#define opc_ior_istore_N 0xf0 ++#define opc_ixor_istore_N 0xf1 ++#define opc_iadd_u4store 0xf2 ++#define opc_isub_u4store 0xf3 ++#define opc_iand_u4store 0xf4 ++#define opc_ior_u4store 0xf5 ++#define opc_ixor_u4store 0xf6 ++#define opc_invokespecialresolved 0xf7 ++#define opc_invokestaticresolved 0xf8 ++ ++@----------------------------------------------------------------------------- ++ .macro nop jpc_off=0, seq_len=1 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode nop ++ nop ++@----------------------------------------------------------------------------- ++ .macro u4const_0 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ mov lr, #0 ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u4const_0 ++ u4const_0 ++@----------------------------------------------------------------------------- ++ .macro iconst_N jpc_off=0, seq_len=1 ++ sub lr, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iconst_N ++ iconst_N ++@----------------------------------------------------------------------------- ++ .macro u8const_0 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ mov tmp1, #0 ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8const_0 ++ u8const_0 ++@----------------------------------------------------------------------------- ++ .macro lconst_1 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ mov tmp2, #1 ++ DISPATCH_NEXT ++ mov tmp1, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lconst_1 ++ lconst_1 ++@----------------------------------------------------------------------------- ++ .macro fconst_1 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ mov tmp1, #0x3f800000 ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode fconst_1 ++ fconst_1 ++@----------------------------------------------------------------------------- ++ .macro fconst_2 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ mov r2, #0x40000000 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode fconst_2 ++ fconst_2 ++@----------------------------------------------------------------------------- ++ .macro dconst_1 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ mov tmp1, #0x3f000000 ++ DISPATCH_NEXT ++ orr tmp1, tmp1, #0x00f00000 ++ DISPATCH_NEXT ++ mov tmp2, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode dconst_1 ++ dconst_1 ++@----------------------------------------------------------------------------- ++ .macro bipush jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ mov tmp1, r2, lsl #24 ++ DISPATCH_NEXT ++ mov tmp1, tmp1, asr #24 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode bipush ++ bipush ++@----------------------------------------------------------------------------- ++ .macro sipush jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ mov tmp1, r1 ++ DISPATCH_NEXT ++ mov r2, r2, lsl #24 ++ DISPATCH_NEXT ++ orr tmp1, tmp1, r2, asr #16 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode sipush ++ sipush ++@----------------------------------------------------------------------------- ++ .macro u4load jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ rsb tmp1, r2, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u4load ++ u4load ++@----------------------------------------------------------------------------- ++ .macro u8load jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ sub r3, locals, r2, lsl #2 ++ DISPATCH_NEXT ++ ldmda r3, {tmp2, tmp1} ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8load ++ u8load ++@----------------------------------------------------------------------------- ++ .macro aload_0 jpc_off=0, seq_len=1 ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode aload_0 ++ aload_0 ++@----------------------------------------------------------------------------- ++ .macro iload_0 jpc_off=0, seq_len=1 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0 ++ iload_0 ++@----------------------------------------------------------------------------- ++ .macro fload_0 jpc_off=0, seq_len=1 ++ rsb tmp1, r0, #opc_fload_0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode fload_0 ++ fload_0 ++@----------------------------------------------------------------------------- ++ .macro u8load_0 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ ldmda locals, {tmp2-tmp1} ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8load_0 ++ u8load_0 ++@----------------------------------------------------------------------------- ++ .macro u8load_1 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ ldmdb locals, {tmp2-tmp1} ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8load_1 ++ u8load_1 ++@----------------------------------------------------------------------------- ++ .macro u8load_2 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ ldr tmp2, [locals, #-12] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, #-8] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8load_2 ++ u8load_2 ++@----------------------------------------------------------------------------- ++ .macro u8load_3 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ ldr tmp2, [locals, #-16] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, #-12] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8load_3 ++ u8load_3 ++@----------------------------------------------------------------------------- ++ .macro u4aload jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry5: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ DISPATCH_NEXT ++ ldr tmp1, [r3, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u4aload ++ u4aload ++@----------------------------------------------------------------------------- ++ .macro u8aload jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry6: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #3 ++ ldr tmp2, [r3, #16] ++ DISPATCH_NEXT ++ ldr tmp1, [r3, #20] ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8aload ++ u8aload ++@----------------------------------------------------------------------------- ++ .macro baload jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry7: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2 ++ DISPATCH_NEXT ++ ldrsb tmp1, [r3, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode baload ++ baload ++@----------------------------------------------------------------------------- ++ .macro caload jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry8: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #1 ++ DISPATCH_NEXT ++ ldrh tmp1, [r3, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode caload ++ caload ++@----------------------------------------------------------------------------- ++ .macro saload jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry9: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #1 ++ DISPATCH_NEXT ++ ldrsh tmp1, [r3, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode saload ++ saload ++@----------------------------------------------------------------------------- ++ .macro u4store jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ rsb tmp1, r2, #0 ++ DISPATCH_NEXT ++ POP r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u4store ++ u4store ++@----------------------------------------------------------------------------- ++ .macro u8store jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ sub r3, locals, r2, lsl #2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ stmda r3, {tmp2, tmp1} ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8store ++ u8store ++@----------------------------------------------------------------------------- ++ .macro u4store_0 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #0] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u4store_0 ++ u4store_0 ++@----------------------------------------------------------------------------- ++ .macro u4store_1 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #-4] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u4store_1 ++ u4store_1 ++@----------------------------------------------------------------------------- ++ .macro u4store_2 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #-8] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u4store_2 ++ u4store_2 ++@----------------------------------------------------------------------------- ++ .macro u4store_3 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #-12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u4store_3 ++ u4store_3 ++@----------------------------------------------------------------------------- ++ .macro u8store_0 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ stmda locals, {tmp2, tmp1} ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8store_0 ++ u8store_0 ++@----------------------------------------------------------------------------- ++ .macro u8store_1 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ stmdb locals, {tmp2, tmp1} ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8store_1 ++ u8store_1 ++@----------------------------------------------------------------------------- ++ .macro u8store_2 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ str tmp2, [locals, #-12] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #-8] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8store_2 ++ u8store_2 ++@----------------------------------------------------------------------------- ++ .macro u8store_3 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ str tmp2, [locals, #-16] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, #-12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8store_3 ++ u8store_3 ++@----------------------------------------------------------------------------- ++ .macro u4astore jpc_off=0, seq_len=1 ++ POP3 r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry10: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp tmp2, lr ++ bcs array_bound_exception_jpc_1_tmp2 ++ DISPATCH_NEXT ++ add tmp1, tmp1, tmp2, lsl #2 ++ DISPATCH_NEXT ++ str r3, [tmp1, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u4astore ++ u4astore ++@----------------------------------------------------------------------------- ++ .macro u8astore jpc_off=0, seq_len=1 ++ POP4 r2, r3, tmp2, tmp1 @ r2,r3 = value, tmp2 = index, tmp1 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry11: ++ ldr ip, [tmp1, #8] @ ip = limit ++ cmp tmp2, ip ++ DISPATCH_NEXT ++ bcs array_bound_exception_jpc_1_tmp2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2, lsl #3 ++ str r2, [tmp2, #16] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str r3, [tmp2, #20] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u8astore ++ u8astore ++@----------------------------------------------------------------------------- ++ .macro bastore jpc_off=0, seq_len=1 ++ POP3 r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry12: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp tmp2, lr ++ bcs array_bound_exception_jpc_1_tmp2 ++ DISPATCH_NEXT ++ add tmp1, tmp1, tmp2 ++ DISPATCH_NEXT ++ strb r3, [tmp1, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode bastore ++ bastore ++@----------------------------------------------------------------------------- ++ .macro u2astore jpc_off=0, seq_len=1 ++ POP3 r3, tmp2, tmp1 @ r3 = value, tmp2 = index, tmp1 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry13: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp tmp2, lr ++ bcs array_bound_exception_jpc_1_tmp2 ++ DISPATCH_NEXT ++ add tmp1, tmp1, tmp2, lsl #1 ++ DISPATCH_NEXT ++ strh r3, [tmp1, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode u2astore ++ u2astore ++@----------------------------------------------------------------------------- ++ .macro jpop jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ add stack, stack, #4 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode jpop ++ jpop ++@----------------------------------------------------------------------------- ++ .macro jpop2 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ add stack, stack, #8 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode jpop2 ++ jpop2 ++@----------------------------------------------------------------------------- ++ .macro dup jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ ldr lr, [stack, #4] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode dup ++ dup ++@----------------------------------------------------------------------------- ++ .macro dup_x1 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode dup_x1 ++ dup_x1 ++@----------------------------------------------------------------------------- ++ .macro dup_x2 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, lr ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_NEXT ++ PUSH3 r2, r3, lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode dup_x2 ++ dup_x2 ++@----------------------------------------------------------------------------- ++ .macro dup2 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ ldmib stack, {r2, r3} ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode dup2 ++ dup2 ++@----------------------------------------------------------------------------- ++ .macro dup2_x1 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, lr ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_NEXT ++ PUSH3 r2, r3, lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode dup2_x1 ++ dup2_x1 ++@----------------------------------------------------------------------------- ++ .macro dup2_x2 jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ PUSH4 r2, r3, tmp1, lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode dup2_x2 ++ dup2_x2 ++@----------------------------------------------------------------------------- ++ .macro swap jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode swap ++ swap ++@----------------------------------------------------------------------------- ++ .macro iadd jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ add tmp2, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd ++ iadd ++@----------------------------------------------------------------------------- ++ .macro ladd jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ adds r2, r2, tmp1 ++ adc r3, r3, lr ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ladd ++ ladd ++@----------------------------------------------------------------------------- ++ .macro fadd jpc_off=0, seq_len=1 ++ POP2 r0, r1 ++ bl __aeabi_fadd ++ PUSH r0 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode fadd ++ fadd ++@----------------------------------------------------------------------------- ++ .macro isub jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub ++ isub ++@----------------------------------------------------------------------------- ++ .macro lsub jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ subs r2, tmp1, r2 ++ sbc r3, lr, r3 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lsub ++ lsub ++@----------------------------------------------------------------------------- ++ .macro fsub jpc_off=0, seq_len=1 ++ POP r1 ++ POP r0 ++ bl __aeabi_fsub ++ PUSH r0 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode fsub ++ fsub ++@----------------------------------------------------------------------------- ++ .macro imul jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 r2, tmp1 ++ DISPATCH_NEXT ++ mul tmp2, r2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode imul ++ imul ++@----------------------------------------------------------------------------- ++ .macro lmul jpc_off=0, seq_len=1 ++ POP4 r2, tmp1, ip, lr ++ umull r3, r0, ip, r2 ++ mla tmp1, ip, tmp1, r0 ++ DISPATCH_START \seq_len ++ mla tmp1, lr, r2, tmp1 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lmul ++ lmul ++@----------------------------------------------------------------------------- ++ .macro fmul jpc_off=0, seq_len=1 ++ POP2 r0, r1 ++ bl __aeabi_fmul ++ PUSH r0 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode fmul ++ fmul ++@----------------------------------------------------------------------------- ++ .macro ldiv jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ POP2 r0, r1 ++ orrs lr, r2, r3 ++ beq .ldiv_0 ++ bl __aeabi_ldivmod ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode ldiv ++ ldiv ++@----------------------------------------------------------------------------- ++ .macro fdiv jpc_off=0, seq_len=1 ++ POP r1 ++ POP r0 ++ bl __aeabi_fdiv ++ PUSH r0 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode fdiv ++ fdiv ++@----------------------------------------------------------------------------- ++ .macro ddiv jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ POP2 r0, r1 ++ bl __aeabi_ddiv ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode ddiv ++ ddiv ++@----------------------------------------------------------------------------- ++ .macro lrem jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ POP2 r0, r1 ++ orrs lr, r2, r3 ++ beq .lrem_0 ++ bl __aeabi_ldivmod ++ PUSH2 r2, r3 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode lrem ++ lrem ++@----------------------------------------------------------------------------- ++ .macro frem jpc_off=0, seq_len=1 ++@ ECN: It must be possible to do better than this ++ POP r0 ++ bl __aeabi_f2d ++ PUSH2 r0, r1 ++ GET_STACK 2, r0 ++ bl __aeabi_f2d ++ POP2 r2, r3 ++ bl fmod ++ bl __aeabi_d2f ++ PUT_STACK 0, r0 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode frem ++ frem ++@----------------------------------------------------------------------------- ++ .macro drem jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ POP2 r0, r1 ++ bl fmod ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode drem ++ drem ++@----------------------------------------------------------------------------- ++ .macro ineg jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP tmp1 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ineg ++ ineg ++@----------------------------------------------------------------------------- ++ .macro lneg jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ rsbs r2, r2, #0 ++ rsc r3, r3, #0 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lneg ++ lneg ++@----------------------------------------------------------------------------- ++ .macro fneg jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP r2 ++ DISPATCH_NEXT ++ eor r2, r2, #0x80000000 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode fneg ++ fneg ++@----------------------------------------------------------------------------- ++ .macro dneg jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ GET_STACK 1, r2 ++ DISPATCH_NEXT ++ eor r2, r2, #0x80000000 ++ DISPATCH_NEXT ++ PUT_STACK 1, r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode dneg ++ dneg ++@----------------------------------------------------------------------------- ++ .macro ishl jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ and r2, r2, #31 ++ mov r2, r3, lsl r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ishl ++ ishl ++@----------------------------------------------------------------------------- ++ .macro lshl jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, lr ++ DISPATCH_NEXT ++ tst r2, #32 ++ and r2, r2, #31 ++ movne tmp1, #0 ++ movne lr, r3, lsl r2 ++ moveq tmp1, r3, lsl r2 ++ moveq lr, lr, lsl r2 ++ rsbeq r2, r2, #32 ++ orreq lr, lr, r3, lsr r2 ++ PUSH2 tmp1, lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lshl ++ lshl ++@----------------------------------------------------------------------------- ++ .macro ishr jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ and r2, r2, #31 ++ mov r2, r3, asr r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ishr ++ ishr ++@----------------------------------------------------------------------------- ++ .macro lshr jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ tst r2, #32 ++ and r2, r2, #31 ++ movne lr, tmp1, asr #31 ++ movne r3, tmp1, asr r2 ++ moveq lr, tmp1, asr r2 ++ moveq r3, r3, lsr r2 ++ rsbeq r2, r2, #32 ++ orreq r3, r3, tmp1, lsl r2 ++ PUSH2 r3, lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lshr ++ lshr ++@----------------------------------------------------------------------------- ++ .macro iushr jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 r2, r3 ++ DISPATCH_NEXT ++ and r2, r2, #31 ++ mov r2, r3, lsr r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iushr ++ iushr ++@----------------------------------------------------------------------------- ++ .macro lushr jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ tst r2, #32 ++ and r2, r2, #31 ++ movne lr, #0 ++ movne r3, tmp1, lsr r2 ++ moveq lr, tmp1, lsr r2 ++ moveq r3, r3, lsr r2 ++ rsbeq r2, r2, #32 ++ orreq r3, r3, tmp1, lsl r2 ++ PUSH2 r3, lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lushr ++ lushr ++@----------------------------------------------------------------------------- ++ .macro iand jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand ++ iand ++@----------------------------------------------------------------------------- ++ .macro land jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ and r2, tmp1, r2 ++ and r3, lr, r3 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode land ++ land ++@----------------------------------------------------------------------------- ++ .macro ior jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior ++ ior ++@----------------------------------------------------------------------------- ++ .macro lor jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ orr r2, tmp1, r2 ++ orr r3, lr, r3 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lor ++ lor ++@----------------------------------------------------------------------------- ++ .macro ixor jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor ++ ixor ++@----------------------------------------------------------------------------- ++ .macro lxor jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_NEXT ++ eor r2, tmp1, r2 ++ eor r3, lr, r3 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lxor ++ lxor ++@----------------------------------------------------------------------------- ++ .macro iinc jpc_off=0, seq_len=3 ++ ldrsb lr, [jpc, #2] ++ DISPATCH_START \seq_len ++ rsb tmp1, r2, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ add r3, r3, lr ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iinc ++ iinc ++@----------------------------------------------------------------------------- ++ .macro i2l jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP r2 ++ DISPATCH_NEXT ++ mov r3, r2, asr #31 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode i2l ++ i2l ++@----------------------------------------------------------------------------- ++ .macro i2f jpc_off=0, seq_len=1 ++ POP r0 ++ bl __aeabi_i2f ++ PUSH r0 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode i2f ++ i2f ++@----------------------------------------------------------------------------- ++ .macro i2d jpc_off=0, seq_len=1 ++ POP r0 ++ bl __aeabi_i2d ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode i2d ++ i2d ++@----------------------------------------------------------------------------- ++ .macro l2i jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP r3 ++ DISPATCH_NEXT ++ PUT_STACK 0, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode l2i ++ l2i ++@----------------------------------------------------------------------------- ++ .macro l2f jpc_off=0, seq_len=1 ++ POP2 r0, r1 ++ bl __aeabi_l2f ++ PUSH r0 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode l2f ++ l2f ++@----------------------------------------------------------------------------- ++ .macro l2d jpc_off=0, seq_len=1 ++ POP2 r0, r1 ++ bl __aeabi_l2d ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode l2d ++ l2d ++@----------------------------------------------------------------------------- ++ .macro f2i jpc_off=0, seq_len=1 ++ POP r0 ++ bl _ZN13SharedRuntime3f2iEf ++ PUSH r0 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode f2i ++ f2i ++@----------------------------------------------------------------------------- ++ .macro f2l jpc_off=0, seq_len=1 ++ POP r0 ++ bl _ZN13SharedRuntime3f2lEf ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode f2l ++ f2l ++@----------------------------------------------------------------------------- ++ .macro f2d jpc_off=0, seq_len=1 ++ POP r0 ++ bl __aeabi_f2d ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode f2d ++ f2d ++@----------------------------------------------------------------------------- ++ .macro d2i jpc_off=0, seq_len=1 ++ POP2 r0, r1 ++ bl _ZN13SharedRuntime3d2iEd ++ PUSH r0 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode d2i ++ d2i ++@----------------------------------------------------------------------------- ++ .macro d2l jpc_off=0, seq_len=1 ++ POP2 r0, r1 ++ bl _ZN13SharedRuntime3d2lEd ++ PUSH2 r0, r1 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode d2l ++ d2l ++@----------------------------------------------------------------------------- ++ .macro d2f jpc_off=0, seq_len=1 ++ POP2 r0, r1 ++ bl __aeabi_d2f ++ PUSH r0 ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode d2f ++ d2f ++@----------------------------------------------------------------------------- ++ .macro i2b jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP r3 ++ DISPATCH_NEXT ++ mov r3, r3, asl #24 ++ mov r3, r3, asr #24 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode i2b ++ i2b ++@----------------------------------------------------------------------------- ++ .macro i2c jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP r3 ++ DISPATCH_NEXT ++ mov r3, r3, asl #16 ++ mov r3, r3, lsr #16 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode i2c ++ i2c ++@----------------------------------------------------------------------------- ++ .macro i2s jpc_off=0, seq_len=1 ++ DISPATCH_START \seq_len ++ POP r3 ++ DISPATCH_NEXT ++ mov r3, r3, asl #16 ++ mov r3, r3, asr #16 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode i2s ++ i2s ++@----------------------------------------------------------------------------- ++ .macro lcmp jpc_off=0, seq_len=1 ++ POP4 r2, r3, tmp1, lr ++ DISPATCH_START \seq_len ++ subs r2, tmp1, r2 ++ movne r2, #1 ++ sbcs lr, lr, r3 ++ DISPATCH_NEXT ++ movne r2, #1 ++ rsblt r2, r2, #0 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lcmp ++ lcmp ++@----------------------------------------------------------------------------- ++ .macro fcmpl jpc_off=0, seq_len=1 ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmpgt ++ cmp r0, #0 ++ movne r3, #-1 ++ bne 3f ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmplt ++ cmp r0, #0 ++ movne r3, #1 ++ bne 3f ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmpeq ++ cmp r0, #0 ++ movne r3, #0 ++ moveq r3, #-1 ++3: ++ DISPATCH_START \seq_len ++ add stack, stack, #8 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode fcmpl ++ fcmpl ++@----------------------------------------------------------------------------- ++ .macro fcmpg jpc_off=0, seq_len=1 ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmpgt ++ cmp r0, #0 ++ movne r3, #-1 ++ bne 4f ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmplt ++ cmp r0, #0 ++ movne r3, #1 ++ bne 4f ++ ldmib stack, {r0, r1} ++ bl __aeabi_fcmpeq ++ cmp r0, #0 ++ movne r3, #0 ++ moveq r3, #1 ++4: ++ DISPATCH_START \seq_len ++ add stack, stack, #8 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode fcmpg ++ fcmpg ++@----------------------------------------------------------------------------- ++ .macro dcmpl jpc_off=0, seq_len=1 ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmpgt ++ cmp r0, #0 ++ movne r3, #-1 ++ bne 5f ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmplt ++ cmp r0, #0 ++ movne r3, #1 ++ bne 5f ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmpeq ++ cmp r0, #0 ++ movne r3, #0 ++ moveq r3, #-1 ++5: ++ DISPATCH_START \seq_len ++ add stack, stack, #16 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode dcmpl ++ dcmpl ++@----------------------------------------------------------------------------- ++ .macro dcmpg jpc_off=0, seq_len=1 ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmpgt ++ cmp r0, #0 ++ movne r3, #-1 ++ bne 6f ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmplt ++ cmp r0, #0 ++ movne r3, #1 ++ bne 6f ++ ldmib stack, {r0, r1, r2, r3} ++ bl __aeabi_dcmpeq ++ cmp r0, #0 ++ movne r3, #0 ++ moveq r3, #1 ++6: ++ DISPATCH_START \seq_len ++ add stack, stack, #16 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode dcmpg ++ dcmpg ++@----------------------------------------------------------------------------- ++ .macro ifeq_unsafe jpc_off=0, seq_len=0 ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ifeq_unsafe ++ ifeq_unsafe ++@----------------------------------------------------------------------------- ++ .macro ifne_unsafe jpc_off=0, seq_len=0 ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ifne_unsafe ++ ifne_unsafe ++@----------------------------------------------------------------------------- ++ .macro iflt_unsafe jpc_off=0, seq_len=0 ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iflt_unsafe ++ iflt_unsafe ++@----------------------------------------------------------------------------- ++ .macro ifge_unsafe jpc_off=0, seq_len=0 ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ifge_unsafe ++ ifge_unsafe ++@----------------------------------------------------------------------------- ++ .macro ifgt_unsafe jpc_off=0, seq_len=0 ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ifgt_unsafe ++ ifgt_unsafe ++@----------------------------------------------------------------------------- ++ .macro ifle_unsafe jpc_off=0, seq_len=0 ++ POP r3 ++ mov r2, r2, lsl #24 ++ cmp r3, #0 ++ orr ip, r1, r2, asr #16 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ifle_unsafe ++ ifle_unsafe ++@----------------------------------------------------------------------------- ++ .macro if_icmpeq_unsafe jpc_off=0, seq_len=0 ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode if_icmpeq_unsafe ++ if_icmpeq_unsafe ++@----------------------------------------------------------------------------- ++ .macro if_icmpne_unsafe jpc_off=0, seq_len=0 ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode if_icmpne_unsafe ++ if_icmpne_unsafe ++@----------------------------------------------------------------------------- ++ .macro if_icmplt_unsafe jpc_off=0, seq_len=0 ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode if_icmplt_unsafe ++ if_icmplt_unsafe ++@----------------------------------------------------------------------------- ++ .macro if_icmpge_unsafe jpc_off=0, seq_len=0 ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode if_icmpge_unsafe ++ if_icmpge_unsafe ++@----------------------------------------------------------------------------- ++ .macro if_icmpgt_unsafe jpc_off=0, seq_len=0 ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode if_icmpgt_unsafe ++ if_icmpgt_unsafe ++@----------------------------------------------------------------------------- ++ .macro if_icmple_unsafe jpc_off=0, seq_len=0 ++ POP2 r3, tmp1 ++ mov r2, r2, lsl #24 ++ cmp tmp1, r3 ++ orr ip, r1, r2, asr #16 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode if_icmple_unsafe ++ if_icmple_unsafe ++@----------------------------------------------------------------------------- ++ .macro goto_unsafe jpc_off=0, seq_len=0 ++ mov r2, r2, lsl #24 ++ orr ip, r1, r2, asr #16 ++ DISPATCH_START_REG ip ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode goto_unsafe ++ goto_unsafe ++@----------------------------------------------------------------------------- ++ .macro jsr jpc_off=0, seq_len=0 ++ ldr r3, [istate, #ISTATE_METHOD] ++ ldr r1, [r3, #8] ++ rsb r2, r1, jpc ++ sub r2, r2, #45 ++ PUSH r2 ++ b do_goto_safe ++ .endm ++ ++ Opcode jsr ++ jsr ++@----------------------------------------------------------------------------- ++ .macro ret jpc_off=0, seq_len=0 ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [r0, #8] ++ ldr r1, [locals, -r2, lsl #2] ++ add jpc, r3, r1 ++ DISPATCH 48 ++ .endm ++ ++ Opcode ret ++ ret ++@----------------------------------------------------------------------------- ++ .macro tableswitch jpc_off=0, seq_len=0 ++ POP a2 ++ bic a1, jpc, #3 ++ ldr a4,[a1,#8] ++@ BYTESEX_REVERSE a3, a4, a3 ++ ++ eor a3, a4, a4, ror #16 ++ bic a3, a3, #0xff0000 ++ mov a4, a4, ror #8 ++ eor a3, a4, a3, lsr #8 ++ ++ ldr a4,[a1,#12] ++@ BYTESEX_REVERSE a4, a4, ip ++ ++ eor ip, a4, a4, ror #16 ++ bic ip, ip, #0xff0000 ++ mov a4, a4, ror #8 ++ eor a4, a4, ip, lsr #8 ++ ++ sub a2,a2,a3 ++ sub a4,a4,a3 ++ cmp a4,a2 ++ ldrcc a1,[a1,#4] ++ addcs a1,a1,a2,LSL #2 ++ ldrcs a1,[a1,#16] ++@ BYTESEX_REVERSE a1, a1, a4 ++ ++ eor a4, a1, a1, ror #16 ++ bic a4, a4, #0xff0000 ++ mov a1, a1, ror #8 ++ eors ip, a1, a4, lsr #8 ++ ++ DISPATCH_START_REG ip ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode tableswitch ++ tableswitch ++@----------------------------------------------------------------------------- ++ .macro lookupswitch jpc_off=0, seq_len=0 ++ POP a2 ++ bic a1, jpc, #3 ++@ BYTESEX_REVERSE a2, a2, ip ++ ++ eor ip, a2, a2, ror #16 ++ bic ip, ip, #0xff0000 ++ mov a2, a2, ror #8 ++ eor a2, a2, ip, lsr #8 ++ ++ ldr a3,[a1,#8] ++@ BYTESEX_REVERSE a3, a3, ip ++ ++ eor ip, a3, a3, ror #16 ++ bic ip, ip, #0xff0000 ++ mov a3, a3, ror #8 ++ eor a3, a3, ip, lsr #8 ++ ++ subs a4,a3,#1 ++ bmi 1f ++ add a1, a1, #4 ++0: ++ ldr a3,[a1,#8]! ++ cmp a3,a2 ++ beq 2f ++ subs a4,a4,#1 ++ bpl 0b ++1: ++ bic a1, jpc, #3 ++2: ++ ldr a2,[a1,#4] ++@ BYTESEX_REVERSE a2, a2, ip ++ ++ eor ip, a2, a2, ror #16 ++ bic ip, ip, #0xff0000 ++ mov a2, a2, ror #8 ++ eors ip, a2, ip, lsr #8 ++ ++ DISPATCH_START_REG ip ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode lookupswitch ++ lookupswitch ++@----------------------------------------------------------------------------- ++ .macro igetfield jpc_off=0, seq_len=3 ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP tmp1 ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry78: ++ ldr tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode igetfield ++ igetfield ++@----------------------------------------------------------------------------- ++ .macro bgetfield jpc_off=0, seq_len=3 ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP tmp1 ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry79: ++ ldrsb tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode bgetfield ++ bgetfield ++@----------------------------------------------------------------------------- ++ .macro cgetfield jpc_off=0, seq_len=3 ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP tmp1 ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry80: ++ ldrh tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode cgetfield ++ cgetfield ++@----------------------------------------------------------------------------- ++ .macro sgetfield jpc_off=0, seq_len=3 ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP tmp1 ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry81: ++ ldrsh tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode sgetfield ++ sgetfield ++@----------------------------------------------------------------------------- ++ .macro lgetfield jpc_off=0, seq_len=3 ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP tmp1 ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++.abortentry82: ++ ldmia tmp2, {tmp2, tmp1} ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lgetfield ++ lgetfield ++@----------------------------------------------------------------------------- ++ .macro iputfield jpc_off=0, seq_len=3 ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP2 r3, tmp1 @ r3 = value, tmp1 = object ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++.abortentry83: ++ str r3, [tmp1, tmp2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iputfield ++ iputfield ++@----------------------------------------------------------------------------- ++ .macro cputfield jpc_off=0, seq_len=3 ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP2 r3, tmp1 @ r3 = value, tmp1 = object ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++.abortentry84: ++ strh r3, [tmp1, tmp2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode cputfield ++ cputfield ++@----------------------------------------------------------------------------- ++ .macro bputfield jpc_off=0, seq_len=3 ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP2 r3, tmp1 @ r3 = value, tmp1 = object ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++.abortentry85: ++ strb r3, [tmp1, tmp2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode bputfield ++ bputfield ++@----------------------------------------------------------------------------- ++ .macro aputfield jpc_off=0, seq_len=3 ++ GET_STACK 1, r0 @ r0 = object ++ add tmp2, constpool, r1, lsl #12 ++ POP r1 @ r1 = value ++ add tmp2, tmp2, r2, lsl #4 ++ ldr tmp2, [tmp2, #8] ++ cmp r0, #0 ++ beq null_ptr_exception ++ add r0, r0, tmp2 ++ bl oop_store ++ ldr r3, [dispatch, #Universe_collectedHeap_Address-XXX] ++ DISPATCH_START 3 ++ POP r2 ++ ldr r3, [r3, #0] ++ DISPATCH_NEXT ++ ldr r3, [r3, #12] ++ DISPATCH_NEXT ++ ldr r3, [r3, #76] ++ mov tmp2, #0 ++ strb tmp2, [r3, r2, lsr #9] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode aputfield ++ aputfield ++@----------------------------------------------------------------------------- ++ .macro lputfield jpc_off=0, seq_len=3 ++ DISPATCH_START 3 ++ add tmp2, constpool, r1, lsl #12 ++ POP3 r3, tmp1, lr @ r3, tmp1 = value, lr = object ++ add tmp2, tmp2, r2, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ add tmp2, lr, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++.abortentry86: ++ stm tmp2, {r3, tmp1} ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode lputfield ++ lputfield ++@----------------------------------------------------------------------------- ++ .macro getstatic jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ add tmp2, constpool, r1, lsl #12 ++ ldr r3, [tmp2, r2, lsl #4]! @ tmp2 = cache, r3 = flags ++ DISPATCH_NEXT ++ and r3, r3, #0x00ff0000 ++ cmp r3, #178 << 16 ++ bne resolve_getstatic ++ ldr r3, [tmp2, #4] ++ ldr r2, [tmp2, #12] ++ ldr lr, [tmp2, #8] ++ movs r2, r2, lsr #29 ++ bhi getstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 ++ bcs getstatic_h @ C = 1 => R2 = 1 ++ beq getstatic_sb @ Z = 1 => R2 = 0 ++ tst r2, #2 ++ bne getstatic_dw ++ b getstatic_sh ++ .endm ++ ++ Opcode getstatic ++ getstatic ++@----------------------------------------------------------------------------- ++ .macro putstatic jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ add tmp2, constpool, r1, lsl #12 ++ ldr r3, [tmp2, r2, lsl #4]! @ tmp2 = cache, r3 = flags ++ DISPATCH_NEXT ++ and r3, r3, #0xff000000 ++ cmp r3, #179 << 24 ++ bne resolve_putstatic ++ ldr r3, [tmp2, #4] @ r3 = object ++ ldr lr, [tmp2, #12] @ lr = tos_type ++ ldr r2, [tmp2, #8] @ r2 = offset ++ movs lr, lr, lsr #29 ++ bhi putstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 ++ bcs putstatic_h @ C = 1 => R2 = 1 ++ beq putstatic_sb @ Z = 1 => R2 = 0 ++ tst lr, #2 ++ bne putstatic_dw ++ b putstatic_sh ++ .endm ++ ++ Opcode putstatic ++ putstatic ++@----------------------------------------------------------------------------- ++ .macro return_unsafe jpc_off=0, seq_len=0 ++ ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ++ ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [r2, #0] ++ ldrh r0, [r0, #40] ++ add r1, r2, #4 ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ add stack, r1, r0, lsl #2 ++ cmp istate, #0 ++ beq normal_return ++ ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT ++ add r2, r2, #4 ++ DISPATCH_NEXT ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ bl return_check_monitors ++ b 2b ++ .endm ++ ++ Opcode return_unsafe ++ return_unsafe ++@----------------------------------------------------------------------------- ++ .macro ireturn_unsafe jpc_off=0, seq_len=0 ++ ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ++ POP r1 @ pop result before we lose stack ++ ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ bl return_check_monitors ++ b 2b ++ .endm ++ ++ Opcode ireturn_unsafe ++ ireturn_unsafe ++@----------------------------------------------------------------------------- ++ .macro lreturn_unsafe jpc_off=0, seq_len=0 ++ ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ++ ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [r2, #0] ++ ldrh r0, [r0, #40] ++ add r1, r2, #4 ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ ++ POP2 r2, r3 ++ ++ add stack, r1, r0, lsl #2 ++ stmdb stack!, {r2, r3} ++ cmp istate, #0 ++ beq normal_return ++ ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT ++ add r2, r2, #4 ++ DISPATCH_NEXT ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ bl return_check_monitors ++ b 2b ++ .endm ++ ++ Opcode lreturn_unsafe ++ lreturn_unsafe ++@----------------------------------------------------------------------------- ++ .macro ldc jpc_off=0, seq_len=2 ++ ldrb lr, [jpc, #1] ++ ldr r3, [istate, #ISTATE_METHOD] @ method ++ ++ DISPATCH_START \seq_len ++ ++ ldr r2, [r3, #12] @ constants ++ ldr r3, [r2, #8] ++ add r3, r3, #12 ++ ldrb r3, [r3, lr] ++ ++ DISPATCH_NEXT ++ ++ cmp r3, #JVM_CONSTANT_Integer ++ cmpne r3, #JVM_CONSTANT_Float ++ cmpne r3, #JVM_CONSTANT_String ++ bne 1f ++ ++ DISPATCH_NEXT ++ ++ add r3, r2, lr, lsl #2 ++ ldr lr, [r3, #32] ++ PUSH lr ++ DISPATCH_FINISH ++1: ++ cmp r3, #JVM_CONSTANT_Class ++ bne 2f ++ add r0, r2, #32 ++ ldr r0, [r0, lr, lsl #2] ++ ldr r1, [r0, #60] ++ PUSH r1 ++ DISPATCH 0 ++2: ++ sub jpc, jpc, #\seq_len ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ mov r1, #0 ++ bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb ++ ldr r0, [istate, #ISTATE_THREAD] @ thread ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr r1, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ cmp r1, #0 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++ ldr r3, [r0, #THREAD_VM_RESULT] ++ mov r2, #0 ++ PUSH r3 ++ str r2, [r0, #THREAD_VM_RESULT] ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode ldc ++ ldc ++@----------------------------------------------------------------------------- ++ .macro ldc_w jpc_off=0, seq_len=3 ++ ldrb lr, [jpc, #1] ++ ++ ldr r3, [istate, #ISTATE_METHOD] @ method ++ ldrb ip, [jpc, #2] ++ ldr r2, [r3, #12] @ constants ++ ++ DISPATCH_START \seq_len ++ ++ ldr r3, [r2, #8] ++ orr lr, ip, lr, lsl #8 ++ add r3, r3, #12 ++ ldrb r3, [r3, lr] ++ ++ DISPATCH_NEXT ++ ++ cmp r3, #JVM_CONSTANT_Integer ++ cmpne r3, #JVM_CONSTANT_Float ++ cmpne r3, #JVM_CONSTANT_String ++ bne 1f ++ ++ DISPATCH_NEXT ++ ++ add r3, r2, lr, lsl #2 ++ ldr lr, [r3, #32] ++ PUSH lr ++ DISPATCH_FINISH ++1: ++ cmp r3, #JVM_CONSTANT_Class ++ bne 2f ++ add r0, r2, #32 ++ ldr r0, [r0, lr, lsl #2] ++ ldr r1, [r0, #60] ++ PUSH r1 ++ DISPATCH 0 ++2: ++ sub jpc, jpc, #\seq_len ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ mov r1, #1 ++ bl _ZN18InterpreterRuntime3ldcEP10JavaThreadb ++ ldr r0, [istate, #ISTATE_THREAD] @ thread ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr r1, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ cmp r1, #0 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++ ldr r3, [r0, #THREAD_VM_RESULT] ++ mov r2, #0 ++ PUSH r3 ++ str r2, [r0, #THREAD_VM_RESULT] ++ DISPATCH \seq_len ++ .endm ++ ++ Opcode ldc_w ++ ldc_w ++@----------------------------------------------------------------------------- ++ .macro ldc2_w jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #1] ++ ++ ldr tmp1, [istate, #ISTATE_METHOD] @ method ++ ldrb lr, [jpc, #2] ++ ldr r2, [tmp1, #12] @ constants ++ ++ DISPATCH_START \seq_len ++ ++ ldr tmp1, [r2, #8] ++ orr r3, lr, r3, lsl #8 ++ add tmp1, tmp1, #12 ++ ldrb tmp1, [tmp1, r3] ++ ++ DISPATCH_NEXT ++ ++ cmp tmp1, #JVM_CONSTANT_Long ++ cmpne tmp1, #JVM_CONSTANT_Double ++ bne vm_fatal_error ++ ++ DISPATCH_NEXT ++ add tmp1, r2, r3, lsl #2 ++ add tmp1, tmp1, #32 ++ ldmia tmp1, {r3, tmp1} ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ldc2_w ++ ldc2_w ++@----------------------------------------------------------------------------- ++ .macro iadd_u4store jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd_u4store ++ iadd_u4store ++@----------------------------------------------------------------------------- ++ .macro isub_u4store jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub_u4store ++ isub_u4store ++@----------------------------------------------------------------------------- ++ .macro iand_u4store jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand_u4store ++ iand_u4store ++@----------------------------------------------------------------------------- ++ .macro ior_u4store jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior_u4store ++ ior_u4store ++@----------------------------------------------------------------------------- ++ .macro ixor_u4store jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor_u4store ++ ixor_u4store ++@----------------------------------------------------------------------------- ++ .macro iadd_istore_N jpc_off=0, seq_len=2 ++ ldrb lr, [jpc, #1] ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ rsb r3, lr, #opc_istore_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd_istore_N ++ iadd_istore_N ++@----------------------------------------------------------------------------- ++ .macro isub_istore_N jpc_off=0, seq_len=2 ++ ldrb lr, [jpc, #1] ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ rsb r3, lr, #opc_istore_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub_istore_N ++ isub_istore_N ++@----------------------------------------------------------------------------- ++ .macro iand_istore_N jpc_off=0, seq_len=2 ++ ldrb lr, [jpc, #1] ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ rsb r3, lr, #opc_istore_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand_istore_N ++ iand_istore_N ++@----------------------------------------------------------------------------- ++ .macro ior_istore_N jpc_off=0, seq_len=2 ++ ldrb lr, [jpc, #1] ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ rsb r3, lr, #opc_istore_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior_istore_N ++ ior_istore_N ++@----------------------------------------------------------------------------- ++ .macro ixor_istore_N jpc_off=0, seq_len=2 ++ ldrb lr, [jpc, #1] ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ rsb r3, lr, #opc_istore_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor_istore_N ++ ixor_istore_N ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ rsb r2, r2, #0 ++ DISPATCH_NEXT ++ sub r3, r3, #opc_iconst_0 ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N ++ iload_iconst_N ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N jpc_off=0, seq_len=2 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N ++ iload_0_iconst_N ++@----------------------------------------------------------------------------- ++ .macro iaccess_0 jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb r3, [jpc, #2] ++ add tmp2, constpool, r2, lsl #12 ++ DISPATCH_START 4 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, r3, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ DISPATCH_NEXT ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry87: ++ ldr tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaccess_0 ++ iaccess_0 ++@----------------------------------------------------------------------------- ++ .macro aload_0_aload_0 jpc_off=0, seq_len=2 ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_aload_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode aload_0_aload_0 ++ aload_0_aload_0 ++@----------------------------------------------------------------------------- ++ .macro aload_0_iload_0 jpc_off=0, seq_len=2 ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_iload_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode aload_0_iload_0 ++ aload_0_iload_0 ++@----------------------------------------------------------------------------- ++ .macro iload_0_aload_0 jpc_off=0, seq_len=2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_aload_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_aload_0 ++ iload_0_aload_0 ++@----------------------------------------------------------------------------- ++ .macro iload_0_iload_0 jpc_off=0, seq_len=2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_iload_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iload_0 ++ iload_0_iload_0 ++@----------------------------------------------------------------------------- ++ .macro aload_0_iload jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode aload_0_iload ++ aload_0_iload ++@----------------------------------------------------------------------------- ++ .macro iload_0_iload jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iload ++ iload_0_iload ++@----------------------------------------------------------------------------- ++ .macro iload_aload_0 jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_aload_0 ++ DISPATCH_NEXT ++ rsb tmp1, r2, #0 ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_aload_0 ++ iload_aload_0 ++@----------------------------------------------------------------------------- ++ .macro iload_iload_0 jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_iload_0 ++ DISPATCH_NEXT ++ rsb tmp1, r2, #0 ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iload_0 ++ iload_iload_0 ++@----------------------------------------------------------------------------- ++ .macro iload_iload jpc_off=0, seq_len=4 ++ ldrb tmp2, [jpc, #3] ++ rsb tmp1, r2, #0 ++ DISPATCH_START \seq_len ++ rsb tmp2, tmp2, #0 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 tmp2, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iload ++ iload_iload ++@----------------------------------------------------------------------------- ++ .macro aload_0_astore_0 jpc_off=0, seq_len=2 ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_astore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode aload_0_astore_0 ++ aload_0_astore_0 ++@----------------------------------------------------------------------------- ++ .macro iload_0_istore_0 jpc_off=0, seq_len=2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r1, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_istore_0 ++ iload_0_istore_0 ++@----------------------------------------------------------------------------- ++ .macro aload_0_astore jpc_off=0, seq_len=3 ++ ldrb tmp2, [jpc, #2] ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, tmp2, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode aload_0_astore ++ aload_0_astore ++@----------------------------------------------------------------------------- ++ .macro iload_0_astore jpc_off=0, seq_len=3 ++ ldrb tmp2, [jpc, #2] ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, tmp2, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp1, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_astore ++ iload_0_astore ++@----------------------------------------------------------------------------- ++ .macro iload_astore_0 jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ rsb tmp1, r1, #opc_astore_0 ++ DISPATCH_NEXT ++ rsb tmp2, r2, #0 ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_astore_0 ++ iload_astore_0 ++@----------------------------------------------------------------------------- ++ .macro iload_istore_0 jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ rsb tmp1, r1, #opc_istore_0 ++ DISPATCH_NEXT ++ rsb tmp2, r2, #0 ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_istore_0 ++ iload_istore_0 ++@----------------------------------------------------------------------------- ++ .macro iload_astore jpc_off=0, seq_len=4 ++ ldrb tmp1, [jpc, #3] ++ rsb tmp2, r2, #0 ++ DISPATCH_START \seq_len ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str tmp2, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_astore ++ iload_astore ++@----------------------------------------------------------------------------- ++ .macro aload_0_iconst_m1 jpc_off=0, seq_len=2 ++ rsb tmp1, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ sub tmp2, r1, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode aload_0_iconst_m1 ++ aload_0_iconst_m1 ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_m1 jpc_off=0, seq_len=2 ++ add r0, r0, #opc_iload_0_iconst_N-opc_iload_0 ++ strb r0, [jpc] ++ b do_iload_0_iconst_N ++ .endm ++ ++ Opcode iload_0_iconst_m1 ++ iload_0_iconst_m1 ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_m1 jpc_off=0, seq_len=3 ++ cmp r0, #opc_iload ++ DISPATCH_START \seq_len ++ sub r3, r1, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ beq 1f ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++1: ++ mov tmp1, #opc_iload_iconst_N ++ strb tmp1, [jpc, #-\seq_len]! ++ b do_iload_iconst_N ++ .endm ++ ++ Opcode iload_iconst_m1 ++ iload_iconst_m1 ++@----------------------------------------------------------------------------- ++ .macro aload_0_bipush jpc_off=0, seq_len=3 ++ ldrsb r2, [jpc, #2] ++ rsb r3, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode aload_0_bipush ++ aload_0_bipush ++@----------------------------------------------------------------------------- ++ .macro iload_0_bipush jpc_off=0, seq_len=3 ++ ldrsb r2, [jpc, #2] ++ rsb r3, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_bipush ++ iload_0_bipush ++@----------------------------------------------------------------------------- ++ .macro aload_0_sipush jpc_off=0, seq_len=4 ++ ldrsb r2, [jpc, #2] @ zero_extendqisi2 ++ ldrb lr, [jpc, #3] @ zero_extendqisi2 ++ rsb r3, r0, #opc_aload_0 ++ DISPATCH_START \seq_len ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ orr r2, lr, r2, asl #8 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode aload_0_sipush ++ aload_0_sipush ++@----------------------------------------------------------------------------- ++ .macro iload_0_sipush jpc_off=0, seq_len=4 ++ ldrsb r2, [jpc, #2] @ zero_extendqisi2 ++ ldrb lr, [jpc, #3] @ zero_extendqisi2 ++ rsb r3, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ orr r2, lr, r2, asl #8 ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_sipush ++ iload_0_sipush ++@----------------------------------------------------------------------------- ++ .macro iload_bipush jpc_off=0, seq_len=4 ++ ldrsb r3, [jpc, #3] ++ DISPATCH_START \seq_len ++ ldr lr, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ PUSH2 r3, lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_bipush ++ iload_bipush ++@----------------------------------------------------------------------------- ++ .macro iload_sipush jpc_off=0, seq_len=5 ++ ldrsb r3, [jpc, #3] ++ ldrb lr, [jpc, #4] ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, -r2, lsl #2] ++ orr r3, lr, r3, asl #8 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_sipush ++ iload_sipush ++@----------------------------------------------------------------------------- ++ .macro iload_0_iaload jpc_off=0, seq_len=2 ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry19: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #2 ++ ldr lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iaload ++ iload_0_iaload ++@----------------------------------------------------------------------------- ++ .macro iload_iaload jpc_off=0, seq_len=3 ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry20: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #2 ++ ldr lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iaload ++ iload_iaload ++@----------------------------------------------------------------------------- ++ .macro iload_0_baload jpc_off=0, seq_len=2 ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry21: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2 ++ ldrsb lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_baload ++ iload_0_baload ++@----------------------------------------------------------------------------- ++ .macro iload_0_caload jpc_off=0, seq_len=2 ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry22: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #1 ++ ldrh lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_caload ++ iload_0_caload ++@----------------------------------------------------------------------------- ++ .macro iload_0_saload jpc_off=0, seq_len=2 ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry23: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #1 ++ ldrsh lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_saload ++ iload_0_saload ++@----------------------------------------------------------------------------- ++ .macro iload_baload jpc_off=0, seq_len=3 ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry24: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2 ++ ldrsb lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_baload ++ iload_baload ++@----------------------------------------------------------------------------- ++ .macro iload_caload jpc_off=0, seq_len=3 ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry25: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #1 ++ ldrh lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_caload ++ iload_caload ++@----------------------------------------------------------------------------- ++ .macro iload_saload jpc_off=0, seq_len=3 ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry26: ++ ldr lr, [r3, #8] @ lr = length ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ add r3, r3, r2, lsl #1 ++ ldrsh lr, [r3, #12] ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_saload ++ iload_saload ++@----------------------------------------------------------------------------- ++ .macro iload_0_iastore jpc_off=0, seq_len=2 ++ POP2 r2, r3 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry27: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iastore ++ iload_0_iastore ++@----------------------------------------------------------------------------- ++ .macro iload_0_bastore jpc_off=0, seq_len=2 ++ POP2 r2, r3 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry28: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2 ++ strb tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_bastore ++ iload_0_bastore ++@----------------------------------------------------------------------------- ++ .macro iload_0_castore jpc_off=0, seq_len=2 ++ POP2 r2, r3 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry29: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #1 ++ strh tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_castore ++ iload_0_castore ++@----------------------------------------------------------------------------- ++ .macro iload_iastore jpc_off=0, seq_len=3 ++ POP2 r3, tmp1 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry30: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r3, lr ++ bcs array_bound_exception_jpc_1_r3 ++ DISPATCH_NEXT ++ add tmp1, tmp1, r3, lsl #2 ++ str r2, [tmp1, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iastore ++ iload_iastore ++@----------------------------------------------------------------------------- ++ .macro iload_bastore jpc_off=0, seq_len=3 ++ POP2 r3, tmp1 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry31: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r3, lr ++ bcs array_bound_exception_jpc_1_r3 ++ DISPATCH_NEXT ++ add tmp1, tmp1, r3 ++ strb r2, [tmp1, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_bastore ++ iload_bastore ++@----------------------------------------------------------------------------- ++ .macro iload_castore jpc_off=0, seq_len=3 ++ POP2 r3, tmp1 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry32: ++ ldr lr, [tmp1, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r3, lr ++ bcs array_bound_exception_jpc_1_r3 ++ DISPATCH_NEXT ++ add tmp1, tmp1, r3, lsl #1 ++ strh r2, [tmp1, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_castore ++ iload_castore ++@----------------------------------------------------------------------------- ++ .macro iload_0_iadd jpc_off=0, seq_len=2 ++ POP tmp2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iadd ++ iload_0_iadd ++@----------------------------------------------------------------------------- ++ .macro iload_iadd jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ POP tmp1 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iadd ++ iload_iadd ++@----------------------------------------------------------------------------- ++ .macro iload_0_isub jpc_off=0, seq_len=2 ++ POP tmp2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_isub ++ iload_0_isub ++@----------------------------------------------------------------------------- ++ .macro iload_isub jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ POP tmp1 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_isub ++ iload_isub ++@----------------------------------------------------------------------------- ++ .macro iload_0_imul jpc_off=0, seq_len=2 ++ POP r2 ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ mul r3, r2, lr ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_imul ++ iload_0_imul ++@----------------------------------------------------------------------------- ++ .macro iload_imul jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ mul lr, r3, r2 ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_imul ++ iload_imul ++@----------------------------------------------------------------------------- ++ .macro iload_0_idiv jpc_off=0, seq_len=2 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ add jpc, jpc, #1 ++ POP r1 ++ b int_div ++ .endm ++ ++ Opcode iload_0_idiv ++ iload_0_idiv ++@----------------------------------------------------------------------------- ++ .macro iload_idiv jpc_off=0, seq_len=3 ++ add jpc, jpc, #2 ++ POP r1 ++ ldr r0, [locals, -r2, lsl #2] ++ b int_div ++ .endm ++ ++ Opcode iload_idiv ++ iload_idiv ++@----------------------------------------------------------------------------- ++ .macro iload_0_irem jpc_off=0, seq_len=2 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ add jpc, jpc, #1 ++ POP r1 ++ b int_rem ++ .endm ++ ++ Opcode iload_0_irem ++ iload_0_irem ++@----------------------------------------------------------------------------- ++ .macro iload_irem jpc_off=0, seq_len=3 ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ POP r1 ++ b int_rem ++ .endm ++ ++ Opcode iload_irem ++ iload_irem ++@----------------------------------------------------------------------------- ++ .macro iload_0_ineg jpc_off=0, seq_len=2 ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ rsb lr, lr, #0 ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_ineg ++ iload_0_ineg ++@----------------------------------------------------------------------------- ++ .macro iload_ineg jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ rsb r2, r2, #0 ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_ineg ++ iload_ineg ++@----------------------------------------------------------------------------- ++ .macro iload_0_ishl jpc_off=0, seq_len=2 ++ POP r2 ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ mov lr, r2, lsl lr ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_ishl ++ iload_0_ishl ++@----------------------------------------------------------------------------- ++ .macro iload_ishl jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ mov r2, r3, lsl r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_ishl ++ iload_ishl ++@----------------------------------------------------------------------------- ++ .macro iload_0_ishr jpc_off=0, seq_len=2 ++ POP r2 ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ mov lr, r2, asr lr ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_ishr ++ iload_0_ishr ++@----------------------------------------------------------------------------- ++ .macro iload_ishr jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ mov r2, r3, asr r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_ishr ++ iload_ishr ++@----------------------------------------------------------------------------- ++ .macro iload_0_iushr jpc_off=0, seq_len=2 ++ POP r2 ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ mov lr, r2, lsr lr ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iushr ++ iload_0_iushr ++@----------------------------------------------------------------------------- ++ .macro iload_iushr jpc_off=0, seq_len=3 ++ ldrb r2, [jpc, #1] ++ DISPATCH_START \seq_len ++ POP r3 ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ mov r2, r3, lsr r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iushr ++ iload_iushr ++@----------------------------------------------------------------------------- ++ .macro iload_0_iand jpc_off=0, seq_len=2 ++ POP tmp2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ and tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iand ++ iload_0_iand ++@----------------------------------------------------------------------------- ++ .macro iload_iand jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ POP tmp1 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iand ++ iload_iand ++@----------------------------------------------------------------------------- ++ .macro iload_0_ior jpc_off=0, seq_len=2 ++ POP tmp2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ orr tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_ior ++ iload_0_ior ++@----------------------------------------------------------------------------- ++ .macro iload_ior jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ POP tmp1 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_ior ++ iload_ior ++@----------------------------------------------------------------------------- ++ .macro iload_0_ixor jpc_off=0, seq_len=2 ++ POP tmp2 ++ rsb tmp1, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr tmp1, [locals, tmp1, lsl #2] ++ DISPATCH_NEXT ++ eor tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_ixor ++ iload_0_ixor ++@----------------------------------------------------------------------------- ++ .macro iload_ixor jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ POP tmp1 ++ DISPATCH_NEXT ++ ldr tmp2, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_ixor ++ iload_ixor ++@----------------------------------------------------------------------------- ++ .macro iload_0_i2c jpc_off=0, seq_len=2 ++ rsb lr, r0, #opc_iload_0 ++ DISPATCH_START \seq_len ++ ldr lr, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ mov lr, lr, asl #16 ++ mov lr, lr, lsr #16 ++ PUSH lr ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_i2c ++ iload_0_i2c ++@----------------------------------------------------------------------------- ++ .macro iload_i2c jpc_off=0, seq_len=3 ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++ DISPATCH_NEXT ++ mov r2, r2, asl #16 ++ mov r2, r2, lsr #16 ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_i2c ++ iload_i2c ++@----------------------------------------------------------------------------- ++ .macro iload_0_ifeq jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_ifeq ++ iload_0_ifeq ++@----------------------------------------------------------------------------- ++ .macro iload_ifeq jpc_off=0, seq_len=2 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_ifeq ++ iload_ifeq ++@----------------------------------------------------------------------------- ++ .macro iload_0_ifne jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_ifne ++ iload_0_ifne ++@----------------------------------------------------------------------------- ++ .macro iload_ifne jpc_off=0, seq_len=2 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_ifne ++ iload_ifne ++@----------------------------------------------------------------------------- ++ .macro iload_0_iflt jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_iflt ++ iload_0_iflt ++@----------------------------------------------------------------------------- ++ .macro iload_iflt jpc_off=0, seq_len=2 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_iflt ++ iload_iflt ++@----------------------------------------------------------------------------- ++ .macro iload_0_ifge jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_ifge ++ iload_0_ifge ++@----------------------------------------------------------------------------- ++ .macro iload_ifge jpc_off=0, seq_len=2 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_ifge ++ iload_ifge ++@----------------------------------------------------------------------------- ++ .macro iload_0_ifgt jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_ifgt ++ iload_0_ifgt ++@----------------------------------------------------------------------------- ++ .macro iload_ifgt jpc_off=0, seq_len=2 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_ifgt ++ iload_ifgt ++@----------------------------------------------------------------------------- ++ .macro iload_0_ifle jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ rsb r3, r0, #opc_iload_0 ++ add jpc, jpc, #1 ++ ldr r3, [locals, r3, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_ifle ++ iload_0_ifle ++@----------------------------------------------------------------------------- ++ .macro iload_ifle jpc_off=0, seq_len=2 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ add jpc, jpc, #2 ++ ldr r3, [locals, -r2, lsl #2] ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_ifle ++ iload_ifle ++@----------------------------------------------------------------------------- ++ .macro iload_0_if_icmpeq jpc_off=0, seq_len=1 ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_if_icmpeq ++ iload_0_if_icmpeq ++@----------------------------------------------------------------------------- ++ .macro iload_if_icmpeq jpc_off=0, seq_len=2 ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_if_icmpeq ++ iload_if_icmpeq ++@----------------------------------------------------------------------------- ++ .macro iload_0_if_icmpne jpc_off=0, seq_len=1 ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_if_icmpne ++ iload_0_if_icmpne ++@----------------------------------------------------------------------------- ++ .macro iload_if_icmpne jpc_off=0, seq_len=2 ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_if_icmpne ++ iload_if_icmpne ++@----------------------------------------------------------------------------- ++ .macro iload_0_if_icmplt jpc_off=0, seq_len=1 ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_if_icmplt ++ iload_0_if_icmplt ++@----------------------------------------------------------------------------- ++ .macro iload_if_icmplt jpc_off=0, seq_len=2 ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_if_icmplt ++ iload_if_icmplt ++@----------------------------------------------------------------------------- ++ .macro iload_0_if_icmpge jpc_off=0, seq_len=1 ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_if_icmpge ++ iload_0_if_icmpge ++@----------------------------------------------------------------------------- ++ .macro iload_if_icmpge jpc_off=0, seq_len=2 ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_if_icmpge ++ iload_if_icmpge ++@----------------------------------------------------------------------------- ++ .macro iload_0_if_icmpgt jpc_off=0, seq_len=1 ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_if_icmpgt ++ iload_0_if_icmpgt ++@----------------------------------------------------------------------------- ++ .macro iload_if_icmpgt jpc_off=0, seq_len=2 ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_if_icmpgt ++ iload_if_icmpgt ++@----------------------------------------------------------------------------- ++ .macro iload_0_if_icmple jpc_off=0, seq_len=1 ++ POP r3 ++ rsb r2, r0, #opc_iload_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ ldr r2, [locals, r2, lsl #2] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_0_if_icmple ++ iload_0_if_icmple ++@----------------------------------------------------------------------------- ++ .macro iload_if_icmple jpc_off=0, seq_len=2 ++ POP r3 ++ ldrsb r1, [jpc, #3] ++ ldrb ip, [jpc, #4] ++ ldr r2, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iload_if_icmple ++ iload_if_icmple ++@----------------------------------------------------------------------------- ++ .macro iload_0_ireturn jpc_off=0, seq_len=1 ++ rsb r0, r0, #opc_iload_0 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr r1, [locals, r0, lsl #2] ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++ .endm ++ ++ Opcode iload_0_ireturn ++ iload_0_ireturn ++@----------------------------------------------------------------------------- ++ .macro iload_ireturn jpc_off=0, seq_len=2 ++ ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr r1, [locals, -r2, lsl #2] ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #2 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++ .endm ++ ++ Opcode iload_ireturn ++ iload_ireturn ++@----------------------------------------------------------------------------- ++ .macro iload_0_invokeresolved jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokeresolved ++ .endm ++ ++ Opcode iload_0_invokeresolved ++ iload_0_invokeresolved ++@----------------------------------------------------------------------------- ++ .macro aload_0_invokeresolved jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_aload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokeresolved ++ .endm ++ ++ Opcode aload_0_invokeresolved ++ aload_0_invokeresolved ++@----------------------------------------------------------------------------- ++ .macro iload_invokeresolved jpc_off=0, seq_len=5 ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokeresolved ++ .endm ++ ++ Opcode iload_invokeresolved ++ iload_invokeresolved ++@----------------------------------------------------------------------------- ++ .macro iload_0_invokevfinal jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokevfinal ++ .endm ++ ++ Opcode iload_0_invokevfinal ++ iload_0_invokevfinal ++@----------------------------------------------------------------------------- ++ .macro aload_0_invokevfinal jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_aload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokevfinal ++ .endm ++ ++ Opcode aload_0_invokevfinal ++ aload_0_invokevfinal ++@----------------------------------------------------------------------------- ++ .macro iload_invokevfinal jpc_off=0, seq_len=5 ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokevfinal ++ .endm ++ ++ Opcode iload_invokevfinal ++ iload_invokevfinal ++@----------------------------------------------------------------------------- ++ .macro iload_0_invokespecialresolved jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokespecialresolved ++ .endm ++ ++ Opcode iload_0_invokespecialresolved ++ iload_0_invokespecialresolved ++@----------------------------------------------------------------------------- ++ .macro aload_0_invokespecialresolved jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_aload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokespecialresolved ++ .endm ++ ++ Opcode aload_0_invokespecialresolved ++ aload_0_invokespecialresolved ++@----------------------------------------------------------------------------- ++ .macro iload_invokespecialresolved jpc_off=0, seq_len=5 ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokespecialresolved ++ .endm ++ ++ Opcode iload_invokespecialresolved ++ iload_invokespecialresolved ++@----------------------------------------------------------------------------- ++ .macro iload_0_invokestaticresolved jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokestaticresolved ++ .endm ++ ++ Opcode iload_0_invokestaticresolved ++ iload_0_invokestaticresolved ++@----------------------------------------------------------------------------- ++ .macro aload_0_invokestaticresolved jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_aload_0 ++ ldr r0, [locals, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokestaticresolved ++ .endm ++ ++ Opcode aload_0_invokestaticresolved ++ aload_0_invokestaticresolved ++@----------------------------------------------------------------------------- ++ .macro iload_invokestaticresolved jpc_off=0, seq_len=5 ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokestaticresolved ++ .endm ++ ++ Opcode iload_invokestaticresolved ++ iload_invokestaticresolved ++@----------------------------------------------------------------------------- ++ .macro iload_0_invokeinterface jpc_off=0, seq_len=1 ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_iload_0 ++ ldr r0, [locals, r0, lsl #2] ++ PUSH r0 ++ b do_invokeinterface ++ .endm ++ ++ Opcode iload_0_invokeinterface ++ iload_0_invokeinterface ++@----------------------------------------------------------------------------- ++ .macro aload_0_invokeinterface jpc_off=0, seq_len=1 ++ add jpc, jpc, #1 ++ rsb r0, r0, #opc_aload_0 ++ ldr r0, [locals, r0, lsl #2] ++ PUSH r0 ++ b do_invokeinterface ++ .endm ++ ++ Opcode aload_0_invokeinterface ++ aload_0_invokeinterface ++@----------------------------------------------------------------------------- ++ .macro iload_invokeinterface jpc_off=0, seq_len=2 ++ ldr r0, [locals, -r2, lsl #2] ++ add jpc, jpc, #2 ++ PUSH r0 ++ b do_invokeinterface ++ .endm ++ ++ Opcode iload_invokeinterface ++ iload_invokeinterface ++@----------------------------------------------------------------------------- ++ .macro aload_0_igetfield jpc_off=0, seq_len=4 ++ add r0, r0, #opc_iaccess_0-opc_aload_0 ++ strb r0, [jpc] ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode aload_0_igetfield ++ aload_0_igetfield ++@----------------------------------------------------------------------------- ++ .macro iload_igetfield jpc_off=0, seq_len=5 ++ ldrb ip, [jpc, #4] ++ rsb tmp1, r2, #0 ++ ldrb r3, [jpc, #3] ++ add tmp2, constpool, ip, lsl #12 ++ DISPATCH_START 5 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, r3, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ DISPATCH_NEXT ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry88: ++ ldr tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_igetfield ++ iload_igetfield ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_istore_0 jpc_off=0, seq_len=2 ++ sub r3, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ rsb r2, r1, #opc_istore_0 ++ str r3, [locals, r2, lsl #2] ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iconst_m1_istore_0 ++ iconst_m1_istore_0 ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_astore jpc_off=0, seq_len=3 ++ ldrb r2, [jpc, #2] ++ sub r3, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ str r3, [locals, -r2, lsl #2] ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iconst_m1_astore ++ iconst_m1_astore ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_iadd jpc_off=0, seq_len=2 ++ sub tmp1, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ POP tmp2 ++ DISPATCH_NEXT ++ add tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iconst_m1_iadd ++ iconst_m1_iadd ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_isub jpc_off=0, seq_len=2 ++ sub tmp1, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ POP tmp2 ++ DISPATCH_NEXT ++ sub tmp1, tmp2, tmp1 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iconst_m1_isub ++ iconst_m1_isub ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_idiv jpc_off=0, seq_len=2 ++ subs lr, r0, #opc_iconst_2 ++ DISPATCH_START \seq_len ++ POP tmp1 ++ DISPATCH_NEXT ++ beq 5f ++ bcc 3f ++ cmp lr, #(opc_iconst_4-opc_iconst_2) ++ beq 4f ++ bcc 2f ++@ divide by 5 ++1: ++ mvn lr, #0x198 @ Form 0x66666667 in lr ++ bic lr, lr, #0x9800 ++ add lr, lr, lr, lsl #16 ++ smull a3, a4, tmp1, lr ++ mov a3, tmp1, asr #31 ++ rsb tmp1, a3, a4, asr #1 ++ b 6f ++@ divide by 3 ++2: ++ mvn lr, #0xa9 @ Form 0x55555556 in lr ++ bic lr, lr, #0xaa00 ++ add lr, lr, lr, lsl #16 ++ smull a3, a4, tmp1, lr ++ sub tmp1, a4, tmp1, asr #31 ++ b 6f ++3: ++ cmp lr, #(opc_iconst_0-opc_iconst_2) ++ beq .iconst_div_rem_0 ++ rsbcc tmp1, tmp1, #0 @ Divide by -1 or 1 ++ b 6f ++@ divide by 4 ++4: movs a4, tmp1 ++ addmi a4, a4, #3 ++ mov tmp1, a4, asr #2 ++ b 6f ++@ divide by 2 ++5: ++ add tmp1, tmp1, tmp1, lsr #31 ++ mov tmp1, tmp1, asr #1 ++6: ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iconst_m1_idiv ++ iconst_m1_idiv ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_ishl jpc_off=0, seq_len=2 ++ sub tmp1, r0, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ POP r2 ++ DISPATCH_NEXT ++ mov tmp1, r2, lsl tmp1 ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iconst_m1_ishl ++ iconst_m1_ishl ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_if_icmpeq jpc_off=0, seq_len=1 ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iconst_m1_if_icmpeq ++ iconst_m1_if_icmpeq ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_if_icmpne jpc_off=0, seq_len=1 ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iconst_m1_if_icmpne ++ iconst_m1_if_icmpne ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_if_icmplt jpc_off=0, seq_len=1 ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iconst_m1_if_icmplt ++ iconst_m1_if_icmplt ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_if_icmpge jpc_off=0, seq_len=1 ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iconst_m1_if_icmpge ++ iconst_m1_if_icmpge ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_if_icmpgt jpc_off=0, seq_len=1 ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iconst_m1_if_icmpgt ++ iconst_m1_if_icmpgt ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_if_icmple jpc_off=0, seq_len=1 ++ POP r3 ++ sub r2, r0, #opc_iconst_0 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iconst_m1_if_icmple ++ iconst_m1_if_icmple ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_ireturn jpc_off=0, seq_len=1 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ sub r1, r0, #opc_iconst_0 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++ .endm ++ ++ Opcode iconst_m1_ireturn ++ iconst_m1_ireturn ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_invokeresolved jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ sub r0, r0, #opc_iconst_0 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokeresolved ++ .endm ++ ++ Opcode iconst_m1_invokeresolved ++ iconst_m1_invokeresolved ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_invokevfinal jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ sub r0, r0, #opc_iconst_0 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokevfinal ++ .endm ++ ++ Opcode iconst_m1_invokevfinal ++ iconst_m1_invokevfinal ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_invokestaticresolved jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ sub r0, r0, #opc_iconst_0 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokestaticresolved ++ .endm ++ ++ Opcode iconst_m1_invokestaticresolved ++ iconst_m1_invokestaticresolved ++@----------------------------------------------------------------------------- ++ .macro iconst_m1_invokespecialresolved jpc_off=0, seq_len=4 ++ add jpc, jpc, #1 ++ sub r0, r0, #opc_iconst_0 ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] ++ PUSH r0 ++ b do_invokespecialresolved ++ .endm ++ ++ Opcode iconst_m1_invokespecialresolved ++ iconst_m1_invokespecialresolved ++@----------------------------------------------------------------------------- ++ .macro iaload_iconst_m1 jpc_off=0, seq_len=2 ++ sub r2, r1, #opc_iconst_0 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry38: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_iconst_m1 ++ iaload_iconst_m1 ++@----------------------------------------------------------------------------- ++ .macro iaload_bipush jpc_off=0, seq_len=3 ++ ldrsb r2, [jpc, #2] ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++.abortentry39: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_3_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_bipush ++ iaload_bipush ++@----------------------------------------------------------------------------- ++ .macro iaload_sipush jpc_off=0, seq_len=4 ++ ldrsb r2, [jpc, #2] ++ ldrb tmp1, [jpc, #3] ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++ orr r2, tmp1, r2, lsl #8 ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_4 ++#endif ++.abortentry40: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_4_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_sipush ++ iaload_sipush ++@----------------------------------------------------------------------------- ++ .macro iaload_iload jpc_off=0, seq_len=3 ++ ldrb r2, [jpc, #2] ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++ ldr r2, [locals, -r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++.abortentry41: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_3_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_iload ++ iaload_iload ++@----------------------------------------------------------------------------- ++ .macro iaload_iload_0 jpc_off=0, seq_len=2 ++ rsb r2, r1, #opc_iload_0 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry42: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_iload_0 ++ iaload_iload_0 ++@----------------------------------------------------------------------------- ++ .macro iaload_aload_0 jpc_off=0, seq_len=2 ++ rsb r2, r1, #opc_aload_0 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++ ldr r2, [locals, r2, lsl #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry42_1: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ PUSH2 r2, r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_aload_0 ++ iaload_aload_0 ++@----------------------------------------------------------------------------- ++ .macro iaload_iaload jpc_off=0, seq_len=2 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry43: ++ ldr tmp1, [r3, #8] @ tmp1 = length ++ DISPATCH_START \seq_len ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_2 ++ add r3, r3, r2, lsl #2 ++ POP lr @ r2 = index, lr = arrayref ++ ldr r2, [r3, #12] ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry44: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr r2, [lr, #12] ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_iaload ++ iaload_iaload ++@----------------------------------------------------------------------------- ++ .macro iaload_astore jpc_off=0, seq_len=3 ++ ldrb r2, [jpc, #2] ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++.abortentry45: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_3_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ str r3, [locals, -r2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_astore ++ iaload_astore ++@----------------------------------------------------------------------------- ++ .macro iaload_istore_0 jpc_off=0, seq_len=2 ++ rsb r2, r1, #opc_istore_0 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry46: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr r3, [lr, #12] ++ DISPATCH_NEXT ++ str r3, [locals, r2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_istore_0 ++ iaload_istore_0 ++@----------------------------------------------------------------------------- ++ .macro iaload_iastore jpc_off=0, seq_len=2 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry47: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_START \seq_len ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr tmp1, [lr, #12] ++ ++ POP2 r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry48: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_iastore ++ iaload_iastore ++@----------------------------------------------------------------------------- ++ .macro iaload_bastore jpc_off=0, seq_len=2 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry49: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_START \seq_len ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr tmp1, [lr, #12] ++ ++ POP2 r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry50: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2 ++ strb tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_bastore ++ iaload_bastore ++@----------------------------------------------------------------------------- ++ .macro iaload_castore jpc_off=0, seq_len=2 ++ POP2 r3, lr @ r3 = index, lr = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry51: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_START \seq_len ++ cmp r3, tmp1 ++ bcs array_bound_exception_jpc_2_r3 ++ add lr, lr, r3, lsl #2 ++ ldr tmp1, [lr, #12] ++ ++ POP2 r2, r3 @ tmp1 = value, r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry52: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #1 ++ strh tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_castore ++ iaload_castore ++@----------------------------------------------------------------------------- ++ .macro iaload_iand jpc_off=0, seq_len=2 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry58: ++ ldr tmp1, [r3, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_2 ++ add r3, r3, r2, lsl #2 ++ ldr tmp1, [r3, #12] @ tmp1 = tos ++ POP r2 @ r2 = tosm1 ++ DISPATCH_NEXT ++ and tmp1, r2, tmp1 @ tosm1 tos ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_iand ++ iaload_iand ++@----------------------------------------------------------------------------- ++ .macro iaload_ior jpc_off=0, seq_len=2 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry59: ++ ldr tmp1, [r3, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_2 ++ add r3, r3, r2, lsl #2 ++ ldr tmp1, [r3, #12] @ tmp1 = tos ++ POP r2 @ r2 = tosm1 ++ DISPATCH_NEXT ++ orr tmp1, r2, tmp1 @ tosm1 tos ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_ior ++ iaload_ior ++@----------------------------------------------------------------------------- ++ .macro iaload_ixor jpc_off=0, seq_len=2 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++ DISPATCH_START \seq_len ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_2 ++#endif ++.abortentry60: ++ ldr tmp1, [r3, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_2 ++ add r3, r3, r2, lsl #2 ++ ldr tmp1, [r3, #12] @ tmp1 = tos ++ POP r2 @ r2 = tosm1 ++ DISPATCH_NEXT ++ eor tmp1, r2, tmp1 @ tosm1 tos ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaload_ixor ++ iaload_ixor ++@----------------------------------------------------------------------------- ++ .macro iaload_ifeq jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry61: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_ifeq ++ iaload_ifeq ++@----------------------------------------------------------------------------- ++ .macro iaload_ifne jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry62: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_ifne ++ iaload_ifne ++@----------------------------------------------------------------------------- ++ .macro iaload_iflt jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry63: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_iflt ++ iaload_iflt ++@----------------------------------------------------------------------------- ++ .macro iaload_ifge jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry64: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_ifge ++ iaload_ifge ++@----------------------------------------------------------------------------- ++ .macro iaload_ifgt jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry65: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_ifgt ++ iaload_ifgt ++@----------------------------------------------------------------------------- ++ .macro iaload_ifle jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry66: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r3, [r3, #12] @ r1 = tos ++ ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_ifle ++ iaload_ifle ++@----------------------------------------------------------------------------- ++ .macro iaload_if_icmpeq jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry67: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_if_icmpeq ++ iaload_if_icmpeq ++@----------------------------------------------------------------------------- ++ .macro iaload_if_icmpne jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry68: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_if_icmpne ++ iaload_if_icmpne ++@----------------------------------------------------------------------------- ++ .macro iaload_if_icmplt jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry69: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_if_icmplt ++ iaload_if_icmplt ++@----------------------------------------------------------------------------- ++ .macro iaload_if_icmpge jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry70: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_if_icmpge ++ iaload_if_icmpge ++@----------------------------------------------------------------------------- ++ .macro iaload_if_icmpgt jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry71: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_if_icmpgt ++ iaload_if_icmpgt ++@----------------------------------------------------------------------------- ++ .macro iaload_if_icmple jpc_off=0, seq_len=1 ++ POP2 r2, r3 @ r2 = index, r3 = arrayref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++.abortentry72: ++ ldr r1, [r3, #8] @ r1 = length ++ cmp r2, r1 ++ bcs array_bound_exception_jpc_0 ++ add r3, r3, r2, lsl #2 ++ ldr r2, [r3, #12] @ r1 = tos ++ ++ POP r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ cmp r3, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaload_if_icmple ++ iaload_if_icmple ++@----------------------------------------------------------------------------- ++ .macro iadd_iload jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd_iload ++ iadd_iload ++@----------------------------------------------------------------------------- ++ .macro iadd_iload_0 jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ rsb r3, r1, #opc_iload_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd_iload_0 ++ iadd_iload_0 ++@----------------------------------------------------------------------------- ++ .macro iadd_iaload jpc_off=0, seq_len=2 ++ POP3 r2, r3, lr @ lr = ref ++ DISPATCH_START \seq_len ++ add r2, r3, r2 @ r2 = index ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry73: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr tmp1, [lr, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd_iaload ++ iadd_iaload ++@----------------------------------------------------------------------------- ++ .macro iadd_istore jpc_off=0, seq_len=3 ++ mov r0, #opc_iadd_u4store ++ strb r0, [jpc] ++ b do_iadd_u4store ++ .endm ++ ++ Opcode iadd_istore ++ iadd_istore ++@----------------------------------------------------------------------------- ++ .macro iadd_istore_0 jpc_off=0, seq_len=2 ++ mov r0, #opc_iadd_istore_N ++ strb r0, [jpc] ++ b do_iadd_istore_N ++ .endm ++ ++ Opcode iadd_istore_0 ++ iadd_istore_0 ++@----------------------------------------------------------------------------- ++ .macro iadd_iastore jpc_off=0, seq_len=2 ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++ add tmp1, r3, r2 @ tmp1 = value ++ POP2 r2, r3 @ r2, index, r3 = ref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry106: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd_iastore ++ iadd_iastore ++@----------------------------------------------------------------------------- ++ .macro iadd_iadd jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ add tmp2, r3, r2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd_iadd ++ iadd_iadd ++@----------------------------------------------------------------------------- ++ .macro iadd_isub jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ add tmp2, r3, r2 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd_isub ++ iadd_isub ++@----------------------------------------------------------------------------- ++ .macro iadd_ifeq jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_ifeq ++ iadd_ifeq ++@----------------------------------------------------------------------------- ++ .macro iadd_ifne jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_ifne ++ iadd_ifne ++@----------------------------------------------------------------------------- ++ .macro iadd_iflt jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_iflt ++ iadd_iflt ++@----------------------------------------------------------------------------- ++ .macro iadd_ifge jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_ifge ++ iadd_ifge ++@----------------------------------------------------------------------------- ++ .macro iadd_ifgt jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_ifgt ++ iadd_ifgt ++@----------------------------------------------------------------------------- ++ .macro iadd_ifle jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_ifle ++ iadd_ifle ++@----------------------------------------------------------------------------- ++ .macro iadd_if_icmpeq jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_if_icmpeq ++ iadd_if_icmpeq ++@----------------------------------------------------------------------------- ++ .macro iadd_if_icmpne jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_if_icmpne ++ iadd_if_icmpne ++@----------------------------------------------------------------------------- ++ .macro iadd_if_icmplt jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_if_icmplt ++ iadd_if_icmplt ++@----------------------------------------------------------------------------- ++ .macro iadd_if_icmpge jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_if_icmpge ++ iadd_if_icmpge ++@----------------------------------------------------------------------------- ++ .macro iadd_if_icmpgt jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_if_icmpgt ++ iadd_if_icmpgt ++@----------------------------------------------------------------------------- ++ .macro iadd_if_icmple jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iadd_if_icmple ++ iadd_if_icmple ++@----------------------------------------------------------------------------- ++ .macro iadd_goto jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++ POP2 r2, r3 ++ add r2, r3, r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd_goto ++ iadd_goto ++@----------------------------------------------------------------------------- ++ .macro iadd_ireturn jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ add r1, r3, r2 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++ .endm ++ ++ Opcode iadd_ireturn ++ iadd_ireturn ++@----------------------------------------------------------------------------- ++ .macro iadd_iinc jpc_off=0, seq_len=4 ++ POP2 tmp1, lr ++ DISPATCH_START \seq_len ++ add tmp1, lr, tmp1 ++ ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc ++ ldrsb r2, [jpc, #-1] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ ldr tmp1, [locals, -r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp1, r2 ++ str tmp1, [locals, -r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iadd_iinc ++ iadd_iinc ++@----------------------------------------------------------------------------- ++ .macro isub_iload jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub_iload ++ isub_iload ++@----------------------------------------------------------------------------- ++ .macro isub_iload_0 jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ rsb r3, r1, #opc_iload_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub_iload_0 ++ isub_iload_0 ++@----------------------------------------------------------------------------- ++ .macro isub_iaload jpc_off=0, seq_len=2 ++ POP3 r2, r3, lr @ lr = ref ++ DISPATCH_START \seq_len ++ sub r2, r3, r2 @ r2 = index ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry74: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr tmp1, [lr, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub_iaload ++ isub_iaload ++@----------------------------------------------------------------------------- ++ .macro isub_istore jpc_off=0, seq_len=3 ++ mov r0, #opc_isub_u4store ++ strb r0, [jpc] ++ b do_isub_u4store ++ .endm ++ ++ Opcode isub_istore ++ isub_istore ++@----------------------------------------------------------------------------- ++ .macro isub_istore_0 jpc_off=0, seq_len=2 ++ mov r0, #opc_isub_istore_N ++ strb r0, [jpc] ++ b do_isub_istore_N ++ .endm ++ ++ Opcode isub_istore_0 ++ isub_istore_0 ++@----------------------------------------------------------------------------- ++ .macro isub_iastore jpc_off=0, seq_len=2 ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++ sub tmp1, r3, r2 @ tmp1 = value ++ POP2 r2, r3 @ r2, index, r3 = ref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry105: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub_iastore ++ isub_iastore ++@----------------------------------------------------------------------------- ++ .macro isub_iadd jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ sub tmp2, r3, r2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub_iadd ++ isub_iadd ++@----------------------------------------------------------------------------- ++ .macro isub_isub jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ sub tmp2, r3, r2 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub_isub ++ isub_isub ++@----------------------------------------------------------------------------- ++ .macro isub_ifeq jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_ifeq ++ isub_ifeq ++@----------------------------------------------------------------------------- ++ .macro isub_ifne jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_ifne ++ isub_ifne ++@----------------------------------------------------------------------------- ++ .macro isub_iflt jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_iflt ++ isub_iflt ++@----------------------------------------------------------------------------- ++ .macro isub_ifge jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_ifge ++ isub_ifge ++@----------------------------------------------------------------------------- ++ .macro isub_ifgt jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_ifgt ++ isub_ifgt ++@----------------------------------------------------------------------------- ++ .macro isub_ifle jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_ifle ++ isub_ifle ++@----------------------------------------------------------------------------- ++ .macro isub_if_icmpeq jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_if_icmpeq ++ isub_if_icmpeq ++@----------------------------------------------------------------------------- ++ .macro isub_if_icmpne jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_if_icmpne ++ isub_if_icmpne ++@----------------------------------------------------------------------------- ++ .macro isub_if_icmplt jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_if_icmplt ++ isub_if_icmplt ++@----------------------------------------------------------------------------- ++ .macro isub_if_icmpge jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_if_icmpge ++ isub_if_icmpge ++@----------------------------------------------------------------------------- ++ .macro isub_if_icmpgt jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_if_icmpgt ++ isub_if_icmpgt ++@----------------------------------------------------------------------------- ++ .macro isub_if_icmple jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ sub r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode isub_if_icmple ++ isub_if_icmple ++@----------------------------------------------------------------------------- ++ .macro isub_goto jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++ POP2 r2, r3 ++ sub r2, r3, r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub_goto ++ isub_goto ++@----------------------------------------------------------------------------- ++ .macro isub_ireturn jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ sub r1, r3, r2 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++ .endm ++ ++ Opcode isub_ireturn ++ isub_ireturn ++@----------------------------------------------------------------------------- ++ .macro isub_iinc jpc_off=0, seq_len=4 ++ POP2 tmp1, lr ++ DISPATCH_START \seq_len ++ sub tmp1, lr, tmp1 ++ ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc ++ ldrsb r2, [jpc, #-1] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ ldr tmp1, [locals, -r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp1, r2 ++ str tmp1, [locals, -r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode isub_iinc ++ isub_iinc ++@----------------------------------------------------------------------------- ++ .macro iand_iload jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand_iload ++ iand_iload ++@----------------------------------------------------------------------------- ++ .macro iand_iload_0 jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ rsb r3, r1, #opc_iload_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ and tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand_iload_0 ++ iand_iload_0 ++@----------------------------------------------------------------------------- ++ .macro iand_iaload jpc_off=0, seq_len=2 ++ POP3 r2, r3, lr @ lr = ref ++ DISPATCH_START \seq_len ++ and r2, r3, r2 @ r2 = index ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry75: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr tmp1, [lr, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand_iaload ++ iand_iaload ++@----------------------------------------------------------------------------- ++ .macro iand_istore jpc_off=0, seq_len=3 ++ mov r0, #opc_iand_u4store ++ strb r0, [jpc] ++ b do_iand_u4store ++ .endm ++ ++ Opcode iand_istore ++ iand_istore ++@----------------------------------------------------------------------------- ++ .macro iand_istore_0 jpc_off=0, seq_len=2 ++ mov r0, #opc_iand_istore_N ++ strb r0, [jpc] ++ b do_iand_istore_N ++ .endm ++ ++ Opcode iand_istore_0 ++ iand_istore_0 ++@----------------------------------------------------------------------------- ++ .macro iand_iastore jpc_off=0, seq_len=2 ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++ and tmp1, r3, r2 @ tmp1 = value ++ POP2 r2, r3 @ r2, index, r3 = ref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry107: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand_iastore ++ iand_iastore ++@----------------------------------------------------------------------------- ++ .macro iand_iadd jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ and tmp2, r3, r2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand_iadd ++ iand_iadd ++@----------------------------------------------------------------------------- ++ .macro iand_isub jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ and tmp2, r3, r2 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand_isub ++ iand_isub ++@----------------------------------------------------------------------------- ++ .macro iand_ifeq jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_ifeq ++ iand_ifeq ++@----------------------------------------------------------------------------- ++ .macro iand_ifne jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_ifne ++ iand_ifne ++@----------------------------------------------------------------------------- ++ .macro iand_iflt jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_iflt ++ iand_iflt ++@----------------------------------------------------------------------------- ++ .macro iand_ifge jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_ifge ++ iand_ifge ++@----------------------------------------------------------------------------- ++ .macro iand_ifgt jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_ifgt ++ iand_ifgt ++@----------------------------------------------------------------------------- ++ .macro iand_ifle jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_ifle ++ iand_ifle ++@----------------------------------------------------------------------------- ++ .macro iand_if_icmpeq jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_if_icmpeq ++ iand_if_icmpeq ++@----------------------------------------------------------------------------- ++ .macro iand_if_icmpne jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_if_icmpne ++ iand_if_icmpne ++@----------------------------------------------------------------------------- ++ .macro iand_if_icmplt jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_if_icmplt ++ iand_if_icmplt ++@----------------------------------------------------------------------------- ++ .macro iand_if_icmpge jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_if_icmpge ++ iand_if_icmpge ++@----------------------------------------------------------------------------- ++ .macro iand_if_icmpgt jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_if_icmpgt ++ iand_if_icmpgt ++@----------------------------------------------------------------------------- ++ .macro iand_if_icmple jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ and r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iand_if_icmple ++ iand_if_icmple ++@----------------------------------------------------------------------------- ++ .macro iand_goto jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++ POP2 r2, r3 ++ and r2, r3, r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand_goto ++ iand_goto ++@----------------------------------------------------------------------------- ++ .macro iand_ireturn jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ and r1, r3, r2 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++ .endm ++ ++ Opcode iand_ireturn ++ iand_ireturn ++@----------------------------------------------------------------------------- ++ .macro iand_iinc jpc_off=0, seq_len=4 ++ POP2 tmp1, lr ++ DISPATCH_START \seq_len ++ and tmp1, lr, tmp1 ++ ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc ++ ldrsb r2, [jpc, #-1] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ ldr tmp1, [locals, -r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp1, r2 ++ str tmp1, [locals, -r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iand_iinc ++ iand_iinc ++@----------------------------------------------------------------------------- ++ .macro ior_iload jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior_iload ++ ior_iload ++@----------------------------------------------------------------------------- ++ .macro ior_iload_0 jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ rsb r3, r1, #opc_iload_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ orr tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior_iload_0 ++ ior_iload_0 ++@----------------------------------------------------------------------------- ++ .macro ior_iaload jpc_off=0, seq_len=2 ++ POP3 r2, r3, lr @ lr = ref ++ DISPATCH_START \seq_len ++ orr r2, r3, r2 @ r2 = index ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry76: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr tmp1, [lr, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior_iaload ++ ior_iaload ++@----------------------------------------------------------------------------- ++ .macro ior_istore jpc_off=0, seq_len=3 ++ mov r0, #opc_ior_u4store ++ strb r0, [jpc] ++ b do_ior_u4store ++ .endm ++ ++ Opcode ior_istore ++ ior_istore ++@----------------------------------------------------------------------------- ++ .macro ior_istore_0 jpc_off=0, seq_len=2 ++ mov r0, #opc_ior_istore_N ++ strb r0, [jpc] ++ b do_ior_istore_N ++ .endm ++ ++ Opcode ior_istore_0 ++ ior_istore_0 ++@----------------------------------------------------------------------------- ++ .macro ior_iastore jpc_off=0, seq_len=2 ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++ orr tmp1, r3, r2 @ tmp1 = value ++ POP2 r2, r3 @ r2, index, r3 = ref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry108: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior_iastore ++ ior_iastore ++@----------------------------------------------------------------------------- ++ .macro ior_iadd jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ orr tmp2, r3, r2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior_iadd ++ ior_iadd ++@----------------------------------------------------------------------------- ++ .macro ior_isub jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ orr tmp2, r3, r2 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior_isub ++ ior_isub ++@----------------------------------------------------------------------------- ++ .macro ior_ifeq jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_ifeq ++ ior_ifeq ++@----------------------------------------------------------------------------- ++ .macro ior_ifne jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_ifne ++ ior_ifne ++@----------------------------------------------------------------------------- ++ .macro ior_iflt jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_iflt ++ ior_iflt ++@----------------------------------------------------------------------------- ++ .macro ior_ifge jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_ifge ++ ior_ifge ++@----------------------------------------------------------------------------- ++ .macro ior_ifgt jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_ifgt ++ ior_ifgt ++@----------------------------------------------------------------------------- ++ .macro ior_ifle jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_ifle ++ ior_ifle ++@----------------------------------------------------------------------------- ++ .macro ior_if_icmpeq jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_if_icmpeq ++ ior_if_icmpeq ++@----------------------------------------------------------------------------- ++ .macro ior_if_icmpne jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_if_icmpne ++ ior_if_icmpne ++@----------------------------------------------------------------------------- ++ .macro ior_if_icmplt jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_if_icmplt ++ ior_if_icmplt ++@----------------------------------------------------------------------------- ++ .macro ior_if_icmpge jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_if_icmpge ++ ior_if_icmpge ++@----------------------------------------------------------------------------- ++ .macro ior_if_icmpgt jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_if_icmpgt ++ ior_if_icmpgt ++@----------------------------------------------------------------------------- ++ .macro ior_if_icmple jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ orr r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ior_if_icmple ++ ior_if_icmple ++@----------------------------------------------------------------------------- ++ .macro ior_goto jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++ POP2 r2, r3 ++ orr r2, r3, r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior_goto ++ ior_goto ++@----------------------------------------------------------------------------- ++ .macro ior_ireturn jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ orr r1, r3, r2 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++ .endm ++ ++ Opcode ior_ireturn ++ ior_ireturn ++@----------------------------------------------------------------------------- ++ .macro ior_iinc jpc_off=0, seq_len=4 ++ POP2 tmp1, lr ++ DISPATCH_START \seq_len ++ orr tmp1, lr, tmp1 ++ ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc ++ ldrsb r2, [jpc, #-1] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ ldr tmp1, [locals, -r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp1, r2 ++ str tmp1, [locals, -r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ior_iinc ++ ior_iinc ++@----------------------------------------------------------------------------- ++ .macro ixor_iload jpc_off=0, seq_len=3 ++ ldrb r3, [jpc, #2] ++ DISPATCH_START \seq_len ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor_iload ++ ixor_iload ++@----------------------------------------------------------------------------- ++ .macro ixor_iload_0 jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ rsb r3, r1, #opc_iload_0 ++ POP2 tmp2, tmp1 ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ eor tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor_iload_0 ++ ixor_iload_0 ++@----------------------------------------------------------------------------- ++ .macro ixor_iaload jpc_off=0, seq_len=2 ++ POP3 r2, r3, lr @ lr = ref ++ DISPATCH_START \seq_len ++ eor r2, r3, r2 @ r2 = index ++#ifndef HW_NULL_PTR_CHECK ++ cmp lr, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry77: ++ ldr tmp1, [lr, #8] @ tmp1 = length ++ DISPATCH_NEXT ++ cmp r2, tmp1 ++ bcs array_bound_exception_jpc_1 ++ add lr, lr, r2, lsl #2 ++ ldr tmp1, [lr, #12] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor_iaload ++ ixor_iaload ++@----------------------------------------------------------------------------- ++ .macro ixor_istore jpc_off=0, seq_len=3 ++ mov r0, #opc_ixor_u4store ++ strb r0, [jpc] ++ b do_ixor_u4store ++ .endm ++ ++ Opcode ixor_istore ++ ixor_istore ++@----------------------------------------------------------------------------- ++ .macro ixor_istore_0 jpc_off=0, seq_len=2 ++ mov r0, #opc_ixor_istore_N ++ strb r0, [jpc] ++ b do_ixor_istore_N ++ .endm ++ ++ Opcode ixor_istore_0 ++ ixor_istore_0 ++@----------------------------------------------------------------------------- ++ .macro ixor_iastore jpc_off=0, seq_len=2 ++ POP2 r2, r3 ++ DISPATCH_START \seq_len ++ eor tmp1, r3, r2 @ tmp1 = value ++ POP2 r2, r3 @ r2, index, r3 = ref ++#ifndef HW_NULL_PTR_CHECK ++ cmp r3, #0 ++ beq null_ptr_exception_jpc_1 ++#endif ++.abortentry109: ++ ldr lr, [r3, #8] @ lr = limit ++ DISPATCH_NEXT ++ cmp r2, lr ++ bcs array_bound_exception_jpc_1 ++ DISPATCH_NEXT ++ add r3, r3, r2, lsl #2 ++ str tmp1, [r3, #12] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor_iastore ++ ixor_iastore ++@----------------------------------------------------------------------------- ++ .macro ixor_iadd jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ eor tmp2, r3, r2 ++ DISPATCH_NEXT ++ add tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor_iadd ++ ixor_iadd ++@----------------------------------------------------------------------------- ++ .macro ixor_isub jpc_off=0, seq_len=2 ++ DISPATCH_START \seq_len ++ POP3 r2, r3, tmp1 ++ DISPATCH_NEXT ++ eor tmp2, r3, r2 ++ DISPATCH_NEXT ++ sub tmp2, tmp1, tmp2 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor_isub ++ ixor_isub ++@----------------------------------------------------------------------------- ++ .macro ixor_ifeq jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_ifeq ++ ixor_ifeq ++@----------------------------------------------------------------------------- ++ .macro ixor_ifne jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_ifne ++ ixor_ifne ++@----------------------------------------------------------------------------- ++ .macro ixor_iflt jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_iflt ++ ixor_iflt ++@----------------------------------------------------------------------------- ++ .macro ixor_ifge jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_ifge ++ ixor_ifge ++@----------------------------------------------------------------------------- ++ .macro ixor_ifgt jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_ifgt ++ ixor_ifgt ++@----------------------------------------------------------------------------- ++ .macro ixor_ifle jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r3, r3, r2 ++ add jpc, jpc, #1 ++ cmp r3, #0 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_ifle ++ ixor_ifle ++@----------------------------------------------------------------------------- ++ .macro ixor_if_icmpeq jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_if_icmpeq ++ ixor_if_icmpeq ++@----------------------------------------------------------------------------- ++ .macro ixor_if_icmpne jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_if_icmpne ++ ixor_if_icmpne ++@----------------------------------------------------------------------------- ++ .macro ixor_if_icmplt jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_if_icmplt ++ ixor_if_icmplt ++@----------------------------------------------------------------------------- ++ .macro ixor_if_icmpge jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_if_icmpge ++ ixor_if_icmpge ++@----------------------------------------------------------------------------- ++ .macro ixor_if_icmpgt jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_if_icmpgt ++ ixor_if_icmpgt ++@----------------------------------------------------------------------------- ++ .macro ixor_if_icmple jpc_off=0, seq_len=1 ++ POP3 r2, r3, lr ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ eor r2, r3, r2 ++ add jpc, jpc, #1 ++ cmp lr, r2 ++ orr ip, ip, r1, lsl #8 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode ixor_if_icmple ++ ixor_if_icmple ++@----------------------------------------------------------------------------- ++ .macro ixor_goto jpc_off=0, seq_len=1 ++ ldrsb r1, [jpc, #2] ++ ldrb ip, [jpc, #3] ++ add jpc, jpc, #1 ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++ POP2 r2, r3 ++ eor r2, r3, r2 ++ DISPATCH_NEXT ++ PUSH r2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor_goto ++ ixor_goto ++@----------------------------------------------------------------------------- ++ .macro ixor_ireturn jpc_off=0, seq_len=1 ++ POP2 r2, r3 ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ eor r1, r3, r2 ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ cmp tmp1, tmp2 ++ bcc 1f ++2: ++ mov r3, #0 ++ ldr stack, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [stack, #0] ++ ldrh r0, [r0, #40] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r1, [stack, r0, lsl #2]! ++ cmp istate, #0 ++ beq normal_return ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ DISPATCH_START 3 @ ldrb r0, [jpc, #3]! ++ sub stack, stack, #4 ++ ldr r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ DISPATCH_NEXT @ ldrb r1, [jpc, #2] ++ add r2, r2, #4 ++ DISPATCH_NEXT @ ldr ip, [dispatch, r0, lsl #2] ++ str r2, [tmp_xxx, #THREAD_JAVA_SP] ++ DISPATCH_NEXT @ ldrb r2, [jpc, #1] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT @ ands lr, ip, lr ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_FINISH ++1: ++ PUSH r1 ++ add jpc, jpc, #1 ++ bl return_check_monitors ++ POP r1 ++ b 2b ++ .endm ++ ++ Opcode ixor_ireturn ++ ixor_ireturn ++@----------------------------------------------------------------------------- ++ .macro ixor_iinc jpc_off=0, seq_len=4 ++ POP2 tmp1, lr ++ DISPATCH_START \seq_len ++ eor tmp1, lr, tmp1 ++ ldrb r3, [jpc, #-2] @ ECN: jpc now points to next bc ++ ldrsb r2, [jpc, #-1] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ ldr tmp1, [locals, -r3, lsl #2] ++ DISPATCH_NEXT ++ add tmp1, tmp1, r2 ++ str tmp1, [locals, -r3, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode ixor_iinc ++ ixor_iinc ++@----------------------------------------------------------------------------- ++ .macro iinc_iconst_m1 jpc_off=0, seq_len=4 ++ ldrsb tmp1, [jpc, #2] ++ sub lr, r1, #opc_iconst_0 ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ ldr r3, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ add r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH lr ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iinc_iconst_m1 ++ iinc_iconst_m1 ++@----------------------------------------------------------------------------- ++ .macro iinc_iload jpc_off=0, seq_len=5 ++ ldrb lr, [jpc, #4] ++ ldrsb tmp1, [jpc, #2] ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ ldr r3, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ rsb lr, lr, #0 ++ DISPATCH_NEXT ++ add r3, r3, tmp1 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ ldr tmp1, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iinc_iload ++ iinc_iload ++@----------------------------------------------------------------------------- ++ .macro iinc_iload_0 jpc_off=0, seq_len=4 ++ rsb lr, r1, #opc_iload_0 ++ ldrsb tmp1, [jpc, #2] ++ DISPATCH_START \seq_len ++ rsb tmp2, r2, #0 ++ ldr r3, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ add r3, r3, tmp1 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_NEXT ++ ldr tmp1, [locals, lr, lsl #2] ++ DISPATCH_NEXT ++ PUSH tmp1 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iinc_iload_0 ++ iinc_iload_0 ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_iload jpc_off=0, seq_len=6 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb r3, [jpc, #2] ++ add tmp2, constpool, r2, lsl #12 ++ DISPATCH_START 6 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, r3, lsl #4 ++ ldrb r3, [jpc, #-1] ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_5 ++#endif ++ DISPATCH_NEXT ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ rsb r3, r3, #0 ++.abortentry89: ++ ldr tmp2, [tmp1, tmp2] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaccess_0_iload ++ iaccess_0_iload ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_iload_0 jpc_off=0, seq_len=5 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add tmp2, constpool, r2, lsl #12 ++ DISPATCH_START 5 ++ rsb r3, r1, #opc_iload_0 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_4 ++#endif ++ DISPATCH_NEXT ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++.abortentry90: ++ ldr tmp2, [tmp1, tmp2] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ PUSH2 r3, tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaccess_0_iload_0 ++ iaccess_0_iload_0 ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_iadd jpc_off=0, seq_len=5 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add tmp2, constpool, r2, lsl #12 ++ DISPATCH_START 5 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ DISPATCH_NEXT ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_4 ++#endif ++ DISPATCH_NEXT ++ ldr tmp2, [tmp2, #8] ++ DISPATCH_NEXT ++ POP r3 ++.abortentry91: ++ ldr tmp2, [tmp1, tmp2] ++ DISPATCH_NEXT ++ add tmp2, tmp2, r3 ++ PUSH tmp2 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iaccess_0_iadd ++ iaccess_0_iadd ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_ifeq jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry92: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_ifeq ++ iaccess_0_ifeq ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_ifne jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry93: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_ifne ++ iaccess_0_ifne ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_iflt jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry94: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_iflt ++ iaccess_0_iflt ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_ifge jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry95: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_ifge ++ iaccess_0_ifge ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_ifgt jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry96: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_ifgt ++ iaccess_0_ifgt ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_ifle jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ orr ip, ip, r0, lsl #8 ++.abortentry97: ++ ldr tmp2, [tmp1, tmp2] ++ cmp tmp2, #0 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_ifle ++ iaccess_0_ifle ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_if_icmpeq jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry98: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ beq 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_if_icmpeq ++ iaccess_0_if_icmpeq ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_if_icmpne jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry99: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ bne 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_if_icmpne ++ iaccess_0_if_icmpne ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_if_icmplt jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry100: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ blt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_if_icmplt ++ iaccess_0_if_icmplt ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_if_icmpge jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry101: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ bge 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_if_icmpge ++ iaccess_0_if_icmpge ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_if_icmpgt jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry102: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ bgt 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_if_icmpgt ++ iaccess_0_if_icmpgt ++@----------------------------------------------------------------------------- ++ .macro iaccess_0_if_icmple jpc_off=0, seq_len=4 ++ ldrb r2, [jpc, #3] ++ rsb tmp1, r0, #opc_iaccess_0 ++ ldrb ip, [jpc, #2] ++ add jpc, jpc, #4 ++ ldrsb r0, [jpc, #1] ++ add tmp2, constpool, r2, lsl #12 ++ ldr tmp1, [locals, tmp1, lsl #2] ++ add tmp2, ip, lsl #4 ++ ldrb ip, [jpc, #2] ++#ifndef HW_NULL_PTR_CHECK ++ cmp tmp1, #0 ++ beq null_ptr_exception_jpc_3 ++#endif ++ ldr tmp2, [tmp2, #8] ++ POP r3 ++ orr ip, ip, r0, lsl #8 ++.abortentry103: ++ ldr tmp2, [tmp1, tmp2] ++ cmp r3, tmp2 ++ ble 1f ++ mov ip, #3 ++1: ++ ldrb r0, [jpc, ip]! ++ DISPATCH_BYTECODE ++ .endm ++ ++ Opcode iaccess_0_if_icmple ++ iaccess_0_if_icmple ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_iadd jpc_off=0, seq_len=3 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ add r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_iadd ++ iload_0_iconst_N_iadd ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_isub jpc_off=0, seq_len=3 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ sub r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_isub ++ iload_0_iconst_N_isub ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_iand jpc_off=0, seq_len=3 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ and r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_iand ++ iload_0_iconst_N_iand ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_ior jpc_off=0, seq_len=3 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ orr r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_ior ++ iload_0_iconst_N_ior ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_ixor jpc_off=0, seq_len=3 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ ldrb r2, [jpc, #1-\seq_len] ++ DISPATCH_NEXT ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub tmp1, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ eor r3, r3, tmp1 ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_ixor ++ iload_0_iconst_N_ixor ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_iadd jpc_off=0, seq_len=4 ++ ldrb r3, [jpc, #2] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr r2, [locals, r2, lsl #2] ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ add r3, r2, r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_iadd ++ iload_iconst_N_iadd ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_isub jpc_off=0, seq_len=4 ++ ldrb r3, [jpc, #2] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr r2, [locals, r2, lsl #2] ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ sub r3, r2, r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_isub ++ iload_iconst_N_isub ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_iand jpc_off=0, seq_len=4 ++ ldrb r3, [jpc, #2] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr r2, [locals, r2, lsl #2] ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ and r3, r2, r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_iand ++ iload_iconst_N_iand ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_ior jpc_off=0, seq_len=4 ++ ldrb r3, [jpc, #2] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr r2, [locals, r2, lsl #2] ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ orr r3, r2, r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_ior ++ iload_iconst_N_ior ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_ixor jpc_off=0, seq_len=4 ++ ldrb r3, [jpc, #2] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ DISPATCH_NEXT ++ ldr r2, [locals, r2, lsl #2] ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ eor r3, r2, r3 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH r3 ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_ixor ++ iload_iconst_N_ixor ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_iadd_u4store jpc_off=0, seq_len=5 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ add r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_iadd_u4store ++ iload_0_iconst_N_iadd_u4store ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_iadd_u4store jpc_off=0, seq_len=6 ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #5] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ add r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_iadd_u4store ++ iload_iconst_N_iadd_u4store ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_iadd_istore_N jpc_off=0, seq_len=4 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ add r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #opc_istore_0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_iadd_istore_N ++ iload_0_iconst_N_iadd_istore_N ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_iadd_istore_N jpc_off=0, seq_len=5 ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #4] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ add r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_iadd_istore_N ++ iload_iconst_N_iadd_istore_N ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_isub_u4store jpc_off=0, seq_len=5 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_isub_u4store ++ iload_0_iconst_N_isub_u4store ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_isub_u4store jpc_off=0, seq_len=6 ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #5] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ sub r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_isub_u4store ++ iload_iconst_N_isub_u4store ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_isub_istore_N jpc_off=0, seq_len=4 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ sub r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #opc_istore_0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_isub_istore_N ++ iload_0_iconst_N_isub_istore_N ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_isub_istore_N jpc_off=0, seq_len=5 ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #4] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ sub r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_isub_istore_N ++ iload_iconst_N_isub_istore_N ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_iand_u4store jpc_off=0, seq_len=5 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ and r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_iand_u4store ++ iload_0_iconst_N_iand_u4store ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_iand_u4store jpc_off=0, seq_len=6 ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #5] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ and r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_iand_u4store ++ iload_iconst_N_iand_u4store ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_iand_istore_N jpc_off=0, seq_len=4 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ and r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #opc_istore_0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_iand_istore_N ++ iload_0_iconst_N_iand_istore_N ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_iand_istore_N jpc_off=0, seq_len=5 ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #4] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ and r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_iand_istore_N ++ iload_iconst_N_iand_istore_N ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_ior_u4store jpc_off=0, seq_len=5 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ orr r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_ior_u4store ++ iload_0_iconst_N_ior_u4store ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_ior_u4store jpc_off=0, seq_len=6 ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #5] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ orr r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_ior_u4store ++ iload_iconst_N_ior_u4store ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_ior_istore_N jpc_off=0, seq_len=4 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ orr r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #opc_istore_0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_ior_istore_N ++ iload_0_iconst_N_ior_istore_N ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_ior_istore_N jpc_off=0, seq_len=5 ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #4] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ orr r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_ior_istore_N ++ iload_iconst_N_ior_istore_N ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_ixor_u4store jpc_off=0, seq_len=5 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ eor r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_ixor_u4store ++ iload_0_iconst_N_ixor_u4store ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_ixor_u4store jpc_off=0, seq_len=6 ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #5] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ eor r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_ixor_u4store ++ iload_iconst_N_ixor_u4store ++@----------------------------------------------------------------------------- ++ .macro iload_0_iconst_N_ixor_istore_N jpc_off=0, seq_len=4 ++ rsb r3, r0, #opc_iload_0_iconst_N ++ DISPATCH_START \seq_len ++ sub r2, r2, #opc_iconst_0 ++ DISPATCH_NEXT ++ ldrb tmp1, [jpc, #-1] ++ ldr r3, [locals, r3, lsl #2] ++ DISPATCH_NEXT ++ eor r3, r3, r2 ++ DISPATCH_NEXT ++ rsb tmp1, tmp1, #opc_istore_0 ++ DISPATCH_NEXT ++ str r3, [locals, tmp1, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_0_iconst_N_ixor_istore_N ++ iload_0_iconst_N_ixor_istore_N ++@----------------------------------------------------------------------------- ++ .macro iload_iconst_N_ixor_istore_N jpc_off=0, seq_len=5 ++ ldrb r3, [jpc, #2] ++ ldrb lr, [jpc, #4] ++ rsb r2, r2, #0 ++ DISPATCH_START \seq_len ++ sub r3, r3, #opc_iconst_0 ++ DISPATCH_NEXT ++ rsb tmp2, lr, #opc_istore_0 ++ DISPATCH_NEXT ++ ldr tmp1, [locals, r2, lsl #2] ++ DISPATCH_NEXT ++ eor r3, tmp1, r3 ++ DISPATCH_NEXT ++ str r3, [locals, tmp2, lsl #2] ++ DISPATCH_FINISH ++ .endm ++ ++ Opcode iload_iconst_N_ixor_istore_N ++ iload_iconst_N_ixor_istore_N ++ .macro MAIN_DISPATCH_TABLE ++ .word do_nop ++ .word do_u4const_0 ++ .word dispatch_iconst_m1+1 ++ .word dispatch_iconst_0+1 ++ .word dispatch_iconst_1+1 ++ .word dispatch_iconst_2+1 ++ .word dispatch_iconst_3+1 ++ .word dispatch_iconst_4+1 ++ .word dispatch_iconst_5+1 ++ .word do_u8const_0 ++ .word do_lconst_1 ++ .word do_u4const_0 ++ .word do_fconst_1 ++ .word do_fconst_2 ++ .word do_u8const_0 ++ .word do_dconst_1 ++ .word do_bipush ++ .word do_sipush ++ .word do_ldc ++ .word do_ldc_w ++ .word do_ldc2_w ++ .word dispatch_iload+2 ++ .word do_u8load ++ .word dispatch_fload+2 ++ .word do_u8load ++ .word dispatch_aload+2 ++ .word dispatch_iload_0+1 ++ .word dispatch_iload_1+1 ++ .word dispatch_iload_2+1 ++ .word dispatch_iload_3+1 ++ .word do_u8load_0 ++ .word do_u8load_1 ++ .word do_u8load_2 ++ .word do_u8load_3 ++ .word do_fload_0 ++ .word do_fload_0 ++ .word do_fload_0 ++ .word do_fload_0 ++ .word do_u8load_0 ++ .word do_u8load_1 ++ .word do_u8load_2 ++ .word do_u8load_3 ++ .word dispatch_aload_0+1 ++ .word dispatch_aload_1+1 ++ .word dispatch_aload_2+1 ++ .word dispatch_aload_3+1 ++ .word dispatch_iaload+1 ++ .word do_u8aload ++ .word dispatch_faload+1 ++ .word do_u8aload ++ .word dispatch_aaload+1 ++ .word do_baload ++ .word do_caload ++ .word do_saload ++ .word do_u4store ++ .word do_u8store ++ .word do_u4store ++ .word do_u8store ++ .word do_u4store ++ .word do_u4store_0 ++ .word do_u4store_1 ++ .word do_u4store_2 ++ .word do_u4store_3 ++ .word do_u8store_0 ++ .word do_u8store_1 ++ .word do_u8store_2 ++ .word do_u8store_3 ++ .word do_u4store_0 ++ .word do_u4store_1 ++ .word do_u4store_2 ++ .word do_u4store_3 ++ .word do_u8store_0 ++ .word do_u8store_1 ++ .word do_u8store_2 ++ .word do_u8store_3 ++ .word do_u4store_0 ++ .word do_u4store_1 ++ .word do_u4store_2 ++ .word do_u4store_3 ++ .word do_u4astore ++ .word do_u8astore ++ .word do_u4astore ++ .word do_u8astore ++ .word do_aastore ++ .word do_bastore ++ .word do_u2astore ++ .word do_u2astore ++ .word do_jpop ++ .word do_jpop2 ++ .word do_dup ++ .word do_dup_x1 ++ .word do_dup_x2 ++ .word do_dup2 ++ .word do_dup2_x1 ++ .word do_dup2_x2 ++ .word do_swap ++ .word dispatch_iadd+1 ++ .word do_ladd ++ .word do_fadd ++ .word do_dadd ++ .word dispatch_isub+1 ++ .word do_lsub ++ .word do_fsub ++ .word do_dsub ++ .word do_imul ++ .word do_lmul ++ .word do_fmul ++ .word do_dmul ++ .word do_idiv ++ .word do_ldiv ++ .word do_fdiv ++ .word do_ddiv ++ .word do_irem ++ .word do_lrem ++ .word do_frem ++ .word do_drem ++ .word do_ineg ++ .word do_lneg ++ .word do_fneg ++ .word do_dneg ++ .word do_ishl ++ .word do_lshl ++ .word do_ishr ++ .word do_lshr ++ .word do_iushr ++ .word do_lushr ++ .word dispatch_iand+1 ++ .word do_land ++ .word dispatch_ior+1 ++ .word do_lor ++ .word dispatch_ixor+1 ++ .word do_lxor ++ .word dispatch_iinc+3 ++ .word do_i2l ++ .word do_i2f ++ .word do_i2d ++ .word do_l2i ++ .word do_l2f ++ .word do_l2d ++ .word do_f2i ++ .word do_f2l ++ .word do_f2d ++ .word do_d2i ++ .word do_d2l ++ .word do_d2f ++ .word do_i2b ++ .word do_i2c ++ .word do_i2s ++ .word do_lcmp ++ .word do_fcmpl ++ .word do_fcmpg ++ .word do_dcmpl ++ .word do_dcmpg ++ .word do_ifeq_unsafe ++ .word do_ifne_unsafe ++ .word do_iflt_unsafe ++ .word do_ifge_unsafe ++ .word do_ifgt_unsafe ++ .word do_ifle_unsafe ++ .word do_if_icmpeq_unsafe ++ .word do_if_icmpne_unsafe ++ .word do_if_icmplt_unsafe ++ .word do_if_icmpge_unsafe ++ .word do_if_icmpgt_unsafe ++ .word do_if_icmple_unsafe ++ .word do_if_icmpeq_unsafe ++ .word do_if_icmpne_unsafe ++ .word do_goto_unsafe ++ .word do_jsr ++ .word do_ret ++ .word do_tableswitch ++ .word do_lookupswitch ++ .word do_ireturn_unsafe ++ .word do_lreturn_unsafe ++ .word do_ireturn_unsafe ++ .word do_lreturn_unsafe ++ .word do_ireturn_unsafe ++ .word do_return_unsafe ++ .word do_getstatic ++ .word do_putstatic ++ .word do_getfield ++ .word do_putfield ++ .word do_invokevirtual ++ .word do_invokespecial ++ .word do_invokestatic ++ .word do_invokeinterface ++ .word do_undefined ++ .word do_new ++ .word do_newarray ++ .word do_anewarray ++ .word do_arraylength ++ .word do_athrow ++ .word do_checkcast ++ .word do_instanceof ++ .word do_monitorenter ++ .word do_monitorexit ++ .word do_wide ++ .word do_multianewarray ++ .word do_ifeq_unsafe ++ .word do_ifne_unsafe ++ .word do_goto_w ++ .word do_jsr_w ++ .word do_breakpoint ++ .word do_undefined ++ .word do_bgetfield ++ .word do_cgetfield ++ .word do_undefined ++ .word do_undefined ++ .word do_igetfield ++ .word do_lgetfield ++ .word do_sgetfield ++ .word do_aputfield ++ .word do_bputfield ++ .word do_cputfield ++ .word do_undefined ++ .word do_undefined ++ .word do_iputfield ++ .word do_lputfield ++ .word do_undefined ++ .word dispatch_iaccess_0+4 ++ .word dispatch_iaccess_1+4 ++ .word dispatch_iaccess_2+4 ++ .word dispatch_iaccess_3+4 ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .word do_invokevfinal ++ .word do_undefined ++ .word do_undefined ++ .word do_return_register_finalizer ++ .word do_undefined ++ .word dispatch_iload_0_iconst_N+2 ++ .word dispatch_iload_1_iconst_N+2 ++ .word dispatch_iload_2_iconst_N+2 ++ .word dispatch_iload_3_iconst_N+2 ++ .word dispatch_iload_iconst_N+3 ++ .word do_invokeresolved ++ .word do_iadd_istore_N ++ .word do_isub_istore_N ++ .word do_iand_istore_N ++ .word do_ior_istore_N ++ .word do_ixor_istore_N ++ .word do_iadd_u4store ++ .word do_isub_u4store ++ .word do_iand_u4store ++ .word do_ior_u4store ++ .word do_ixor_u4store ++ .word do_invokespecialresolved ++ .word do_invokestaticresolved ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .endm ++ .macro SUB_DISPATCH_TABLES ++dispatch_iconst_m1: ++dispatch_iconst_0: ++dispatch_iconst_1: ++dispatch_iconst_2: ++dispatch_iconst_3: ++dispatch_iconst_4: ++dispatch_iconst_5: ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_m1_astore ++ .word do_iconst_N ++ .word do_iconst_m1_astore ++ .word do_iconst_N ++ .word do_iconst_m1_astore ++ .word do_iconst_m1_istore_0 ++ .word do_iconst_m1_istore_0 ++ .word do_iconst_m1_istore_0 ++ .word do_iconst_m1_istore_0 ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_m1_iadd ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_m1_isub ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_m1_idiv ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_m1_ishl ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_m1_if_icmpeq ++ .word do_iconst_m1_if_icmpne ++ .word do_iconst_m1_if_icmplt ++ .word do_iconst_m1_if_icmpge ++ .word do_iconst_m1_if_icmpgt ++ .word do_iconst_m1_if_icmple ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_m1_ireturn ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_m1_invokevfinal ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_m1_invokeresolved ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_m1_invokespecialresolved ++ .word do_iconst_m1_invokestaticresolved ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++dispatch_iload: ++dispatch_fload: ++dispatch_aload: ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_iconst_m1 ++ .word do_iload_iconst_m1 ++ .word do_iload_iconst_m1 ++ .word do_iload_iconst_m1 ++ .word do_iload_iconst_m1 ++ .word do_iload_iconst_m1 ++ .word do_iload_iconst_m1 ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_bipush ++ .word do_iload_sipush ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_iload ++ .word do_u4load ++ .word do_iload_iload ++ .word do_u4load ++ .word do_iload_iload ++ .word do_iload_iload_0 ++ .word do_iload_iload_0 ++ .word do_iload_iload_0 ++ .word do_iload_iload_0 ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_aload_0 ++ .word do_iload_aload_0 ++ .word do_iload_aload_0 ++ .word do_iload_aload_0 ++ .word do_iload_iaload ++ .word do_u4load ++ .word do_iload_iaload ++ .word do_u4load ++ .word do_iload_iaload ++ .word do_iload_baload ++ .word do_iload_caload ++ .word do_iload_saload ++ .word do_iload_astore ++ .word do_u4load ++ .word do_iload_astore ++ .word do_u4load ++ .word do_iload_astore ++ .word do_iload_istore_0 ++ .word do_iload_istore_0 ++ .word do_iload_istore_0 ++ .word do_iload_istore_0 ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_astore_0 ++ .word do_iload_astore_0 ++ .word do_iload_astore_0 ++ .word do_iload_astore_0 ++ .word do_iload_iastore ++ .word do_u4load ++ .word do_iload_iastore ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_bastore ++ .word do_iload_castore ++ .word do_iload_castore ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_iadd ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_isub ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_imul ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_idiv ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_irem ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_ineg ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_ishl ++ .word do_u4load ++ .word do_iload_ishr ++ .word do_u4load ++ .word do_iload_iushr ++ .word do_u4load ++ .word do_iload_iand ++ .word do_u4load ++ .word do_iload_ior ++ .word do_u4load ++ .word do_iload_ixor ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_i2c ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_ifeq ++ .word do_iload_ifne ++ .word do_iload_iflt ++ .word do_iload_ifge ++ .word do_iload_ifgt ++ .word do_iload_ifle ++ .word do_iload_if_icmpeq ++ .word do_iload_if_icmpne ++ .word do_iload_if_icmplt ++ .word do_iload_if_icmpge ++ .word do_iload_if_icmpgt ++ .word do_iload_if_icmple ++ .word do_iload_if_icmpeq ++ .word do_iload_if_icmpne ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_ireturn ++ .word do_u4load ++ .word do_iload_ireturn ++ .word do_u4load ++ .word do_iload_ireturn ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_invokeinterface ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_ifeq ++ .word do_iload_ifne ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_igetfield ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_invokevfinal ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_invokeresolved ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_iload_invokespecialresolved ++ .word do_iload_invokestaticresolved ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++ .word do_u4load ++dispatch_iload_0: ++dispatch_iload_1: ++dispatch_iload_2: ++dispatch_iload_3: ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_iconst_m1 ++ .word do_iload_0_iconst_m1 ++ .word do_iload_0_iconst_m1 ++ .word do_iload_0_iconst_m1 ++ .word do_iload_0_iconst_m1 ++ .word do_iload_0_iconst_m1 ++ .word do_iload_0_iconst_m1 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_bipush ++ .word do_iload_0_sipush ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_iload ++ .word do_iload_0 ++ .word do_iload_0_iload ++ .word do_iload_0 ++ .word do_iload_0_iload ++ .word do_iload_0_iload_0 ++ .word do_iload_0_iload_0 ++ .word do_iload_0_iload_0 ++ .word do_iload_0_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_aload_0 ++ .word do_iload_0_aload_0 ++ .word do_iload_0_aload_0 ++ .word do_iload_0_aload_0 ++ .word do_iload_0_iaload ++ .word do_iload_0 ++ .word do_iload_0_iaload ++ .word do_iload_0 ++ .word do_iload_0_iaload ++ .word do_iload_0_baload ++ .word do_iload_0_caload ++ .word do_iload_0_saload ++ .word do_iload_0_astore ++ .word do_iload_0 ++ .word do_iload_0_astore ++ .word do_iload_0 ++ .word do_iload_0_astore ++ .word do_iload_0_istore_0 ++ .word do_iload_0_istore_0 ++ .word do_iload_0_istore_0 ++ .word do_iload_0_istore_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_iastore ++ .word do_iload_0 ++ .word do_iload_0_iastore ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_bastore ++ .word do_iload_0_castore ++ .word do_iload_0_castore ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_iadd ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_isub ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_imul ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_idiv ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_irem ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_ineg ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_ishl ++ .word do_iload_0 ++ .word do_iload_0_ishr ++ .word do_iload_0 ++ .word do_iload_0_iushr ++ .word do_iload_0 ++ .word do_iload_0_iand ++ .word do_iload_0 ++ .word do_iload_0_ior ++ .word do_iload_0 ++ .word do_iload_0_ixor ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_i2c ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_ifeq ++ .word do_iload_0_ifne ++ .word do_iload_0_iflt ++ .word do_iload_0_ifge ++ .word do_iload_0_ifgt ++ .word do_iload_0_ifle ++ .word do_iload_0_if_icmpeq ++ .word do_iload_0_if_icmpne ++ .word do_iload_0_if_icmplt ++ .word do_iload_0_if_icmpge ++ .word do_iload_0_if_icmpgt ++ .word do_iload_0_if_icmple ++ .word do_iload_0_if_icmpeq ++ .word do_iload_0_if_icmpne ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_ireturn ++ .word do_iload_0 ++ .word do_iload_0_ireturn ++ .word do_iload_0 ++ .word do_iload_0_ireturn ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_invokeinterface ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_ifeq ++ .word do_iload_0_ifne ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_invokevfinal ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_invokeresolved ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0_invokespecialresolved ++ .word do_iload_0_invokestaticresolved ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++dispatch_aload_0: ++dispatch_aload_1: ++dispatch_aload_2: ++dispatch_aload_3: ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_iconst_m1 ++ .word do_aload_0_iconst_m1 ++ .word do_aload_0_iconst_m1 ++ .word do_aload_0_iconst_m1 ++ .word do_aload_0_iconst_m1 ++ .word do_aload_0_iconst_m1 ++ .word do_aload_0_iconst_m1 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_bipush ++ .word do_aload_0_sipush ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_iload ++ .word do_aload_0 ++ .word do_aload_0_iload ++ .word do_aload_0 ++ .word do_aload_0_iload ++ .word do_aload_0_iload_0 ++ .word do_aload_0_iload_0 ++ .word do_aload_0_iload_0 ++ .word do_aload_0_iload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_aload_0 ++ .word do_aload_0_aload_0 ++ .word do_aload_0_aload_0 ++ .word do_aload_0_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_astore ++ .word do_aload_0 ++ .word do_aload_0_astore ++ .word do_aload_0 ++ .word do_aload_0_astore ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_astore_0 ++ .word do_aload_0_astore_0 ++ .word do_aload_0_astore_0 ++ .word do_aload_0_astore_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_invokeinterface ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_igetfield ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_invokevfinal ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_invokeresolved ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0_invokespecialresolved ++ .word do_aload_0_invokestaticresolved ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++dispatch_iaload: ++dispatch_faload: ++dispatch_aaload: ++ .word do_u4aload ++ .word do_u4aload ++ .word do_iaload_iconst_m1 ++ .word do_iaload_iconst_m1 ++ .word do_iaload_iconst_m1 ++ .word do_iaload_iconst_m1 ++ .word do_iaload_iconst_m1 ++ .word do_iaload_iconst_m1 ++ .word do_iaload_iconst_m1 ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_iaload_bipush ++ .word do_iaload_sipush ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_iaload_iload ++ .word do_u4aload ++ .word do_iaload_iload ++ .word do_u4aload ++ .word do_iaload_iload ++ .word do_iaload_iload_0 ++ .word do_iaload_iload_0 ++ .word do_iaload_iload_0 ++ .word do_iaload_iload_0 ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_iaload_aload_0 ++ .word do_iaload_aload_0 ++ .word do_iaload_aload_0 ++ .word do_iaload_aload_0 ++ .word do_iaload_iaload ++ .word do_u4aload ++ .word do_iaload_iaload ++ .word do_u4aload ++ .word do_iaload_iaload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_iaload_astore ++ .word do_u4aload ++ .word do_iaload_astore ++ .word do_u4aload ++ .word do_iaload_astore ++ .word do_iaload_istore_0 ++ .word do_iaload_istore_0 ++ .word do_iaload_istore_0 ++ .word do_iaload_istore_0 ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_iaload_iastore ++ .word do_u4aload ++ .word do_iaload_iastore ++ .word do_u4aload ++ .word do_u4aload ++ .word do_iaload_bastore ++ .word do_iaload_castore ++ .word do_iaload_castore ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_iaload_iand ++ .word do_u4aload ++ .word do_iaload_ior ++ .word do_u4aload ++ .word do_iaload_ixor ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_iaload_ifeq ++ .word do_iaload_ifne ++ .word do_iaload_iflt ++ .word do_iaload_ifge ++ .word do_iaload_ifgt ++ .word do_iaload_ifle ++ .word do_iaload_if_icmpeq ++ .word do_iaload_if_icmpne ++ .word do_iaload_if_icmplt ++ .word do_iaload_if_icmpge ++ .word do_iaload_if_icmpgt ++ .word do_iaload_if_icmple ++ .word do_iaload_if_icmpeq ++ .word do_iaload_if_icmpne ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_iaload_ifeq ++ .word do_iaload_ifne ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++ .word do_u4aload ++dispatch_iadd: ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_iload ++ .word do_iadd ++ .word do_iadd_iload ++ .word do_iadd ++ .word do_iadd_iload ++ .word do_iadd_iload_0 ++ .word do_iadd_iload_0 ++ .word do_iadd_iload_0 ++ .word do_iadd_iload_0 ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_iaload ++ .word do_iadd ++ .word do_iadd_iaload ++ .word do_iadd ++ .word do_iadd_iaload ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_istore ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_istore_0 ++ .word do_iadd_istore_0 ++ .word do_iadd_istore_0 ++ .word do_iadd_istore_0 ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_iastore ++ .word do_iadd ++ .word do_iadd_iastore ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_isub ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_iinc ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_ifeq ++ .word do_iadd_ifne ++ .word do_iadd_iflt ++ .word do_iadd_ifge ++ .word do_iadd_ifgt ++ .word do_iadd_ifle ++ .word do_iadd_if_icmpeq ++ .word do_iadd_if_icmpne ++ .word do_iadd_if_icmplt ++ .word do_iadd_if_icmpge ++ .word do_iadd_if_icmpgt ++ .word do_iadd_if_icmple ++ .word do_iadd_if_icmpeq ++ .word do_iadd_if_icmpne ++ .word do_iadd_goto ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_ireturn ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd_ifeq ++ .word do_iadd_ifne ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++ .word do_iadd ++dispatch_isub: ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_iload ++ .word do_isub ++ .word do_isub_iload ++ .word do_isub ++ .word do_isub_iload ++ .word do_isub_iload_0 ++ .word do_isub_iload_0 ++ .word do_isub_iload_0 ++ .word do_isub_iload_0 ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_iaload ++ .word do_isub ++ .word do_isub_iaload ++ .word do_isub ++ .word do_isub_iaload ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_istore ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_istore_0 ++ .word do_isub_istore_0 ++ .word do_isub_istore_0 ++ .word do_isub_istore_0 ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_iastore ++ .word do_isub ++ .word do_isub_iastore ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_iadd ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_iinc ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_ifeq ++ .word do_isub_ifne ++ .word do_isub_iflt ++ .word do_isub_ifge ++ .word do_isub_ifgt ++ .word do_isub_ifle ++ .word do_isub_if_icmpeq ++ .word do_isub_if_icmpne ++ .word do_isub_if_icmplt ++ .word do_isub_if_icmpge ++ .word do_isub_if_icmpgt ++ .word do_isub_if_icmple ++ .word do_isub_if_icmpeq ++ .word do_isub_if_icmpne ++ .word do_isub_goto ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_ireturn ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub_ifeq ++ .word do_isub_ifne ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++ .word do_isub ++dispatch_iand: ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_iload ++ .word do_iand ++ .word do_iand_iload ++ .word do_iand ++ .word do_iand_iload ++ .word do_iand_iload_0 ++ .word do_iand_iload_0 ++ .word do_iand_iload_0 ++ .word do_iand_iload_0 ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_iaload ++ .word do_iand ++ .word do_iand_iaload ++ .word do_iand ++ .word do_iand_iaload ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_istore ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_istore_0 ++ .word do_iand_istore_0 ++ .word do_iand_istore_0 ++ .word do_iand_istore_0 ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_iastore ++ .word do_iand ++ .word do_iand_iastore ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_iadd ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_isub ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_iinc ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_ifeq ++ .word do_iand_ifne ++ .word do_iand_iflt ++ .word do_iand_ifge ++ .word do_iand_ifgt ++ .word do_iand_ifle ++ .word do_iand_if_icmpeq ++ .word do_iand_if_icmpne ++ .word do_iand_if_icmplt ++ .word do_iand_if_icmpge ++ .word do_iand_if_icmpgt ++ .word do_iand_if_icmple ++ .word do_iand_if_icmpeq ++ .word do_iand_if_icmpne ++ .word do_iand_goto ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_ireturn ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand_ifeq ++ .word do_iand_ifne ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++ .word do_iand ++dispatch_ior: ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_iload ++ .word do_ior ++ .word do_ior_iload ++ .word do_ior ++ .word do_ior_iload ++ .word do_ior_iload_0 ++ .word do_ior_iload_0 ++ .word do_ior_iload_0 ++ .word do_ior_iload_0 ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_iaload ++ .word do_ior ++ .word do_ior_iaload ++ .word do_ior ++ .word do_ior_iaload ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_istore ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_istore_0 ++ .word do_ior_istore_0 ++ .word do_ior_istore_0 ++ .word do_ior_istore_0 ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_iastore ++ .word do_ior ++ .word do_ior_iastore ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_iadd ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_isub ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_iinc ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_ifeq ++ .word do_ior_ifne ++ .word do_ior_iflt ++ .word do_ior_ifge ++ .word do_ior_ifgt ++ .word do_ior_ifle ++ .word do_ior_if_icmpeq ++ .word do_ior_if_icmpne ++ .word do_ior_if_icmplt ++ .word do_ior_if_icmpge ++ .word do_ior_if_icmpgt ++ .word do_ior_if_icmple ++ .word do_ior_if_icmpeq ++ .word do_ior_if_icmpne ++ .word do_ior_goto ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_ireturn ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior_ifeq ++ .word do_ior_ifne ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++ .word do_ior ++dispatch_ixor: ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_iload ++ .word do_ixor ++ .word do_ixor_iload ++ .word do_ixor ++ .word do_ixor_iload ++ .word do_ixor_iload_0 ++ .word do_ixor_iload_0 ++ .word do_ixor_iload_0 ++ .word do_ixor_iload_0 ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_iaload ++ .word do_ixor ++ .word do_ixor_iaload ++ .word do_ixor ++ .word do_ixor_iaload ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_istore ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_istore_0 ++ .word do_ixor_istore_0 ++ .word do_ixor_istore_0 ++ .word do_ixor_istore_0 ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_iastore ++ .word do_ixor ++ .word do_ixor_iastore ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_iadd ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_isub ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_iinc ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_ifeq ++ .word do_ixor_ifne ++ .word do_ixor_iflt ++ .word do_ixor_ifge ++ .word do_ixor_ifgt ++ .word do_ixor_ifle ++ .word do_ixor_if_icmpeq ++ .word do_ixor_if_icmpne ++ .word do_ixor_if_icmplt ++ .word do_ixor_if_icmpge ++ .word do_ixor_if_icmpgt ++ .word do_ixor_if_icmple ++ .word do_ixor_if_icmpeq ++ .word do_ixor_if_icmpne ++ .word do_ixor_goto ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_ireturn ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor_ifeq ++ .word do_ixor_ifne ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++ .word do_ixor ++dispatch_iinc: ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc_iconst_m1 ++ .word do_iinc_iconst_m1 ++ .word do_iinc_iconst_m1 ++ .word do_iinc_iconst_m1 ++ .word do_iinc_iconst_m1 ++ .word do_iinc_iconst_m1 ++ .word do_iinc_iconst_m1 ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc_iload ++ .word do_iinc ++ .word do_iinc_iload ++ .word do_iinc ++ .word do_iinc_iload ++ .word do_iinc_iload_0 ++ .word do_iinc_iload_0 ++ .word do_iinc_iload_0 ++ .word do_iinc_iload_0 ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++ .word do_iinc ++dispatch_iaccess_0: ++dispatch_iaccess_1: ++dispatch_iaccess_2: ++dispatch_iaccess_3: ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0_iload ++ .word do_iaccess_0 ++ .word do_iaccess_0_iload ++ .word do_iaccess_0 ++ .word do_iaccess_0_iload ++ .word do_iaccess_0_iload_0 ++ .word do_iaccess_0_iload_0 ++ .word do_iaccess_0_iload_0 ++ .word do_iaccess_0_iload_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0_iadd ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0_ifeq ++ .word do_iaccess_0_ifne ++ .word do_iaccess_0_iflt ++ .word do_iaccess_0_ifge ++ .word do_iaccess_0_ifgt ++ .word do_iaccess_0_ifle ++ .word do_iaccess_0_if_icmpeq ++ .word do_iaccess_0_if_icmpne ++ .word do_iaccess_0_if_icmplt ++ .word do_iaccess_0_if_icmpge ++ .word do_iaccess_0_if_icmpgt ++ .word do_iaccess_0_if_icmple ++ .word do_iaccess_0_if_icmpeq ++ .word do_iaccess_0_if_icmpne ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0_ifeq ++ .word do_iaccess_0_ifne ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++dispatch_iload_0_iconst_N: ++dispatch_iload_1_iconst_N: ++dispatch_iload_2_iconst_N: ++dispatch_iload_3_iconst_N: ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N_iadd ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N_isub ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N_iand ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N_ior ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N_ixor ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N_iadd_istore_N ++ .word do_iload_0_iconst_N_isub_istore_N ++ .word do_iload_0_iconst_N_iand_istore_N ++ .word do_iload_0_iconst_N_ior_istore_N ++ .word do_iload_0_iconst_N_ixor_istore_N ++ .word do_iload_0_iconst_N_iadd_u4store ++ .word do_iload_0_iconst_N_isub_u4store ++ .word do_iload_0_iconst_N_iand_u4store ++ .word do_iload_0_iconst_N_ior_u4store ++ .word do_iload_0_iconst_N_ixor_u4store ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++dispatch_iload_iconst_N: ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N_iadd ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N_isub ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N_iand ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N_ior ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N_ixor ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N_iadd_istore_N ++ .word do_iload_iconst_N_isub_istore_N ++ .word do_iload_iconst_N_iand_istore_N ++ .word do_iload_iconst_N_ior_istore_N ++ .word do_iload_iconst_N_ixor_istore_N ++ .word do_iload_iconst_N_iadd_u4store ++ .word do_iload_iconst_N_isub_u4store ++ .word do_iload_iconst_N_iand_u4store ++ .word do_iload_iconst_N_ior_u4store ++ .word do_iload_iconst_N_ixor_u4store ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .word do_iload_iconst_N ++ .endm +diff -ruNE ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S +--- ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S 1970-01-01 00:00:00.000000000 +0000 ++++ ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S 2009-06-30 12:13:47.000000000 +0000 +@@ -0,0 +1,5777 @@ ++#if defined(PRODUCT) && defined(HOTSPOT_ASM) ++//#define HW_NULL_PTR_CHECK ++//#define UNALIGNED_ACCESS ++//#define B14 ++ ++#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) ++ ++// ECN: DOH!!! gcc 4.4 has changed the name mangling scheme!!! ++#if GCC_VERSION >= 40400 ++#define oop_store _Z9oop_storeIP7oopDescEvPT_S1_ ++#else ++#define oop_store _Z9oop_storeIP7oopDescEvPVT_S1_ ++#endif ++ ++#define stack r4 ++#define jpc r5 ++#define dispatch r6 ++#define locals r7 ++#define istate r8 ++#define constpool r9 ++#define arm_sp r13 ++ ++#define CONST_POOL_OFFSET 16 ++ ++#define tmp_xxx r7 ++#define tmp_yyy r5 ++#define tmp_zzz r8 ++#define tmp_vvv r9 ++ ++#define tmp1 r11 ++#define tmp2 r10 ++ ++#define regset r4-r11 ++ ++#define tos_btos 0 ++#define tos_ctos 1 ++#define tos_stos 2 ++#define tos_itos 3 ++#define tos_ltos 4 ++#define tos_ftos 5 ++#define tos_dtos 6 ++#define tos_atos 7 ++ ++#define JVM_CONSTANT_Utf8 1 ++#define JVM_CONSTANT_Unicode 2 ++#define JVM_CONSTANT_Integer 3 ++#define JVM_CONSTANT_Float 4 ++#define JVM_CONSTANT_Long 5 ++#define JVM_CONSTANT_Double 6 ++#define JVM_CONSTANT_Class 7 ++#define JVM_CONSTANT_String 8 ++#define JVM_CONSTANT_Fieldref 9 ++#define JVM_CONSTANT_Methodref 10 ++#define JVM_CONSTANT_InterfaceMethodref 11 ++#define JVM_CONSTANT_NameAndType 12 ++ ++#define JVM_CONSTANT_UnresolvedClass 100 ++#define JVM_CONSTANT_ClassIndex 101 ++#define JVM_CONSTANT_UnresolvedString 102 ++#define JVM_CONSTANT_StringIndex 103 ++#define JVM_CONSTANT_UnresolvedClassInError 104 ++ ++#define T_BOOLEAN 4 ++#define T_CHAR 5 ++#define T_FLOAT 6 ++#define T_DOUBLE 7 ++#define T_BYTE 8 ++#define T_SHORT 9 ++#define T_INT 10 ++#define T_LONG 11 ++#define T_OBJECT 12 ++#define T_ARRAY 13 ++#define T_VOID 14 ++ ++#define _thread_uninitialized 0 ++#define _thread_new 2 ++#define _thread_new_trans 3 ++#define _thread_in_native 4 ++#define _thread_in_native_trans 5 ++#define _thread_in_vm 6 ++#define _thread_in_vm_trans 7 ++#define _thread_in_Java 8 ++#define _thread_in_Java_trans 9 ++#define _thread_blocked 10 ++#define _thread_blocked_trans 11 ++#define _thread_max_state 12 ++ ++ ++#define THREAD_VTABLE 0 ++#define THREAD_PENDING_EXC 4 ++#define THREAD_SUSPEND_FLAGS 24 ++#define THREAD_ACTIVE_HANDLES 32 ++#define THREAD_LAST_HANDLE_MARK 40 ++ ++#ifdef B14 ++#define THREAD_TLAB_TOP 56 ++#define THREAD_TLAB_END 64 ++#define THREAD_HANDLE_AREA 152 ++#define THREAD_STACK_BASE 156 ++#define THREAD_STACK_SIZE 160 ++#define THREAD_LAST_JAVA_SP 260 ++#define THREAD_JNI_ENVIRONMENT 272 ++#define THREAD_VM_RESULT 300 ++#define THREAD_STATE 320 ++#define THREAD_DO_NOT_UNLOCK 345 ++#define THREAD_JAVA_STACK_BASE 476 ++#define THREAD_JAVA_SP 484 ++#define THREAD_TOP_ZERO_FRAME 488 ++ ++#define THREAD_VTABLE_IS_LOCK_OWNED 56 ++#else ++#define THREAD_TLAB_TOP 56-4 ++#define THREAD_TLAB_END 64-4 ++#define THREAD_HANDLE_AREA 152-4 ++#define THREAD_STACK_BASE 156-4 ++#define THREAD_STACK_SIZE 160-4 ++#define THREAD_LAST_JAVA_SP 260-4 ++#define THREAD_JNI_ENVIRONMENT 272-4 ++#define THREAD_VM_RESULT 300-4 ++#define THREAD_STATE 320-4 ++#define THREAD_DO_NOT_UNLOCK 345-4 ++#define THREAD_JAVA_STACK_BASE 476-4 ++#define THREAD_JAVA_SP 484-4 ++#define THREAD_TOP_ZERO_FRAME 488-4 ++ ++#define THREAD_VTABLE_IS_LOCK_OWNED 52 ++#endif ++ ++#define UNIVERSE_VTABLE 0 ++#define UNIVERSE_VTABLE_TOP_ADDR 96 ++#define UNIVERSE_VTABLE_END_ADDR 100 ++ ++#ifdef B14 ++#define VMSYMBOLS_ArithmeticException 77 ++#define VMSYMBOLS_ArrayIndexOutOfBounds 78 ++#define VMSYMBOLS_ArrayStoreException 79 ++#define VMSYMBOLS_ClassCastException 80 ++#define VMSYMBOLS_NullPointerException 95 ++#define VMSYMBOLS_AbstractMethodError 103 ++#define VMSYMBOLS_IncompatibleClassChangeError 110 ++#define VMSYMBOLS_InternalError 111 ++#else ++#define VMSYMBOLS_ArithmeticException 78 ++#define VMSYMBOLS_ArrayIndexOutOfBounds 79 ++#define VMSYMBOLS_ArrayStoreException 80 ++#define VMSYMBOLS_ClassCastException 81 ++#define VMSYMBOLS_NullPointerException 96 ++#define VMSYMBOLS_AbstractMethodError 104 ++#define VMSYMBOLS_IncompatibleClassChangeError 111 ++#define VMSYMBOLS_InternalError 112 ++#endif ++ ++#define ISTATE_THREAD 0 ++#define ISTATE_BCP 4 ++#define ISTATE_LOCALS 8 ++#define ISTATE_CONSTANTS 12 ++#define ISTATE_METHOD 16 ++#define ISTATE_MDX 20 ++#define ISTATE_STACK 24 ++#define ISTATE_SAVED_ISTATE 28 ++#define ISTATE_MSG 28 ++#define ISTATE_CALLEE 32 // union frame_manager_message ++ ++#define ISTATE_PREV_LINK 44 ++#define ISTATE_OOP_TEMP 48 ++#define ISTATE_STACK_BASE 52 ++#define ISTATE_STACK_LIMIT 56 ++#define ISTATE_MONITOR_BASE 60 ++#define ISTATE_SELF_LINK 64 ++#define ISTATE_CAFEBABF 68 ++ ++#define last_implemented_bytecode 248 ++ ++ .macro ALIGN_CODE ++ .align 6 ++ .endm ++ ++ .macro ALIGN_DATA ++ .align 6 ++ .endm ++ ++ .macro ALIGN_OPCODE ++ .align 6 ++ .endm ++ ++ .macro ALIGN_WORD ++ .align 2 ++ .endm ++ ++ .macro Opcode label ++ ALIGN_OPCODE ++do_\label: ++ .endm ++ ++ .macro GET_STACK offset, reg ++ ldr \reg, [stack, #(\offset+1) * 4] ++ .endm ++ ++ .macro PUT_STACK offset, reg ++ str \reg, [stack, #(\offset+1) * 4] ++ .endm ++ ++ .macro PUSH4 reg1, reg2, reg3, reg4 ++ stmda stack!, {\reg1, \reg2, \reg3, \reg4} ++ .endm ++ ++ .macro POP4 reg1, reg2, reg3, reg4 ++ ldmib stack!, {\reg1, \reg2, \reg3, \reg4} ++ .endm ++ ++ .macro PUSH3 reg1, reg2, reg3 ++ stmda stack!, {\reg1, \reg2, \reg3} ++ .endm ++ ++ .macro POP3 reg1, reg2, reg3 ++ ldmib stack!, {\reg1, \reg2, \reg3} ++ .endm ++ ++ .macro PUSH2 reg1, reg2 ++ stmda stack!, {\reg1, \reg2} ++ .endm ++ ++ .macro PUSH reg ++ str \reg, [stack], #-4 ++ .endm ++ ++ .macro POP2 reg1, reg2 ++ ldmib stack!, {\reg1, \reg2} ++ .endm ++ ++ .macro POP reg ++ ldr \reg, [stack, #4]! ++ .endm ++ ++ .set dispatch_state, 0 ++ ++ .macro DISPATCH_START step=0 ++ .set dispatch_state, 1 ++ ldrb r0, [jpc, #\step]! ++ .endm ++ ++ .macro DISPATCH_START_REG reg ++ .set dispatch_state, 1 ++ ldrb r0, [jpc, \reg]! ++ .endm ++ ++ .macro DISPATCH_STATE state ++ .set dispatch_state, \state ++ .endm ++ ++ .macro DISPATCH_1 ++ ldrb r1, [jpc, #2] ++ .endm ++ ++ .macro DISPATCH_2 ++ ldr ip, [dispatch, r0, lsl #2] ++ .endm ++ ++ .macro DISPATCH_3 ++ ldrb r2, [jpc, #1] ++ .endm ++ ++ .macro DISPATCH_4 ++ ands lr, ip, #7 ++ .endm ++ ++ .macro DISPATCH_NEXT ++ .if dispatch_state == 0 ++ .error "DISPATCH_FINISH without a DISPATCH_START or DISPATCH_STATE" ++ .elseif dispatch_state == 1 ++ DISPATCH_1 ++ .elseif dispatch_state == 2 ++ DISPATCH_2 ++ .elseif dispatch_state == 3 ++ DISPATCH_3 ++ .elseif dispatch_state == 4 ++ DISPATCH_4 ++ .else ++ .error "Too many DISPATCH_NEXTs" ++ .endif ++ .set dispatch_state, dispatch_state + 1 ++ .endm ++ ++ .macro DISPATCH_FINISH ++ .if dispatch_state == 0 ++ .error "DISPATCH_FINISH without a DISPATCH_START or DISPATCH_STATE" ++ .elseif dispatch_state == 1 ++ DISPATCH_1 ++ DISPATCH_2 ++ DISPATCH_3 ++ DISPATCH_4 ++ .elseif dispatch_state == 2 ++ DISPATCH_2 ++ DISPATCH_3 ++ DISPATCH_4 ++ .elseif dispatch_state == 3 ++ DISPATCH_3 ++ DISPATCH_4 ++ .elseif dispatch_state == 4 ++ DISPATCH_4 ++ .endif ++ moveq pc, ip ++ ldrb r1, [jpc, lr] ++ bic ip, ip, #7 ++ ldr ip, [ip, r1, lsl #2] ++ mov pc, ip ++ .set dispatch_state, 0 ++ .endm ++ ++ .macro DISPATCH_BYTECODE ++ ldrb r1, [jpc, #2] ++ ldr ip, [dispatch, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ands lr, ip, #7 ++ moveq pc, ip ++ ldrb r1, [jpc, lr] ++ bic ip, ip, #7 ++ ldr ip, [ip, r1, lsl #2] ++ mov pc, ip ++ .endm ++ ++ .macro DISPATCH step=0 ++ ldrb r0, [jpc, #\step]! ++ ldrb r1, [jpc, #2] ++ ldr ip, [dispatch, r0, lsl #2] ++ ldrb r2, [jpc, #1] ++ ands lr, ip, #7 ++ moveq pc, ip ++ ldrb r1, [jpc, lr] ++ bic ip, ip, #7 ++ ldr ip, [ip, r1, lsl #2] ++ mov pc, ip ++ .endm ++ ++#define FFI_TYPE_VOID 0 ++#define FFI_TYPE_FLOAT 2 ++#define FFI_TYPE_DOUBLE 3 ++#define FFI_TYPE_BOOL 5 ++#define FFI_TYPE_SINT8 6 ++#define FFI_TYPE_UINT16 7 ++#define FFI_TYPE_SINT16 8 ++#define FFI_TYPE_SINT32 10 ++#define FFI_TYPE_SINT64 12 ++#define FFI_TYPE_POINTER 14 ++ ++ .arch armv7-a ++ .fpu softvfp ++ .eabi_attribute 20, 1 ++ .eabi_attribute 21, 1 ++ .eabi_attribute 23, 3 ++ .eabi_attribute 24, 1 ++ .eabi_attribute 25, 1 ++ .eabi_attribute 26, 2 ++ .eabi_attribute 30, 2 ++ .eabi_attribute 18, 4 ++ ++ .text ++ ++ ALIGN_CODE ++build_normal: ++ ldr ip, [r1, #24] ++ tst ip, #32 ++ bne build_normal_synchronized ++build_normal_unsynchronized: ++ stmfd sp!, {r4, r5, r6, r7, r8} ++ ldr r4, [r0, #8] ++ ldrh r8, [r1, #38] ++ ldrh ip, [r1, #40] ++ mov r5, #0 ++ sub r3, r4, #4 ++ str r3, [r0, #8] ++ str r5, [r4, #-4] ++ ldr r7, [r0, #8] ++ mov r6, r0 ++ sub r3, r7, #4 ++ str r3, [r0, #8] ++ mvn r0, #0x540 @ form 0xCAFEBABF in r0 ++ bic r0, r0, #0x14000 ++ bic r0, r0, #0x35000000 ++ mov ip, ip, asl #2 ++ sub ip, ip, #4 ++ str r0, [r7, #-4] ++ ldr r3, [r6, #8] ++ add r4, r4, ip ++ sub r0, r3, #68 ++ str r0, [r6, #8] ++ str r4, [r0, #8] ++ str r5, [r0, #44] ++ str r1, [r0, #16] ++ str r0, [r0, #64] ++ str r2, [r3, #-68] ++ ldr r3, [r1, #8] ++ cmp r8, r5 ++ add r3, r3, #48 ++ str r3, [r0, #4] ++ ldr r2, [r1, #12] ++ mov r3, #0 ++ ldr r1, [r2, #12] ++ str r5, [r0, #32] ++ str r5, [r0, #48] ++ str r1, [r0, #12] ++ str r5, [r0, #20] ++ str r3, [r0, #28] ++ ldr r3, [r6, #8] ++ str r3, [r0, #60] ++ ldr r2, [r6, #8] ++ str r2, [r0, #52] ++ ldr r3, [r6, #8] ++ sub r3, r3, #4 ++ str r3, [r0, #24] ++ ldrne r3, [r6, #8] ++ ldreq r3, [r6, #8] ++ subne r3, r3, r8, asl #2 ++ strne r3, [r6, #8] ++ sub r3, r3, #4 ++ str r3, [r0, #56] ++ mov r0, r7 ++ ldmfd sp!, {r4, r5, r6, r7, r8} ++ bx lr ++ ++ ALIGN_CODE ++build_normal_synchronized: ++ stmfd sp!, {r4, r5, r6, r7, r8, sl} ++ ldr r6, [r0, #8] ++ mov r4, r0 ++ ldrh sl, [r1, #38] ++ ldrh r0, [r1, #40] ++ mov r5, r1 ++ mov ip, #0 ++ sub r3, r6, #4 ++ mvn r1, #0x540 @ form 0xCAFEBABF in r1 ++ bic r1, r1, #0x14000 ++ bic r1, r1, #0x35000000 ++ str r3, [r4, #8] ++ str ip, [r6, #-4] ++ ldr r7, [r4, #8] ++ mov r0, r0, asl #2 ++ sub r3, r7, #4 ++ str r3, [r4, #8] ++ str r1, [r7, #-4] ++ ldr r3, [r4, #8] ++ sub r8, r0, #4 ++ sub r0, r3, #68 ++ str r0, [r4, #8] ++ str r5, [r0, #16] ++ str ip, [r0, #44] ++ str r0, [r0, #64] ++ str r2, [r3, #-68] ++ add r2, r6, r8 ++ str r2, [r0, #8] ++ ldr r3, [r5, #8] ++ add r3, r3, #48 ++ str r3, [r0, #4] ++ ldr r2, [r5, #12] ++ mov r3, #0 ++ ldr r1, [r2, #12] ++ str ip, [r0, #32] ++ str ip, [r0, #48] ++ str r1, [r0, #12] ++ str ip, [r0, #20] ++ str r3, [r0, #28] ++ ldr r3, [r4, #8] ++ str r3, [r0, #60] ++ ldr r2, [r4, #8] ++ sub ip, r2, #8 ++ str ip, [r4, #8] ++ ldr r3, [r5, #24] ++ tst r3, #8 ++ ldrne r3, [r5, #12] ++ ldreq r1, [r6, r8] ++ ldrne r2, [r3, #16] ++ ldrne r1, [r2, #60] ++ cmp sl, #0 ++ str r1, [ip, #4] ++ ldr r2, [r4, #8] ++ str r2, [r0, #52] ++ ldr r3, [r4, #8] ++ sub r3, r3, #4 ++ str r3, [r0, #24] ++ ldrne r3, [r4, #8] ++ ldreq r3, [r4, #8] ++ subne r3, r3, sl, asl #2 ++ strne r3, [r4, #8] ++ sub r3, r3, #4 ++ str r3, [r0, #56] ++ mov r0, r7 ++ ldmfd sp!, {r4, r5, r6, r7, r8, sl} ++ bx lr ++ ++ ALIGN_CODE ++build_native: ++ ldr ip, [r1, #24] ++ tst ip, #32 ++ bne build_native_synchronized ++build_native_unsynchronized: ++ stmfd sp!, {r4, r5, r6, r7} ++ ldr r6, [r0, #8] ++ ldrh r4, [r1, #42] ++ mov r5, r0 ++ mov r7, #0 ++ sub r3, r6, #4 ++ mvn ip, #0x540 @ form 0xCAFEBABF in ip ++ bic ip, ip, #0x14000 ++ bic ip, ip, #0x35000000 ++ str r3, [r0, #8] ++ str r7, [r6, #-4] ++ ldr r0, [r0, #8] ++ mov r4, r4, asl #2 ++ sub r3, r0, #4 ++ str r3, [r5, #8] ++ str ip, [r0, #-4] ++ ldr r3, [r5, #8] ++ sub r4, r4, #4 ++ sub ip, r3, #68 ++ add r6, r6, r4 ++ str ip, [r5, #8] ++ str r2, [r3, #-68] ++ str r6, [ip, #8] ++ str r1, [ip, #16] ++ str ip, [ip, #64] ++ str r7, [ip, #44] ++ str r7, [ip, #4] ++ ldr r2, [r1, #12] ++ mov r3, #2 ++ ldr r1, [r2, #12] ++ str r3, [ip, #28] ++ str r7, [ip, #32] ++ str r1, [ip, #12] ++ str r7, [ip, #48] ++ str r7, [ip, #20] ++ ldr r3, [r5, #8] ++ str r3, [ip, #60] ++ ldr r2, [r5, #8] ++ str r2, [ip, #52] ++ ldr r3, [r5, #8] ++ sub r3, r3, #4 ++ str r3, [ip, #24] ++ ldr r2, [r5, #8] ++ sub r2, r2, #4 ++ str r2, [ip, #56] ++ ldmfd sp!, {r4, r5, r6, r7} ++ bx lr ++ ++ ALIGN_CODE ++build_native_synchronized: ++ stmfd sp!, {r4, r5, r6, r7, r8} ++ ldr r7, [r0, #8] ++ mov r5, r0 ++ mov ip, #0 ++ ldrh r0, [r1, #42] ++ mov r6, r1 ++ sub r3, r7, #4 ++ mvn r1, #0x540 @ form 0xCAFEBABF in r1 ++ bic r1, r1, #0x14000 ++ bic r1, r1, #0x35000000 ++ str r3, [r5, #8] ++ str ip, [r7, #-4] ++ ldr r8, [r5, #8] ++ mov r0, r0, asl #2 ++ sub r3, r8, #4 ++ str r3, [r5, #8] ++ str r1, [r8, #-4] ++ ldr r3, [r5, #8] ++ sub r0, r0, #4 ++ sub r4, r3, #68 ++ str r4, [r5, #8] ++ str r6, [r4, #16] ++ str r4, [r4, #64] ++ str ip, [r4, #44] ++ str ip, [r4, #4] ++ str r2, [r3, #-68] ++ add r3, r7, r0 ++ str r3, [r4, #8] ++ ldr r2, [r6, #12] ++ mov r3, #2 ++ ldr r1, [r2, #12] ++ str r3, [r4, #28] ++ str ip, [r4, #32] ++ str r1, [r4, #12] ++ str ip, [r4, #48] ++ str ip, [r4, #20] ++ ldr r3, [r5, #8] ++ str r3, [r4, #60] ++ ldr r2, [r5, #8] ++ sub r1, r2, #8 ++ str r1, [r5, #8] ++ ldr r3, [r6, #24] ++ tst r3, #8 ++ ldrne r3, [r6, #12] ++ ldreq r0, [r7, r0] ++ ldrne r2, [r3, #16] ++ ldrne r0, [r2, #60] ++ str r0, [r1, #4] ++ ldr r3, [r5, #8] ++ mov r0, r8 ++ str r3, [r4, #52] ++ ldr r2, [r5, #8] ++ sub r2, r2, #4 ++ str r2, [r4, #24] ++ ldr r3, [r5, #8] ++ sub r3, r3, #4 ++ str r3, [r4, #56] ++ ldmfd sp!, {r4, r5, r6, r7, r8} ++ bx lr ++ ++ ALIGN_CODE ++ .global asm_generate_method_entry ++asm_generate_method_entry: ++ cmp r0, #6 ++ movcs r0, #0 ++ adrcc ip, asm_method_table ++ ldrcc r0, [ip, r0, lsl #2] ++ bx lr ++asm_method_table: ++ .word normal_entry ++ .word normal_entry_synchronized ++ .word native_entry ++ .word native_entry_synchronized ++ .word empty_entry ++ .word accessor_entry ++ ++ ALIGN_CODE ++ .global native_entry_synchronized ++native_entry_synchronized: ++ stmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, lr} ++ mov r1, r0 ++ sub sp, sp, #60 ++ add r0, r2, #THREAD_JAVA_STACK_BASE ++ mov r7, r2 ++ bl build_native ++ ldr r3, [r7, #THREAD_TOP_ZERO_FRAME] ++ add r1, sp, #52 ++ str r1, [sp, #0] ++ ldr sl, .L306native_entry_synchronized ++.LPIC19native_entry_synchronized: ++ add sl, pc, sl ++ str r3, [r0, #0] ++ ldr r2, [r7, #THREAD_STACK_SIZE] ++ ldr r3, [r7, #THREAD_STACK_BASE] ++ sub r9, r0, #72 ++ rsb r3, r2, r3 ++ str r0, [r7, #THREAD_TOP_ZERO_FRAME] ++ rsb r3, r3, r1 ++ ldr r2, [r9, #8] ++ cmp r3, #3072 ++ str r2, [sp, #4] ++ blt .L294native_entry_synchronized ++ ldr ip, [r9, #16] ++ ldr r3, [ip, #24] ++ ands r0, r3, #32 ++ moveq r8, r0 ++ bne .L295native_entry_synchronized ++.L243native_entry_synchronized: ++ ldr r4, [ip, #84] ++ cmp r4, #0 ++ beq .L296native_entry_synchronized ++.L248native_entry_synchronized: ++ ldr r3, .L306native_entry_synchronized+4 ++ ldr r2, [sl, r3] ++ cmp r4, r2 ++ beq .L297native_entry_synchronized ++.L249native_entry_synchronized: ++ ldr r2, [r4, #4] ++ ldr ip, [ip, #80] ++ ldr r1, [r7, #THREAD_JAVA_SP] ++ mov r2, r2, asl #2 ++ rsb r2, r2, #0 ++ str ip, [sp, #8] ++ add r5, r1, r2 ++ str r5, [r7, #THREAD_JAVA_SP] ++ add r3, r7, #THREAD_JNI_ENVIRONMENT ++ str r3, [sp, #52] ++ ldr r3, [sp, #0] ++ add lr, r5, #4 ++ str r3, [r1, r2] ++ mov r3, #0 ++ str r3, [sp, #48] ++ ldr r2, [r9, #16] ++ ldr r3, [r2, #24] ++ tst r3, #8 ++ bne .L298native_entry_synchronized ++.L250native_entry_synchronized: ++ rsb r3, r5, lr ++ ldr r2, [r4, #4] ++ mov ip, r3, asr #2 ++ cmp ip, r2 ++ bge .L299native_entry_synchronized ++ ldr fp, .L306native_entry_synchronized+8 ++ add r3, ip, #6 ++ add r1, r4, #24 ++ mov r3, r3, asl #2 ++ str r1, [sp, #12] ++ ldr r6, [sl, fp] ++ add r1, r4, r3 ++ ldr r0, [sp, #4] ++ b .L258native_entry_synchronized ++.L257native_entry_synchronized: ++ cmp r3, #8 ++ subeq r3, r0, #4 ++ streq r3, [lr], #4 ++ ldreq r2, [r4, #4] ++ add ip, ip, #1 ++ subeq r0, r3, #4 ++ cmp ip, r2 ++ add r1, r1, #4 ++ bge .L252native_entry_synchronized ++.L258native_entry_synchronized: ++ ldr r3, [r1, #0] ++ cmp r3, r6 ++ beq .L300native_entry_synchronized ++ ldr r3, [r3, #0] ++ cmp r3, #4 ++ bne .L257native_entry_synchronized ++.L293native_entry_synchronized: ++ str r0, [lr], #4 ++.L291native_entry_synchronized: ++ ldr r2, [r4, #4] ++ add ip, ip, #1 ++ cmp ip, r2 ++ sub r0, r0, #4 ++ add r1, r1, #4 ++ blt .L258native_entry_synchronized ++.L252native_entry_synchronized: ++ ldr r0, [r7, #THREAD_TOP_ZERO_FRAME] ++ ldr r1, [sp, #8] ++ mov r3, r5 ++ str r0, [r7, #THREAD_LAST_JAVA_SP] ++ mov r2, #_thread_in_native ++ mov r0, r4 ++ str r2, [r7, #THREAD_STATE] ++ add r2, sp, #40 ++ bl ffi_call ++ ldr r2, .L306native_entry_synchronized+12 ++ mov r3, #_thread_in_native_trans ++ str r3, [r7, #THREAD_STATE] ++ ldr r3, [sl, r2] ++ ldr r1, [r3, #0] ++ cmp r1, #1 ++ ble .L259native_entry_synchronized ++ ldr r3, .L306native_entry_synchronized+16 ++ ldr r2, [sl, r3] ++ ldrb r1, [r2, #0] @ zero_extendqisi2 ++ cmp r1, #0 ++ bne .L301native_entry_synchronized ++ ldr r3, .L306native_entry_synchronized+20 ++ ldr r2, .L306native_entry_synchronized+24 ++ ldr r0, [sl, r3] ++ ldr r1, [sl, r2] ++ mov r2, #1 ++ ldr r3, [r0, #0] ++ ldr ip, [r1, #0] ++ and r3, r3, r7, lsr #3 ++ str r2, [ip, r3] ++.L259native_entry_synchronized: ++ ldr r3, .L306native_entry_synchronized+28 ++ ldr r2, [sl, r3] ++ ldr r1, [r2, #0] ++ cmp r1, #0 ++ beq .L302native_entry_synchronized ++.L261native_entry_synchronized: ++ mov r0, r7 ++ bl _ZN10JavaThread40check_special_condition_for_native_transEPS_ ++ .p2align 3 ++.L262native_entry_synchronized: ++ mov r3, #_thread_in_Java ++ mov r2, #0 ++ str r3, [r7, #THREAD_STATE] ++ str r2, [r7, #THREAD_LAST_JAVA_SP] ++ ldr r0, [sp, #12] ++ ldr r1, [r4, #4] ++ ldr r2, [sl, fp] ++ ldr r3, [r0, r1, asl #2] ++ cmp r3, r2 ++ beq .L303native_entry_synchronized ++.L263native_entry_synchronized: ++ ldr r2, [r7, #THREAD_ACTIVE_HANDLES] ++ cmp r8, #0 ++ mov r3, #0 ++ str r3, [r2, #128] ++ beq .L292native_entry_synchronized ++ ldr r1, [r7, #THREAD_PENDING_EXC] ++ cmp r1, #0 ++ beq .L304native_entry_synchronized ++.L241native_entry_synchronized: ++ ldr r2, [r7, #THREAD_TOP_ZERO_FRAME] ++ cmp r1, #0 ++ add r1, r2, #4 ++ str r1, [r7, #THREAD_JAVA_SP] ++ ldr r3, [r2, #0] ++ str r3, [r7, #THREAD_TOP_ZERO_FRAME] ++ ldr r2, [r9, #16] ++ ldrh r3, [r2, #42] ++ mov r3, r3, asl #2 ++ add r4, r1, r3 ++ str r4, [r7, #THREAD_JAVA_SP] ++ beq .L305native_entry_synchronized ++.L279native_entry_synchronized: ++ add sp, sp, #60 ++ ldmfd sp!, {r4, r5, r6, r7, r8, r9, sl, fp, pc} ++.L300native_entry_synchronized: ++ ldr r3, [r0, #0] ++ cmp r3, #0 ++ beq .L293native_entry_synchronized ++ ldr r3, [r7, #THREAD_JAVA_SP] ++ sub r2, r3, #4 ++ str r2, [r7, #THREAD_JAVA_SP] ++ str r0, [r3, #-4] ++ ldr r2, [r7, #THREAD_JAVA_SP] ++ str r2, [lr], #4 ++ b .L291native_entry_synchronized ++.L302native_entry_synchronized: ++ ldr r3, [r7, #THREAD_SUSPEND_FLAGS] ++ cmp r3, #0 ++ beq .L262native_entry_synchronized ++ mov r0, r7 ++ bl _ZN10JavaThread40check_special_condition_for_native_transEPS_ ++ b .L262native_entry_synchronized ++.L298native_entry_synchronized: ++ ldr r1, [r2, #12] ++ add r3, sp, #56 ++ mov r2, r9 ++ ldr r0, [r1, #16] ++ add lr, lr, #4 ++ ldr r1, [r0, #60] ++ str r1, [r2, #48]! ++ str r2, [r3, #-8]! ++ str r3, [r5, #4] ++ b .L250native_entry_synchronized ++.L295native_entry_synchronized: ++ ldr r8, [r9, #52] ++ ldr fp, .L306native_entry_synchronized+32 ++ ldr r5, [r8, #4] ++ ldr r3, [r5, #0] ++ orr r4, r3, #1 ++ str r4, [r8, #0] ++ .p2align 3 ++.L245native_entry_synchronized: ++ ldr r6, [r5, #0] ++ mov r0, r4 ++ cmp r4, r6 ++ mov r1, r8 ++ mov r2, r5 ++ bne .L244native_entry_synchronized ++ blx fp ++ cmp r0, #0 ++ bne .L245native_entry_synchronized ++.L244native_entry_synchronized: ++ cmp r4, r6 ++ beq .L290native_entry_synchronized ++ bic r1, r4, #3 ++ ldr r3, [r7, #0] ++ mov r0, r7 ++ ldr ip, [r3, #THREAD_VTABLE_IS_LOCK_OWNED] ++ blx ip ++ subs r4, r0, #0 ++ beq .L247native_entry_synchronized ++ mov r3, #0 ++ str r3, [r8, #0] ++ ldr ip, [r9, #16] ++ b .L243native_entry_synchronized ++.L304native_entry_synchronized: ++ ldr r6, [r8, #0] ++ ldr r5, [r8, #4] ++ cmp r6, #0 ++ str r1, [r8, #4] ++ ldrne fp, .L306native_entry_synchronized+32 ++ beq .L292native_entry_synchronized ++ .p2align 3 ++.L283native_entry_synchronized: ++ ldr r4, [r5, #0] ++ mov r0, r8 ++ cmp r8, r4 ++ mov r1, r6 ++ mov r2, r5 ++ bne .L265native_entry_synchronized ++ blx fp ++ cmp r0, #0 ++ bne .L283native_entry_synchronized ++.L265native_entry_synchronized: ++ cmp r8, r4 ++ beq .L292native_entry_synchronized ++ add r4, sp, #16 ++ mov r0, r4 ++ mov r1, r7 ++ str r5, [r8, #4] ++ bl _ZN10HandleMark10initializeEP6Thread ++ ldr r3, [r7, #THREAD_TOP_ZERO_FRAME] ++ mov r0, r7 ++ mov r1, r8 ++ str r3, [r7, #THREAD_LAST_JAVA_SP] ++ bl _ZN18InterpreterRuntime11monitorexitEP10JavaThreadP15BasicObjectLock ++ mov r3, #0 ++ mov r0, r4 ++ str r3, [r7, #THREAD_LAST_JAVA_SP] ++ bl _ZN10HandleMarkD1Ev ++.L292native_entry_synchronized: ++ ldr r1, [r7, #4] ++ b .L241native_entry_synchronized ++.L294native_entry_synchronized: ++ str r0, [r7, #THREAD_LAST_JAVA_SP] ++ mov r0, r7 ++ bl _ZN18InterpreterRuntime24throw_StackOverflowErrorEP10JavaThread ++ mov r3, #0 ++ ldr r1, [r7, #THREAD_PENDING_EXC] ++ str r3, [r7, #THREAD_LAST_JAVA_SP] ++ b .L241native_entry_synchronized ++.L247native_entry_synchronized: ++ ldr r3, [r7, #THREAD_TOP_ZERO_FRAME] ++ mov r1, r8 ++ mov r0, r7 ++ str r3, [r7, #THREAD_LAST_JAVA_SP] ++ bl _ZN18InterpreterRuntime12monitorenterEP10JavaThreadP15BasicObjectLock ++ ldr r1, [r7, #THREAD_PENDING_EXC] ++ str r4, [r7, #THREAD_LAST_JAVA_SP] ++ cmp r1, #0 ++ bne .L241native_entry_synchronized ++ .p2align 3 ++.L290native_entry_synchronized: ++ ldr ip, [r9, #16] ++ b .L243native_entry_synchronized ++.L301native_entry_synchronized: ++ ldr r3, .L306native_entry_synchronized+28 ++ ldr r2, [sl, r3] ++ ldr r1, [r2, #0] ++ cmp r1, #0 ++ bne .L261native_entry_synchronized ++ b .L302native_entry_synchronized ++.L303native_entry_synchronized: ++ ldr r3, [sp, #40] ++ cmp r3, #0 ++ streq r3, [r9, #48] ++ ldrne r3, [r3, #0] ++ strne r3, [r9, #48] ++ b .L263native_entry_synchronized ++.L305native_entry_synchronized: ++ ldr r0, [r9, #16] ++ bl _ZNK13methodOopDesc11result_typeEv ++ ldr r2, .L306native_entry_synchronized+36 ++ ldr r1, [sl, r2] ++ ldr r3, [r1, r0, asl #2] ++ sub r3, r4, r3, asl #2 ++ str r3, [r7, #THREAD_JAVA_SP] ++ ldr r0, [r9, #16] ++ bl _ZNK13methodOopDesc11result_typeEv ++ sub r0, r0, #4 ++ cmp r0, #9 ++ addls pc, pc, r0, asl #2 ++ b .L279native_entry_synchronized ++.L278native_entry_synchronized: ++ b .L269native_entry_synchronized ++ b .L270native_entry_synchronized ++ b .L271native_entry_synchronized ++ b .L272native_entry_synchronized ++ b .L273native_entry_synchronized ++ b .L274native_entry_synchronized ++ b .L275native_entry_synchronized ++ b .L276native_entry_synchronized ++ b .L277native_entry_synchronized ++ b .L277native_entry_synchronized ++.L299native_entry_synchronized: ++ add r0, r4, #24 ++ ldr fp, .L306native_entry_synchronized+8 ++ str r0, [sp, #12] ++ b .L252native_entry_synchronized ++.L277native_entry_synchronized: ++ ldr r3, [r9, #48] ++ ldr r0, [sp, #4] ++ str r3, [r0, #0] ++ b .L279native_entry_synchronized ++.L276native_entry_synchronized: ++ add r3, sp, #40 ++ ldmia r3, {r3-r4} ++ ldr r0, [sp, #4] ++ stmda r0, {r3-r4} ++ b .L279native_entry_synchronized ++.L275native_entry_synchronized: ++ ldr r3, [sp, #40] ++ ldr r2, [sp, #4] ++ str r3, [r2, #0] ++ b .L279native_entry_synchronized ++.L274native_entry_synchronized: ++ ldrsh r3, [sp, #40] ++ ldr r1, [sp, #4] ++ str r3, [r1, #0] ++ b .L279native_entry_synchronized ++.L273native_entry_synchronized: ++ ldrsb r3, [sp, #40] ++ ldr r0, [sp, #4] ++ str r3, [r0, #0] ++ b .L279native_entry_synchronized ++.L272native_entry_synchronized: ++ add r3, sp, #40 ++ ldmia r3, {r3-r4} ++ ldr r2, [sp, #4] ++ stmda r2, {r3-r4} ++ b .L279native_entry_synchronized ++.L271native_entry_synchronized: ++ ldr r3, [sp, #40] @ float ++ ldr r1, [sp, #4] ++ str r3, [r1, #0] @ float ++ b .L279native_entry_synchronized ++.L270native_entry_synchronized: ++ ldrh r3, [sp, #40] ++ ldr r2, [sp, #4] ++ str r3, [r2, #0] ++ b .L279native_entry_synchronized ++.L269native_entry_synchronized: ++ ldr r1, [sp, #4] ++ ldrb r3, [sp, #40] @ zero_extendqisi2 ++ subs r3, r3, #0 ++ movne r3, #1 ++ str r3, [r1, #0] ++ b .L279native_entry_synchronized ++.L296native_entry_synchronized: ++ ldr r3, [r7, #THREAD_TOP_ZERO_FRAME] ++ mov r0, r7 ++ str r3, [r7, #THREAD_LAST_JAVA_SP] ++ ldr r1, [r9, #16] ++ bl _ZN18InterpreterRuntime19prepare_native_callEP10JavaThreadP13methodOopDesc ++ ldr r1, [r7, #THREAD_PENDING_EXC] ++ str r4, [r7, #THREAD_LAST_JAVA_SP] ++ cmp r1, #0 ++ bne .L241native_entry_synchronized ++ ldr ip, [r9, #16] ++ ldr r4, [ip, #84] ++ b .L248native_entry_synchronized ++.L297native_entry_synchronized: ++ ldr r3, [r7, #THREAD_TOP_ZERO_FRAME] ++ mov r2, #0 ++ mov r0, r7 ++ str r3, [r7, #THREAD_LAST_JAVA_SP] ++ mov r3, r2 ++ ldr r1, [r9, #16] ++ bl _ZN18InterpreterRuntime22slow_signature_handlerEP10JavaThreadP13methodOopDescPiS4_ ++ ldr r1, [r7, #THREAD_PENDING_EXC] ++ mov r3, #0 ++ cmp r1, #0 ++ str r3, [r7, #THREAD_LAST_JAVA_SP] ++ mov r4, r0 ++ bne .L241native_entry_synchronized ++ ldr ip, [r9, #16] ++ b .L249native_entry_synchronized ++.L307native_entry_synchronized: ++ ALIGN_DATA ++.L306native_entry_synchronized: ++ .word _GLOBAL_OFFSET_TABLE_-(.LPIC19native_entry_synchronized+8) ++ .word _ZN18InterpreterRuntime22slow_signature_handlerEP10JavaThreadP13methodOopDescPiS4_(GOT) ++ .word ffi_type_pointer(GOT) ++ .word _ZN2os16_processor_countE(GOT) ++ .word UseMembar(GOT) ++ .word _ZN2os20_serialize_page_maskE(GOT) ++ .word _ZN2os19_mem_serialize_pageE(GOT) ++ .word _ZN20SafepointSynchronize6_stateE(GOT) ++ .word -61504 ++ .word type2size(GOT) ++ ++ ALIGN_CODE ++ .global empty_entry ++empty_entry: ++ ldr r3, .L1359 ++ ldr r1, .L1359+4 ++.LPIC19: ++ add r3, pc, r3 ++ ++ ldr ip, [r3, r1] ++ ldr r3, [ip, #0] ++ cmp r3, #0 ++ bne normal_entry_synchronized ++ ++ ldrh r3, [r0, #42] ++ ldr r1, [r2, #THREAD_JAVA_SP] ++ add r1, r1, r3, lsl #2 ++ str r1, [r2, #THREAD_JAVA_SP] ++ bx lr ++.L1359: ++ .word _GLOBAL_OFFSET_TABLE_-(.LPIC19+8) ++ .word _ZN20SafepointSynchronize6_stateE(GOT) ++ ++@ ---- START execute.s --------------------------------------------------------------------- ++ ++#ifdef HW_NULL_PTR_CHECK ++ ++#define uc_mcontext 20 ++#define arm_registers_offset 12 ++#define arm_cpsr_offset 16*4 ++ ++ .global asm_check_null_ptr ++asm_check_null_ptr: ++ add r0, r0, #uc_mcontext + arm_registers_offset ++ ldr r1, [r0, #15*4] ++ adr ip, abort_table ++abort_loop: ++ ldr r2, [ip], #4 ++ cmp r2, #0 ++ moveq r0, #0 ++ bxeq lr ++ cmp r2, r1 ++ bne abort_loop ++ ++ adr r3, abort_table+4 ++ sub r3, ip, r3 ++ ++ adr ip, jpc_correction_table ++ ldrb r3, [ip, r3, lsr #2] ++ ++ ldr ip, [r0, #5*4] ++ sub ip, ip, r3 ++ str ip, [r0, #5*4] ++ ++ adrl r3, null_ptr_exception ++ str r3, [r0, #15*4] ++do_setcontext: ++ mov r0, #1 ++ bx lr ++abort_table: ++ .word .abortentry5 ++ .word .abortentry6 ++ .word .abortentry7 ++ .word .abortentry8 ++ .word .abortentry9 ++ .word .abortentry10 ++ .word .abortentry11 ++ .word .abortentry12 ++ .word .abortentry13 ++ ++ .word .abortentry19 ++ .word .abortentry20 ++ .word .abortentry21 ++ .word .abortentry22 ++ .word .abortentry23 ++ .word .abortentry24 ++ .word .abortentry25 ++ .word .abortentry26 ++ .word .abortentry27 ++ .word .abortentry28 ++ .word .abortentry29 ++ .word .abortentry30 ++ .word .abortentry31 ++ .word .abortentry32 ++ ++ .word .abortentry38 ++ .word .abortentry39 ++ .word .abortentry40 ++ .word .abortentry41 ++ .word .abortentry42 ++ .word .abortentry42_1 ++ .word .abortentry43 ++ .word .abortentry44 ++ .word .abortentry45 ++ .word .abortentry46 ++ .word .abortentry47 ++ .word .abortentry48 ++ .word .abortentry49 ++ .word .abortentry50 ++ .word .abortentry51 ++ .word .abortentry52 ++ ++ .word .abortentry58 ++ .word .abortentry59 ++ .word .abortentry60 ++ ++ .word .abortentry61 ++ .word .abortentry62 ++ .word .abortentry63 ++ .word .abortentry64 ++ .word .abortentry65 ++ .word .abortentry66 ++ .word .abortentry67 ++ .word .abortentry68 ++ .word .abortentry69 ++ .word .abortentry70 ++ .word .abortentry71 ++ .word .abortentry72 ++ ++ .word .abortentry73 ++ .word .abortentry74 ++ .word .abortentry75 ++ .word .abortentry76 ++ .word .abortentry77 ++ ++ .word .abortentry78 ++ .word .abortentry79 ++ .word .abortentry80 ++ .word .abortentry81 ++ .word .abortentry82 ++ .word .abortentry83 ++ .word .abortentry84 ++ .word .abortentry85 ++ .word .abortentry86 ++ .word .abortentry87 ++ ++ .word .abortentry88 ++ .word .abortentry89 ++ .word .abortentry90 ++ .word .abortentry91 ++ .word .abortentry92 ++ .word .abortentry93 ++ .word .abortentry94 ++ .word .abortentry95 ++ .word .abortentry96 ++ .word .abortentry97 ++ .word .abortentry98 ++ .word .abortentry99 ++ .word .abortentry100 ++ .word .abortentry101 ++ .word .abortentry102 ++ .word .abortentry103 ++ .word .abortentry104 ++ .word .abortentry105 ++ .word .abortentry106 ++ .word .abortentry107 ++ .word .abortentry108 ++ .word .abortentry109 ++ .word 0 ++jpc_correction_table: ++ .byte 1, 1, 1, 1, 1, 1, 1, 1, 1 ++ .byte 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ++ .byte 2, 3, 4, 3, 2, 2, 0, 1, 3, 2, 0, 1, 0, 1, 0, 1 ++ .byte 2, 2, 2 ++ .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .byte 1, 1, 1, 1, 1 ++ .byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ++ .byte 3, 5, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 1, 1, 1, 1, 1 ++ ALIGN_WORD ++ ++#else ++ .global asm_check_null_ptr ++asm_check_null_ptr: ++ mov r0, #0 ++ bx lr ++ ++#endif ++ ++ ALIGN_CODE ++fast_native_entry: ++ ldr r2, [istate, #ISTATE_THREAD] ++ mov r11, tmp2 ++ ldrh r1, [r11, #42] ++ ldr r4, [r2, #THREAD_JAVA_SP] ++ ldr ip, [r2, #THREAD_TOP_ZERO_FRAME] ++ mov r0, #0 ++ mvn r10, #0x540 @ form 0xCAFEBABF in r10 ++ bic r10, r10, #0x14000 ++ bic r10, r10, #0x35000000 ++ sub r9, r4, #76 ++ mov r7, r9 ++ str r9, [r2, #THREAD_JAVA_SP] @ drop stack ++ sub r5, r9, #4 @ stack limit = r9 - 4 ++ mov r3, r9 ++ stmdb r4, {r0, r3, r5, r7, r9, r10, ip} ++ str r0, [r9, #ISTATE_CALLEE] ++ str r0, [r9, #ISTATE_PREV_LINK] ++ str r0, [r9, #ISTATE_MSG] ++ str r0, [r9, #ISTATE_MDX] ++ sub r7, r4, #4 ++ add r7, r7, r1, lsl #2 ++ mov r5, #0 ++ ldr r10, [r11, #12] ++ ldr r10, [r10, #12] ++ stmia r9, {r2, r5, r7, r10, r11} ++ add r0, r9, #72 ++ mov r9, r2 ++.LPIC18_fast_native_entry: ++ ldr r2, [r9, #THREAD_STACK_SIZE] ++ ldr r3, [r9, #THREAD_STACK_BASE] ++ rsb r3, r2, r3 ++ rsb r3, r3, sp ++ cmp r3, #4096 ++ str r0, [r9, #THREAD_TOP_ZERO_FRAME] ++ blt .fast_native_entry_throw_stack_overflow ++ ldr r5, [r11, #84] ++ cmp r5, #0 ++ bne .fast_native_entry_got_handleraddr ++ str r0, [r9, #THREAD_LAST_JAVA_SP] ++ mov r0, r9 ++ mov r1, r11 ++ bl _ZN18InterpreterRuntime19prepare_native_callEP10JavaThreadP13methodOopDesc ++ ldr r11, [r9, #THREAD_TOP_ZERO_FRAME] ++ ldr r1, [r9, #THREAD_PENDING_EXC] ++ str r5, [r9, #THREAD_LAST_JAVA_SP] ++ ldr r11, [r11, #-72 + ISTATE_METHOD] ++ cmp r1, #0 ++ bne .fast_native_entry_exception ++ ldr r5, [r11, #84] ++.fast_native_entry_got_handleraddr: ++ ldr r2, [dispatch, #InterpreterRuntime_slow_signature_handler_Address-XXX] ++ cmp r5, r2 ++ bne .fast_native_entry_get_handler ++ ldr r3, [r9, #THREAD_TOP_ZERO_FRAME] ++ mov r2, #0 ++ mov r0, r9 ++ str r3, [r9, #THREAD_LAST_JAVA_SP] ++ mov r3, r2 ++ mov r1, r11 ++ bl _ZN18InterpreterRuntime22slow_signature_handlerEP10JavaThreadP13methodOopDescPiS4_ ++ ldr r11, [r9, #THREAD_TOP_ZERO_FRAME] ++ ldr r1, [r9, #THREAD_PENDING_EXC] ++ mov r3, #0 ++ ldr r11, [r11, #-72 + ISTATE_METHOD] ++ cmp r1, #0 ++ str r3, [r9, #THREAD_LAST_JAVA_SP] ++ mov r5, r0 ++ bne .fast_native_entry_exception ++.fast_native_entry_get_handler: ++ ++ sub ip, r7, r4 ++ mov ip, ip, asr #2 ++ add lr, ip, #4 ++ bic lr, lr, #1 ++ ++ add r3, r4, #ISTATE_OOP_TEMP-76 ++ ++ mov r4, arm_sp ++ sub arm_sp, arm_sp, #16 ++ sub arm_sp, arm_sp, lr, lsl #2 ++ mov lr, arm_sp ++ ++ add r1, r5, #24 ++ ++ add r2, r9, #THREAD_JNI_ENVIRONMENT ++ str r2, [lr], #4 ++ add r1, r1, #4 ++ ++ ldr r2, [r11, #24] ++ tst r2, #8 ++ beq .do_fast_copy_args ++ ++ ldr r2, [r11, #12] ++ ldr r2, [r2, #16] ++ ldr r2, [r2, #60] ++ str r2, [r3] ++ ++ str r3, [lr], #4 ++ add r1, r1, #4 ++ ++.do_fast_copy_args: ++ cmp ip, #0 ++ blt .fast_no_args ++ ++.fast_copy_args: ++ ldr r0, [r1], #4 ++ ldrh r3, [r0, #6] ++ cmp r3, #FFI_TYPE_DOUBLE ++ cmpne r3, #FFI_TYPE_SINT64 ++ beq .fast_copy_long ++ ++ cmp r3, #FFI_TYPE_POINTER ++ beq .fast_copy_ptr ++ ++ ldr r2, [r7], #-4 ++ str r2, [lr], #4 ++ subs ip, ip, #1 ++ bge .fast_copy_args ++ b .fast_no_args ++ ++.fast_copy_long: ++ tst lr, #4 ++ addne lr, lr, #4 ++ ldmda r7!, {r2, r3} ++ stmia lr!, {r2, r3} ++ subs ip, ip, #2 ++ bge .fast_copy_args ++ b .fast_no_args ++ ++.fast_copy_ptr: ++ ldr r2, [r7], #-4 ++ cmp r2, #0 ++ addne r2, r7, #4 ++ str r2, [lr], #4 ++ subs ip, ip, #1 ++ bge .fast_copy_args ++ ++.fast_no_args: ++ ldr r0, [r9, #THREAD_TOP_ZERO_FRAME] ++ str r0, [r9, #THREAD_LAST_JAVA_SP] ++ ++ mov r2, #_thread_in_native ++ str r2, [r9, #THREAD_STATE] ++ ++ ldr ip, [r11, #80] ++ ldrh r11, [r11, #42] ++ ldmia arm_sp!, {r0, r1, r2, r3} ++ blx ip ++ ++ mov arm_sp, r4 ++ ++ mov r3, #_thread_in_native_trans ++ str r3, [r9, #THREAD_STATE] ++ ++ ldr r3, [dispatch, #SafePointSynchronize_state_Address-XXX] ++ ++ ldr r3, [r3, #0] ++ cmp r3, #0 ++ ldreq r3, [r9, #THREAD_SUSPEND_FLAGS] ++ cmpeq r3, #0 ++ bne .fast_native_entry_do_special ++ ++.fast_native_entry_do_return: ++ mov r3, #_thread_in_Java ++ mov r2, #0 ++ str r3, [r9, #THREAD_STATE] ++ str r2, [r9, #THREAD_LAST_JAVA_SP] ++ ++ add r2, r5, #24 ++ ldr r3, [r5, #4] ++ ++ ldr r5, [r9, #THREAD_TOP_ZERO_FRAME] ++@ ldr r11, [r5, #-72 + ISTATE_METHOD] ++ ++ ldr lr, [r5], #4 ++ ++ add r5, r5, r11, lsl #2 ++ ++ ldr ip, [r2, r3, asl #2] ++ ldrh r2, [ip, #6] ++ ++ cmp r2, #FFI_TYPE_POINTER ++ beq .fast_native_return_obj ++ ++ str lr, [r9, #THREAD_TOP_ZERO_FRAME] @ Defer dropping frame until after we have dealt with ++ @ objects ++ ++ ldr ip, [r9, #THREAD_ACTIVE_HANDLES] ++ mov r3, #0 @ ECN: OK, not an obj, save to clear handles ++ str r3, [ip, #128] ++ ++ cmp r2, #FFI_TYPE_VOID ++ beq .fast_native_return_void ++ cmp r2, #FFI_TYPE_FLOAT ++ cmpne r2, #FFI_TYPE_SINT32 ++ beq .fast_native_return_w ++ cmp r2, #FFI_TYPE_DOUBLE ++ cmpne r2, #FFI_TYPE_SINT64 ++ beq .fast_native_return_dw ++ ++ cmp r2, #FFI_TYPE_UINT16 ++ beq .fast_native_return_char ++ cmp r2, #FFI_TYPE_SINT16 ++ beq .fast_native_return_short ++ cmp r2, #FFI_TYPE_BOOL ++ beq .fast_native_return_bool ++ cmp r2, #FFI_TYPE_SINT8 ++ beq .fast_native_return_byte ++ ++ str r0, [r0, -r0] ++ ++.fast_native_return_dw: ++ stmdb r5!, {r0, r1} ++ str r5, [r9, #THREAD_JAVA_SP] ++ b .fast_native_exit ++.fast_native_return_byte: ++ mov r0, r0, lsl #24 ++ mov r0, r0, asr #24 ++ str r0, [r5, #-4]! ++ str r5, [r9, #THREAD_JAVA_SP] ++ b .fast_native_exit ++.fast_native_return_char: ++ mov r0, r0, lsl #16 ++ mov r0, r0, lsr #16 ++ str r0, [r5, #-4]! ++ str r5, [r9, #THREAD_JAVA_SP] ++ b .fast_native_exit ++.fast_native_return_bool: ++ ands r0, r0, #255 ++ movne r0, #1 ++ str r0, [r5, #-4]! ++ str r5, [r9, #THREAD_JAVA_SP] ++ b .fast_native_exit ++ ++.fast_native_entry_throw_stack_overflow: ++ str r0, [r9, #THREAD_LAST_JAVA_SP] ++ mov r0, r9 ++ bl _ZN18InterpreterRuntime24throw_StackOverflowErrorEP10JavaThread ++ mov r3, #0 ++ ldr r1, [r9, #THREAD_PENDING_EXC] ++ str r3, [r9, #THREAD_LAST_JAVA_SP] ++.fast_native_entry_exception: ++ ldr r5, [r9, #THREAD_TOP_ZERO_FRAME] ++ ldr r3, [r5], #4 ++ str r3, [r9, #THREAD_TOP_ZERO_FRAME] ++ ++ ldrh r3, [r11, #42] ++ add r5, r5, r3, lsl #2 ++ str r5, [r9, #THREAD_JAVA_SP] ++ b .fast_native_exit ++ ++.fast_native_entry_do_special: ++ stmdb sp!, {r0, r1} ++ mov r0, r9 ++ bl _ZN10JavaThread40check_special_condition_for_native_transEPS_ ++ ldmia sp!, {r0, r1} ++ b .fast_native_entry_do_return ++ ++.fast_native_return_obj: ++ cmp r0, #0 ++ ldrne r0, [r0] ++ str r0, [r5, #-4]! ++ ++ str lr, [r9, #THREAD_TOP_ZERO_FRAME] @ Defer dropping frame until after we have dealt with ++ @ objects ++ ++ str r5, [r9, #THREAD_JAVA_SP] ++ ldr r2, [r9, #THREAD_ACTIVE_HANDLES] ++ mov r3, #0 @ ECN: Now that the object is safe on the Java stack ++ str r3, [r2, #128] @ stack, with the Thread SP updated, clear the active_handles. ++ b .fast_native_exit ++.fast_native_return_short: ++ mov r0, r0, lsl #16 ++ mov r0, r0, asr #16 ++.fast_native_return_w: ++ str r0, [r5, #-4]! ++.fast_native_return_void: ++ str r5, [r9, #THREAD_JAVA_SP] ++.fast_native_exit: ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ sub r5, r5, #4 ++ str r5, [istate, #ISTATE_STACK] ++ ++ ldr r1, [r9, #THREAD_TOP_ZERO_FRAME] ++ add r2, r2, #4 ++ str r2, [r9, #THREAD_JAVA_SP] ++ str r1, [r9, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ DISPATCH_START 3 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_NEXT ++ cmp r3, #0 ++ DISPATCH_NEXT ++ bne invokespecial_exception_fix ++ DISPATCH_FINISH ++ ++#include "bytecodes.s" ++ ++ Opcode idiv ++ ++ POP2 r0, r1 ++int_div: ++ cmp r0, #0 ++ beq .divc_0 ++ ++ ands a4, a1, #0x80000000 ++ rsbmi a1, a1, #0 ++ eors ip, a4, a2, ASR #32 ++ rsbcs a2, a2, #0 ++ movs a3, a1 ++.s_loop: ++ cmp a3, a2, LSR #8 ++ movls a3, a3, LSL #8 ++ blo .s_loop ++ cmp a3, a2, LSR #1 ++ bhi .s_jump7 ++ cmp a3, a2, LSR #2 ++ bhi .s_jump6 ++ cmp a3, a2, LSR #3 ++ bhi .s_jump5 ++ cmp a3, a2, LSR #4 ++ bhi .s_jump4 ++ cmp a3, a2, LSR #5 ++ bhi .s_jump3 ++ cmp a3, a2, LSR #6 ++ bhi .s_jump2 ++ cmp a3, a2, LSR #7 ++ bhi .s_jump1 ++.s_loop2: ++@ not executed when falling into .s_loop2 ++ movhi a3, a3, LSR #8 ++ cmp a2, a3, LSL #7 ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #7 ++ cmp a2, a3, LSL #6 ++.s_jump1: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #6 ++ cmp a2, a3, LSL #5 ++.s_jump2: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #5 ++ cmp a2, a3, LSL #4 ++.s_jump3: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #4 ++ cmp a2, a3, LSL #3 ++.s_jump4: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #3 ++ cmp a2, a3, LSL #2 ++.s_jump5: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #2 ++ cmp a2, a3, LSL #1 ++.s_jump6: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #1 ++.s_jump7: ++ cmp a2, a3 ++ adc a4, a4, a4 ++ subcs a2, a2, a3 ++ cmp a3, a1 ++ bne .s_loop2 ++ DISPATCH_START 1 ++ movs ip, ip, lsl #1 ++ DISPATCH_NEXT ++ rsbcs a4, a4, #0 ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUSH a4 ++ DISPATCH_FINISH ++ ++ Opcode irem ++ ++ POP2 r0, r1 ++int_rem: ++ cmp r0, #0 ++ beq .remc_0 ++ ++ ands a4, a1, #0x80000000 ++ rsbmi a1, a1, #0 ++ eors ip, a4, a2, ASR #32 ++ rsbcs a2, a2, #0 ++ movs a3, a1 ++.r_loop: ++ cmp a3, a2, LSR #8 ++ movls a3, a3, LSL #8 ++ blo .r_loop ++ cmp a3, a2, LSR #1 ++ bhi .r_jump7 ++ cmp a3, a2, LSR #2 ++ bhi .r_jump6 ++ cmp a3, a2, LSR #3 ++ bhi .r_jump5 ++ cmp a3, a2, LSR #4 ++ bhi .r_jump4 ++ cmp a3, a2, LSR #5 ++ bhi .r_jump3 ++ cmp a3, a2, LSR #6 ++ bhi .r_jump2 ++ cmp a3, a2, LSR #7 ++ bhi .r_jump1 ++.r_loop2: ++@ not executed when falling into .r_loop2 ++ movhi a3, a3, LSR #8 ++ cmp a2, a3, LSL #7 ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #7 ++ cmp a2, a3, LSL #6 ++.r_jump1: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #6 ++ cmp a2, a3, LSL #5 ++.r_jump2: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #5 ++ cmp a2, a3, LSL #4 ++.r_jump3: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #4 ++ cmp a2, a3, LSL #3 ++.r_jump4: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #3 ++ cmp a2, a3, LSL #2 ++.r_jump5: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #2 ++ cmp a2, a3, LSL #1 ++.r_jump6: ++ adc a4, a4, a4 ++ subcs a2, a2, a3, LSL #1 ++.r_jump7: ++ cmp a2, a3 ++ adc a4, a4, a4 ++ subcs a2, a2, a3 ++ cmp a3, a1 ++ bne .r_loop2 ++ DISPATCH_START 1 ++ movs ip, ip, lsl #1 ++ rsbmi a2, a2, #0 ++ PUSH a2 ++ DISPATCH_FINISH ++ ++@ ip = branch offset ++@ r0 = 1st bytecode ++@ jpc has been updated ++ Opcode goto_safe ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ orr ip, ip, r1, lsl #8 ++ DISPATCH_START_REG ip ++branch_taken: ++ cmp ip, #0 ++ bgt branch_no_check ++ ++ ldr r3, [dispatch, #SafePointSynchronize_state_Address-XXX] ++ ldr r1, [r3] ++ cmp r1, #1 ++ bne branch_no_check ++ ++ ldr r3, [istate, #ISTATE_THREAD] ++ mov r0, sp ++ str r3, [sp] ++ bl _ZN17HandleMarkCleanerD1Ev ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN20SafepointSynchronize5blockEP10JavaThread ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++ DISPATCH_START 0 ++branch_no_check: ++ DISPATCH_BYTECODE ++ ++ Opcode ifeq_safe ++ Opcode ifnull_safe ++ POP r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, #0 ++ orreq ip, ip, r1, lsl #8 ++ ldreqb r0, [jpc, ip]! ++ ldrneb r0, [jpc, #3]! ++ beq branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode ifne_safe ++ Opcode ifnonnull_safe ++ POP r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, #0 ++ orrne ip, ip, r1, lsl #8 ++ ldrneb r0, [jpc, ip]! ++ ldreqb r0, [jpc, #3]! ++ bne branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode iflt_safe ++ POP r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, #0 ++ orrlt ip, ip, r1, lsl #8 ++ ldrltb r0, [jpc, ip]! ++ ldrgeb r0, [jpc, #3]! ++ blt branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode ifge_safe ++ POP r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, #0 ++ orrge ip, ip, r1, lsl #8 ++ ldrgeb r0, [jpc, ip]! ++ ldrltb r0, [jpc, #3]! ++ bge branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode ifgt_safe ++ POP r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, #0 ++ orrgt ip, ip, r1, lsl #8 ++ ldrgtb r0, [jpc, ip]! ++ ldrleb r0, [jpc, #3]! ++ bgt branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode ifle_safe ++ POP r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, #0 ++ orrle ip, ip, r1, lsl #8 ++ ldrleb r0, [jpc, ip]! ++ ldrgtb r0, [jpc, #3]! ++ ble branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode if_icmpeq_safe ++ Opcode if_acmpeq_safe ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, r2 ++ orreq ip, ip, r1, lsl #8 ++ ldreqb r0, [jpc, ip]! ++ ldrneb r0, [jpc, #3]! ++ beq branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode if_icmpne_safe ++ Opcode if_acmpne_safe ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, r2 ++ orrne ip, ip, r1, lsl #8 ++ ldrneb r0, [jpc, ip]! ++ ldreqb r0, [jpc, #3]! ++ bne branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode if_icmplt_safe ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, r2 ++ orrlt ip, ip, r1, lsl #8 ++ ldrltb r0, [jpc, ip]! ++ ldrgeb r0, [jpc, #3]! ++ blt branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode if_icmpge_safe ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, r2 ++ orrge ip, ip, r1, lsl #8 ++ ldrgeb r0, [jpc, ip]! ++ ldrltb r0, [jpc, #3]! ++ bge branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode if_icmpgt_safe ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, r2 ++ orrgt ip, ip, r1, lsl #8 ++ ldrgtb r0, [jpc, ip]! ++ ldrleb r0, [jpc, #3]! ++ bgt branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode if_icmple_safe ++ POP2 r2, r3 ++ ldrsb r1, [jpc, #1] ++ ldrb ip, [jpc, #2] ++ cmp r3, r2 ++ orrle ip, ip, r1, lsl #8 ++ ldrleb r0, [jpc, ip]! ++ ldrgtb r0, [jpc, #3]! ++ ble branch_taken ++ DISPATCH_BYTECODE ++ ++ Opcode ireturn_safe ++ Opcode freturn_safe ++ Opcode lreturn_safe ++ Opcode dreturn_safe ++ Opcode areturn_safe ++ Opcode return_safe ++ ldr r3, [dispatch, #SafePointSynchronize_state_Address-XXX] ++ ldr r1, [r3] ++ cmp r1, #1 ++ bne handle_return ++ ldr r3, [istate, #ISTATE_THREAD] ++ mov r0, sp ++ str r3, [sp] ++ bl _ZN17HandleMarkCleanerD1Ev ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN20SafepointSynchronize5blockEP10JavaThread ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ cmp r3, #0 ++ beq handle_return ++ b handle_exception ++ ++resolve_putstatic: ++ mov r1, #179 ++ sub jpc, jpc, #3 ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime15resolve_get_putEP10JavaThreadN9Bytecodes4CodeE ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne getfield_exception ++ ldrb r3, [jpc, #1] ++ ldrb r2, [jpc, #2] ++ DISPATCH_START 3 ++ orr r3, r3, r2, lsl #8 @ r3 = index ++ add tmp2, constpool, r3, lsl #4 @ tmp2 = cache ++ DISPATCH_NEXT ++ ldr r3, [tmp2, #4] @ r3 = object ++ ldr lr, [tmp2, #12] @ lr = tos_type ++ ldr r2, [tmp2, #8] @ r2 = offset ++ movs lr, lr, lsr #29 ++ bhi putstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 ++ bcs putstatic_h @ C = 1 => R2 = 1 ++ beq putstatic_sb @ Z = 1 => R2 = 0 ++ tst lr, #2 ++ bne putstatic_dw ++ b putstatic_sh ++ ++resolve_getstatic: ++ mov r1, #178 ++ sub jpc, jpc, #3 ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime15resolve_get_putEP10JavaThreadN9Bytecodes4CodeE ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne getfield_exception ++ ldrb r3, [jpc, #1] ++ ldrb r2, [jpc, #2] ++ DISPATCH_START 3 ++ orr r3, r3, r2, lsl #8 @ r3 = index ++ add tmp2, constpool, r3, lsl #4 @ tmp2 = cache ++ DISPATCH_NEXT ++ ldr r3, [tmp2, #4] ++ ldr r2, [tmp2, #12] ++ ldr lr, [tmp2, #8] ++ movs r2, r2, lsr #29 ++ bhi getstatic_w @ C = 1, Z = 0 => R2 == 3, 5, 7 ++ bcs getstatic_h @ C = 1 => R2 = 1 ++ beq getstatic_sb @ Z = 1 => R2 = 0 ++ tst r2, #2 ++ bne getstatic_dw ++ b getstatic_sh ++ ++resolve_putfield: ++ mov r1, #181 ++ b resolve_get_put ++resolve_getfield: ++ mov r1, #180 ++resolve_get_put: ++ mov tmp1, lr ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime15resolve_get_putEP10JavaThreadN9Bytecodes4CodeE ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne getfield_exception ++@ Now restart the getfield ++ ldrb r3, [jpc, #1] ++ ldrb r2, [jpc, #2] ++ orr r3, r3, r2, lsl #8 @ r3 = index ++ add tmp2, constpool, r3, lsl #4 @ tmp2 = cache ++ bx tmp1 ++ ++accessor_non_w: ++ bcs accessor_h ++ beq accessor_sb ++ tst r0, #2 ++ bne accessor_dw ++accessor_sh: ++ ldrsh r0, [r3, r1] ++ str r0, [ip, #0] ++ bx lr ++accessor_h: ++ ldrh r0, [r3, r1] ++ str r0, [ip, #0] ++ bx lr ++accessor_sb: ++ ldrsb r0, [r3, r1] ++ str r0, [ip, #0] ++ bx lr ++accessor_dw: ++ add r0, r3, r1 ++ ldm r0, {r0, r1} ++ sub ip, ip, #4 ++ str ip, [r2, #THREAD_JAVA_SP] ++ stmia ip, {r0, r1} ++ bx lr ++ ++ Opcode getfield ++ add tmp2, constpool, r1, lsl #12 ++ ldr r3, [tmp2, r2, lsl #4]! @ tmp2 = cache, r3 = flags ++ and r3, r3, #0x00ff0000 ++ cmp r3, #180 << 16 ++ blne resolve_getfield ++ ++ ldr r2, [tmp2, #12] ++ movs r2, r2, lsr #29 ++ movhi r0, #opc_igetfield ++ bls getfield_non_w ++rewrite_bytecode: ++ strb r0, [jpc] ++ DISPATCH_BYTECODE ++ ++getfield_non_w: ++ bcs getfield_h @ C = 1 => R2 = 1 ++ beq getfield_sb @ Z = 1 => R2 = 0 ++ tst r2, #2 ++ bne getfield_dw ++getfield_sh: ++ mov r0, #opc_sgetfield ++ b rewrite_bytecode ++getfield_h: ++ mov r0, #opc_cgetfield ++ b rewrite_bytecode ++getfield_sb: ++ mov r0, #opc_bgetfield ++ b rewrite_bytecode ++getfield_dw: ++ mov r0, #opc_lgetfield ++ b rewrite_bytecode ++ ++ Opcode putfield ++ add tmp2, constpool, r1, lsl #12 ++ ldr r3, [tmp2, r2, lsl #4]! @ tmp2 = cache, r3 = flags ++ and r3, r3, #0xff000000 ++ cmp r3, #181 << 24 ++ blne resolve_putfield ++ ++ ldr r2, [tmp2, #12] ++ movs r2, r2, lsr #29 ++ bls putfield_non_w ++ mov r0, #opc_iputfield ++ cmp r2, #tos_atos >> 1 ++ moveq r0, #opc_aputfield ++ b rewrite_bytecode ++ ++putfield_non_w: ++ bcs putfield_h ++ beq putfield_sb ++ tst r2, #2 ++ bne putfield_dw ++putfield_sh: ++putfield_h: ++ mov r0, #opc_cputfield ++ b rewrite_bytecode ++putfield_sb: ++ mov r0, #opc_bputfield ++ b rewrite_bytecode ++putfield_dw: ++ mov r0, #opc_lputfield ++ b rewrite_bytecode ++putfield_a: ++ mov r0, #opc_aputfield ++ b rewrite_bytecode ++ ++getstatic_sh: ++ DISPATCH_STATE 2 ++ ldrsh tmp2, [r3, lr] ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++getstatic_h: ++ DISPATCH_STATE 2 ++ ldrh tmp2, [r3, lr] ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++getstatic_sb: ++ DISPATCH_STATE 2 ++ ldrsb tmp2, [r3, lr] ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++getstatic_dw: ++ DISPATCH_STATE 2 ++ add r3, r3, lr ++ ldm r3, {r2, tmp2} ++ DISPATCH_NEXT ++ PUSH2 r2, tmp2 ++ DISPATCH_FINISH ++getstatic_w: ++ DISPATCH_STATE 2 ++ ldr tmp2, [r3, lr] ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ ++putstatic_sh: ++putstatic_h: ++ DISPATCH_STATE 2 ++ POP tmp2 ++ DISPATCH_NEXT ++ strh tmp2, [r3, r2] ++ DISPATCH_FINISH ++putstatic_w: ++ DISPATCH_STATE 2 ++ cmp lr, #tos_atos >> 1 @ >> 1 due to lsr #29 above ++ beq putstatic_a ++ POP tmp2 ++ DISPATCH_NEXT ++ str tmp2, [r3, r2] ++ DISPATCH_FINISH ++putstatic_sb: ++ DISPATCH_STATE 2 ++ POP tmp2 ++ DISPATCH_NEXT ++ strb tmp2, [r3, r2] ++ DISPATCH_FINISH ++putstatic_dw: ++ DISPATCH_STATE 2 ++ add r2, r2, r3 ++ POP2 r3, tmp2 ++ DISPATCH_NEXT ++ stm r2, {r3, tmp2} ++ DISPATCH_FINISH ++putstatic_a: ++ POP r1 @ r1 = value ++ add r0, r3, r2 ++ PUSH r3 ++ bl oop_store ++ ldr r3, [dispatch, #Universe_collectedHeap_Address-XXX] ++ DISPATCH_START 0 ++ POP r2 ++ ldr r3, [r3] ++ DISPATCH_NEXT ++ ldr r3, [r3, #12] ++ DISPATCH_NEXT ++ mov tmp2, #0 ++ ldr r3, [r3, #76] ++ strb tmp2, [r3, r2, lsr #9] ++ DISPATCH_FINISH ++ ++ ++resolve_invokevirtual: ++ mov tmp1, lr ++ mov r1, #182 ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime14resolve_invokeEP10JavaThreadN9Bytecodes4CodeE ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne invokevirtual_exception ++ ++ ldrb r3, [jpc, #1] ++ ldrb r2, [jpc, #2] ++ orr r3, r3, r2, lsl #8 @ r3 = index ++ add r0, constpool, r3, lsl #4 @ r1 = cache ++ bx tmp1 ++ ++resolve_invokestatic: ++ mov tmp1, lr ++ mov r1, #184 ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime14resolve_invokeEP10JavaThreadN9Bytecodes4CodeE ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #4] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne invokestatic_exception ++ ++ ldrb r3, [jpc, #1] ++ ldrb r2, [jpc, #2] ++ orr r3, r3, r2, lsl #8 @ r3 = index ++ add r0, constpool, r3, lsl #4 @ r1 = cache ++ bx tmp1 ++ ++resolve_invokespecial: ++ mov tmp1, lr ++ mov r1, #183 ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime14resolve_invokeEP10JavaThreadN9Bytecodes4CodeE ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne invokespecial_exception ++ ++ ldrb r3, [jpc, #1] ++ ldrb r2, [jpc, #2] ++ orr r3, r3, r2, lsl #8 @ r3 = index ++ add r0, constpool, r3, lsl #4 @ r1 = cache ++ bx tmp1 ++ ++ Opcode invokeinterface ++ ldrb r1, [jpc, #2] @ zero_extendqisi2 ++ ldrb r3, [jpc, #1] @ zero_extendqisi2 ++ mov r0, constpool ++ orr r3, r3, r1, asl #8 ++ ldr r2, [r0, r3, asl #4] ++ mov tmp1, r3, asl #4 ++ add r0, r0, tmp1 ++ mov r2, r2, asr #16 ++ and r2, r2, #255 ++ cmp r2, #185 ++ beq .invokeinterface_1 ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ ldr r0, [istate, #ISTATE_THREAD] ++ mov r1, #185 ++ bl _ZN18InterpreterRuntime14resolve_invokeEP10JavaThreadN9Bytecodes4CodeE ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++ mov r3, constpool ++ add r0, r3, tmp1 ++.invokeinterface_1: ++ ldr r3, [r0, #12] ++ ands tmp_vvv, r3, #16777216 ++ bne .invokeinterface_6 ++ ldr lr, [r0, #4] ++ ldr r3, [r0, #12] ++ and r3, r3, #255 ++ ldr r3, [stack, r3, asl #2] ++ cmp r3, #0 ++ beq null_ptr_exception ++ ldr sl, [r3, #4] ++ add r3, sl, #8 ++ add tmp1, sl, #304 ++ ldr r2, [r3, #224] ++ ldr ip, [r3, #228] ++ add r2, r2, #1 ++ bic r2, r2, #1 ++ cmp ip, #0 ++ mov r3, r2, asl #2 ++ add r1, tmp1, r3 ++ movle r2, tmp_vvv ++ ble .invokeinterface_4 ++ ldr r3, [tmp1, r2, asl #2] ++ cmp lr, r3 ++ movne r2, tmp_vvv ++ bne .invokeinterface_3 ++ b .invokeinterface_5 ++.invokeinterface_2: ++ ldr r3, [r1, #0] ++ cmp lr, r3 ++ beq .invokeinterface_5 ++.invokeinterface_3: ++ add r2, r2, #1 ++ cmp r2, ip ++ add r1, r1, #8 ++ blt .invokeinterface_2 ++.invokeinterface_4: ++ cmp r2, ip ++ beq incompatibleclass_exception ++.invokeinterface_5: ++ ldr r3, [r0, #8] ++ ldr r2, [r1, #4] ++ mov r3, r3, asl #2 ++ add r3, sl, r3 ++ ldr r0, [r3, r2] ++ cmp r0, #0 ++ bne .invokeinterface_7 ++abstractmethod_exception: ++ mov r0, #VMSYMBOLS_AbstractMethodError ++ b raise_exception ++incompatibleclass_exception: ++ mov r0, #VMSYMBOLS_IncompatibleClassChangeError ++ b raise_exception ++ ++.invokeinterface_6: ++ ldr r3, [r0, #12] ++ mov r1, stack ++ and r3, r3, #255 ++ ldr r2, [stack, r3, asl #2] ++ cmp r2, #0 ++ beq null_ptr_exception ++ ldr r3, [r0, #12] ++ tst r3, #67108864 ++ ldreq r3, [r0, #12] ++ ldreq r2, [r0, #8] ++ andeq r3, r3, #255 ++ ldrne r0, [r0, #8] ++ ldreq r1, [stack, r3, asl #2] ++ moveq r2, r2, asl #2 ++ ldreq r3, [r1, #4] ++ addeq r3, r3, r2 ++ ldreq r0, [r3, #304] ++.invokeinterface_7: ++ str r0, [istate, #ISTATE_CALLEE] ++ ldr r3, [r0, #76] ++ mov r1, #0 ++ str r3, [istate, #36] ++ str stack, [istate, #ISTATE_STACK] ++ str jpc, [istate, #ISTATE_BCP] ++ ldr lr, [istate, #ISTATE_THREAD] ++ str r1, [lr, #THREAD_LAST_JAVA_SP] ++ ldr r3, [istate, #ISTATE_STACK] ++ add r3, r3, #4 ++ str r3, [lr, #THREAD_JAVA_SP] ++ ldr ip, [istate, #36] ++ ldr r2, [istate, #ISTATE_THREAD] ++ mov r1, ip ++ ldr ip, [ip] ++ blx ip ++ ldr ip, [istate, #ISTATE_THREAD] ++ ldr r3, [ip, #THREAD_JAVA_SP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ sub r3, r3, #4 ++ str r3, [istate, #ISTATE_STACK] ++ ldr r1, [ip, #THREAD_TOP_ZERO_FRAME] ++ add r2, r2, #4 ++ str r2, [ip, #THREAD_JAVA_SP] ++ str r1, [ip, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ cmp r3, #0 ++ bne handle_exception ++invokeinterface_exit: ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH 5 ++ ++ Opcode new ++ ldrb ip, [jpc, #1] @ zero_extendqisi2 ++ ldrb r2, [jpc, #2] @ zero_extendqisi2 ++ ldr r3, [istate, #ISTATE_METHOD] ++ orr r2, r2, ip, asl #8 ++ ldr lr, [r3, #12] ++ mov r2, r2, asl #16 ++ ldr r1, [lr, #8] ++ add r1, r1, #12 ++ ldrb r3, [r1, r2, lsr #16] @ zero_extendqisi2 ++ mov r2, r2, lsr #16 ++ and r3, r3, #255 ++ str r2, [sp, #52] ++ cmp r3, #104 ++ cmpne r3, #100 ++ beq .new_1 ++ mov r3, r2, asl #2 ++ add r3, lr, r3 ++ ldr r3, [r3, #32] ++ add r1, r3, #8 ++ str r3, [sp, #84] ++ str r1, [sp, #88] ++ ldr r3, [r1, #216] ++ cmp r3, #5 ++ beq .new_2 ++.new_1: ++ ldr r3, [istate, #ISTATE_METHOD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr r1, [r3, #12] ++ ldr r2, [sp, #52] ++ bl _ZN18InterpreterRuntime4_newEP10JavaThreadP19constantPoolOopDesci ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr ip, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp ip, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ beq new_exit ++ b handle_exception ++.new_2: ++ ldr r3, [r1, #4] ++ tst r3, #1 ++ bne .new_1 ++ mov fp, r3, asr #2 ++ ldr r3, [dispatch, #UseTLAB_Address-XXX] ++ ldr r2, [dispatch, #ZeroTLAB_Address-XXX] ++ ldrb r1, [r3] ++ cmp r1, #0 ++ ldrb r0, [r2] ++ bne .new_9 ++.new_3: ++ mov tmp_vvv, fp, asl #2 ++.new_4: ++ ldr r2, [dispatch, #Universe_collectedHeap_Address-XXX] ++ str r2, [sp, #20] ++.new_5: ++ ldr r1, [sp, #20] ++ ldr r2, [r1, #0] ++ mov r0, r2 ++ ldr r3, [r2, #UNIVERSE_VTABLE] ++ ldr ip, [r3, #UNIVERSE_VTABLE_TOP_ADDR] ++ blx ip ++ ldr r3, [sp, #20] ++ ldr r2, [r3, #0] ++ ldr r3, [r2, #UNIVERSE_VTABLE] ++ ldr tmp_xxx, [r0, #0] ++ mov r0, r2 ++ ldr ip, [r3, #UNIVERSE_VTABLE_END_ADDR] ++ blx ip ++ add sl, tmp_xxx, tmp_vvv ++ ldr r3, [r0, #0] ++ cmp sl, r3 ++ bhi .new_1 ++ ldr ip, [sp, #20] ++ ldr r3, [ip, #0] ++ mov r0, r3 ++ ldr r2, [r3, #UNIVERSE_VTABLE] ++ ldr ip, [r2, #UNIVERSE_VTABLE_TOP_ADDR] ++ blx ip ++ mov r2, tmp_xxx ++ mov r1, r0 ++ mov r0, sl ++ bl _ZN6Atomic11cmpxchg_ptrEPvPVvS0_ ++ cmp r0, tmp_xxx ++ bne .new_5 ++ subs tmp_xxx, r0, #0 ++ beq .new_1 ++.new_6: ++ subs r2, fp, #2 ++ bne .new_10 ++.new_7: ++ ldr r3, [dispatch, #UseBiasedLocking_Address-XXX] ++ ldrb r1, [r3] ++ cmp r1, #0 ++ moveq r3, #1 ++ ldrne r0, [sp, #88] ++ streq r3, [tmp_xxx, #0] ++ ldrne r3, [r0, #96] ++ add r0, tmp_xxx, #4 ++ strne r3, [tmp_xxx, #0] ++ ldr r3, [dispatch, #always_do_update_barrier_Address-XXX] ++ ldrb r1, [r3] @ zero_extendqisi2 ++ cmp r1, #0 ++ ldreq r2, [sp, #84] ++ streq r2, [tmp_xxx, #4] ++ beq .new_8 ++ ldr r1, [sp, #84] ++ bl oop_store ++.new_8: ++ str tmp_xxx, [stack], #-4 ++ b new_exit_1 ++.new_9: ++ ldr r1, [istate, #ISTATE_THREAD] ++ ldr r2, [r1, #THREAD_TLAB_TOP] ++ ldr r3, [r1, #THREAD_TLAB_END] ++ rsb r3, r2, r3 ++ cmp fp, r3, lsr #2 ++ bhi .new_3 ++ cmp r2, #0 ++ mov tmp_vvv, fp, asl #2 ++ add r3, r2, tmp_vvv ++ mov tmp_xxx, r2 ++ str r3, [r1, #THREAD_TLAB_TOP] ++ beq .new_4 ++ cmp r0, #0 ++ bne .new_7 ++ b .new_6 ++.new_10: ++ mov r2, r2, asl #2 ++ add r0, tmp_xxx, #8 ++ mov r1, #0 ++ bl memset ++ b .new_7 ++new_exit: ++ ldr r2, [r0, #THREAD_VM_RESULT] ++ str r2, [stack], #-4 ++ ldr r3, [istate, #ISTATE_THREAD] ++ str ip, [r3, #THREAD_VM_RESULT] ++new_exit_1: ++ ldr locals, [istate, #ISTATE_LOCALS] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH 3 ++ ++bytecode_interpreter_str: ++ .ascii "[Bytecode Interpreter]\000" ++ ALIGN_WORD ++ ++ Opcode newarray ++ ldrb r1, [jpc, #1] @ zero_extendqisi2 ++ ldr r2, [stack, #4] ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime8newarrayEP10JavaThread9BasicTypei ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr ip, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp ip, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++ ldr r2, [r0, #THREAD_VM_RESULT] ++ str r2, [stack, #4] ++ ldr r3, [istate, #ISTATE_THREAD] ++ str ip, [r3, #THREAD_VM_RESULT] ++ DISPATCH 2 ++ ++ Opcode anewarray ++ ldrb r0, [jpc, #1] @ zero_extendqisi2 ++ ldr r3, [stack, #4] ++ ldr lr, [istate, #ISTATE_METHOD] ++ ldrb r2, [jpc, #2] @ zero_extendqisi2 ++ orr r2, r2, r0, asl #8 ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ ldr r1, [lr, #12] ++ ldr r0, [istate, #ISTATE_THREAD] ++ bl _ZN18InterpreterRuntime9anewarrayEP10JavaThreadP19constantPoolOopDescii ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr ip, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp ip, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++ ldr r2, [r0, #THREAD_VM_RESULT] ++ str r2, [stack, #4] ++ ldr r3, [istate, #ISTATE_THREAD] ++ str ip, [r3, #THREAD_VM_RESULT] ++ DISPATCH 3 ++ ++ Opcode arraylength ++ ldr r3, [stack, #4] ++ cmp r3, #0 ++ beq null_ptr_exception ++ ldr r1, [r3, #8] ++ str r1, [stack, #4] ++ DISPATCH 1 ++ ++ Opcode athrow ++ ldr r1, [stack, #4] ++ cmp r1, #0 ++ beq null_ptr_exception ++ mov r2, #0 ++ ldr r0, [istate, #ISTATE_THREAD] ++ mov r3, r2 ++ bl _ZN12ThreadShadow21set_pending_exceptionEP7oopDescPKci ++ b handle_exception ++ ++ Opcode checkcast ++ ldr r3, [stack, #4] ++ cmp r3, #0 ++ beq .checkcast_exit ++ ldrb sl, [jpc, #2] @ zero_extendqisi2 ++ ldrb tmp_xxx, [jpc, #1] @ zero_extendqisi2 ++ orr r1, sl, tmp_xxx, asl #8 ++ ldr r3, [istate, #ISTATE_METHOD] ++ mov r1, r1, asl #16 ++ ldr r0, [r3, #12] ++ mov tmp_xxx, r1, lsr #16 ++ ldr r2, [r0, #8] ++ add r2, r2, #12 ++ ldrb r3, [r2, r1, lsr #16] @ zero_extendqisi2 ++ and r3, r3, #255 ++ cmp r3, #104 ++ cmpne r3, #100 ++ beq .checkcast_2 ++.checkcast_1: ++ mov r1, tmp_xxx, asl #2 ++ ldr r0, [stack, #4] ++ ldr r2, [istate, #ISTATE_METHOD] ++ ldr r0, [r0, #4] ++ ldr r3, [r2, #12] ++ add r3, r3, r1 ++ ldr tmp_vvv, [r3, #32] ++ cmp tmp_vvv, r0 ++ beq .checkcast_exit ++ add tmp_xxx, r0, #8 ++ mov r0, tmp_xxx ++ mov r1, tmp_vvv ++ bl _ZNK5Klass13is_subtype_ofEP12klassOopDesc ++ cmp r0, #0 ++ bne .checkcast_exit ++ mov r0, tmp_xxx ++ add sl, sp, #216 ++ ldr r3, [istate, #ISTATE_THREAD] ++ ldr fp, [r3, #144] @ THREAD_RESOURCE_AREA ++ ldr r1, [fp, #4] ++ str r1, [sp, #112] ++ ldr r2, [fp, #8] ++ str r2, [sp, #116] ++ ldr r3, [fp, #12] ++ str r3, [sp, #120] ++ bl _ZNK5Klass13external_nameEv ++ mov tmp_xxx, r0 ++ add r0, tmp_vvv, #8 ++ bl _ZNK5Klass13external_nameEv ++ mov r1, r0 ++ mov r0, tmp_xxx ++ bl _ZN13SharedRuntime27generate_class_cast_messageEPKcS1_ ++ ldr tmp_xxx, [dispatch, #VmSymbols_symbols_Address-XXX] ++ ldr ip, [istate, #ISTATE_THREAD] ++ adrl r1, bytecode_interpreter_str ++ mov r2, #99 ++ mov r3, #_thread_in_vm ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ str ip, [sl, #-72]! ++ str r3, [ip, #THREAD_STATE] ++ ldr r3, [tmp_xxx, #VMSYMBOLS_ClassCastException * 4] ++ ldr ip, [istate, #ISTATE_THREAD] ++ str r0, [sp, #0] ++ mov r0, ip ++ bl _ZN10Exceptions10_throw_msgEP6ThreadPKciP13symbolOopDescS3_ ++ mov r0, sl ++ bl _ZN18ThreadInVMfromJavaD1Ev ++ ldr r0, [sp, #112] ++ ldr r3, [r0, #0] ++ ldr stack, [istate, #ISTATE_STACK] ++ cmp r3, #0 ++ ldr jpc, [istate, #ISTATE_BCP] ++ beq 1f ++ bl _ZN5Chunk9next_chopEv ++1: ++ ldr r2, [sp, #120] ++ str r2, [fp, #12] ++ ldr r3, [sp, #112] ++ str r3, [fp, #4] ++ ldr ip, [sp, #116] ++ str ip, [fp, #8] ++ b handle_exception ++.checkcast_2: ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime13quicken_io_ccEP10JavaThread ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ beq .checkcast_1 ++ b handle_exception ++.checkcast_exit: ++ ldr locals, [istate, #ISTATE_LOCALS] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH 3 ++ ++ Opcode instanceof ++ ldr r3, [stack, #4] ++ cmp r3, #0 ++ beq .instanceof_exit ++ ldrb tmp1, [jpc, #1] @ zero_extendqisi2 ++ ldr r3, [istate, #ISTATE_METHOD] ++ ldrb r2, [jpc, #2] @ zero_extendqisi2 ++ ldr ip, [r3, #12] ++ orr r2, r2, tmp1, asl #8 ++ ldr r1, [ip, #8] ++ mov r2, r2, asl #16 ++ add r1, r1, #12 ++ mov tmp1, r2, lsr #16 ++ ldrb r3, [r1, r2, lsr #16] @ zero_extendqisi2 ++ and r3, r3, #255 ++ cmp r3, #104 ++ cmpne r3, #100 ++ bne .instanceof_1 ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime13quicken_io_ccEP10JavaThread ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++.instanceof_1: ++ mov r1, tmp1, asl #2 ++ ldr r0, [stack, #4] ++ ldr r2, [istate, #ISTATE_METHOD] ++ ldr r0, [r0, #4] ++ ldr r3, [r2, #12] ++ add r3, r3, r1 ++ ldr r1, [r3, #32] ++ cmp r1, r0 ++ beq .instanceof_2 ++ add r0, r0, #8 ++ bl _ZNK5Klass13is_subtype_ofEP12klassOopDesc ++ cmp r0, #0 ++ streq r0, [stack, #4] ++ beq .instanceof_exit ++.instanceof_2: ++ mov r3, #1 ++ str r3, [stack, #4] ++.instanceof_exit: ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH 3 ++ ++ Opcode monitorenter ++ ldr r1, [stack, #4] ++ cmp r1, #0 ++ beq .monitorenter_4 ++ ldr r0, [istate, #ISTATE_MONITOR_BASE] ++ ldr r2, [istate, #ISTATE_STACK_BASE] ++ cmp r2, r0 ++ beq .monitorenter_5 ++ mov sl, #0 ++.monitorenter_1: ++ ldr r3, [r2, #4] ++ cmp r3, #0 ++ moveq sl, r2 ++ beq .monitorenter_2 ++ cmp r1, r3 ++ beq .monitorenter_3 ++.monitorenter_2: ++ add r2, r2, #8 ++ cmp r2, r0 ++ bne .monitorenter_1 ++.monitorenter_3: ++ cmp sl, #0 ++ beq .monitorenter_5 ++ str r1, [sl, #4] ++ ldr r3, [r1, #0] ++ mov r0, sl ++ orr tmp1, r3, #1 ++ mov r2, tmp1 ++ str tmp1, [sl, #0] ++ bl _ZN6Atomic11cmpxchg_ptrEPvPVvS0_ ++ cmp r0, tmp1 ++ beq .monitorenter_exit ++ bic r1, tmp1, #3 ++ ldr r2, [istate, #ISTATE_THREAD] ++ mov r0, r2 ++ ldr r3, [r2, #0] ++ ldr ip, [r3, #THREAD_VTABLE_IS_LOCK_OWNED] ++ blx ip ++ cmp r0, #0 ++ movne lr, #0 ++ strne lr, [sl, #0] ++ bne .monitorenter_exit ++ mov r1, sl ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ ldr r0, [istate, #ISTATE_THREAD] ++ bl _ZN18InterpreterRuntime12monitorenterEP10JavaThreadP15BasicObjectLock ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ cmp r3, #0 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ beq .monitorenter_exit ++ b handle_exception ++.monitorenter_4: ++ b null_ptr_exception ++.monitorenter_5: ++ mov lr, #0 ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ ldr r3, [istate, #ISTATE_THREAD] ++ ldr ip, [istate, #ISTATE_THREAD] ++ ldr r1, [r3, #THREAD_JAVA_SP] ++ ldr r3, [r3, #THREAD_JAVA_STACK_BASE] ++ str lr, [ip, #THREAD_LAST_JAVA_SP] ++ rsb r3, r3, r1 ++ cmp r3, #7 ++ ble vm_fatal_error ++ sub r3, r1, #8 ++ ldr r1, [istate, #ISTATE_THREAD] ++ str r3, [r1, #THREAD_JAVA_SP] ++ ldr r2, [istate, #ISTATE_STACK] ++ ldr r1, [istate, #ISTATE_STACK_BASE] ++ add r3, r2, #4 ++ cmp r1, r3 ++ bls .monitorenter_7 ++ add r0, r2, #8 ++.monitorenter_6: ++ ldr r3, [r0, #-4] ++ mov r2, r0 ++ str r3, [r0, #-12] ++ add r0, r0, #4 ++ ldr r1, [istate, #ISTATE_STACK_BASE] ++ cmp r1, r2 ++ bhi .monitorenter_6 ++ ldr r2, [istate, #ISTATE_STACK] ++.monitorenter_7: ++ sub r1, r1, #8 ++ sub r2, r2, #8 ++ ldr r3, [istate, #ISTATE_STACK_LIMIT] ++ str r1, [istate, #ISTATE_STACK_BASE] ++ str r2, [istate, #ISTATE_STACK] ++ sub r3, r3, #8 ++ mov r0, #0 ++ str r3, [istate, #ISTATE_STACK_LIMIT] ++ str r0, [r1, #4] ++ ldr r1, [istate, #ISTATE_THREAD] ++ ldr r3, [r1, #THREAD_TOP_ZERO_FRAME] ++ str r3, [r1, #THREAD_LAST_JAVA_SP] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr sl, [istate, #ISTATE_STACK_BASE] ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r3, [stack, #4] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ mov r1, r3 ++ str r3, [sl, #4] ++ ldr r2, [r3, #0] ++ mov r0, sl ++ orr tmp1, r2, #1 ++ mov r2, tmp1 ++ str tmp1, [sl, #0] ++ bl _ZN6Atomic11cmpxchg_ptrEPvPVvS0_ ++ cmp r0, tmp1 ++ beq .monitorenter_exit ++ bic r1, tmp1, #3 ++ ldr r2, [istate, #ISTATE_THREAD] ++ mov r0, r2 ++ ldr r3, [r2, #0] ++ ldr ip, [r3, #THREAD_VTABLE_IS_LOCK_OWNED] ++ blx ip ++ cmp r0, #0 ++ movne ip, #0 ++ strne ip, [sl, #0] ++ bne .monitorenter_exit ++ mov r1, sl ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime12monitorenterEP10JavaThreadP15BasicObjectLock ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ beq .monitorenter_exit ++ b handle_exception ++.monitorenter_exit: ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ add stack, stack, #4 ++ DISPATCH 1 ++ ++ Opcode monitorexit ++ ldr sl, [stack, #4] ++ cmp sl, #0 ++ beq .monitorexit_3 ++ ldr r2, [istate, #ISTATE_MONITOR_BASE] ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] ++ cmp tmp1, r2 ++ bne .monitorexit_2 ++ b .monitorexit_4 ++.monitorexit_1: ++ add tmp1, tmp1, #8 ++ cmp tmp1, r2 ++ beq .monitorexit_4 ++.monitorexit_2: ++ ldr r3, [tmp1, #4] ++ cmp sl, r3 ++ bne .monitorexit_1 ++ ldr r0, [tmp1, #0] ++ mov lr, #0 ++ cmp r0, lr ++ str lr, [tmp1, #4] ++ beq .monitorexit_exit ++ mov r1, sl ++ mov r2, tmp1 ++ bl _ZN6Atomic11cmpxchg_ptrEPvPVvS0_ ++ cmp tmp1, r0 ++ beq .monitorexit_exit ++ str sl, [tmp1, #4] ++ mov r1, tmp1 ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ ldr r0, [istate, #ISTATE_THREAD] ++ bl _ZN18InterpreterRuntime11monitorexitEP10JavaThreadP15BasicObjectLock ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ cmp r3, #0 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ beq .monitorexit_exit ++ b handle_exception ++.monitorexit_3: ++ b null_ptr_exception ++.monitorexit_4: ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime37throw_illegal_monitor_state_exceptionEP10JavaThread ++ b handle_exception_with_bcp ++.monitorexit_exit: ++ add stack, stack, #4 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH 1 ++ ++vm_fatal_error: ++ adr r0, .fatal_filename ++ mov r1, #99 ++ bl _Z28report_should_not_reach_herePKci ++ b breakpoint ++.fatal_filename: ++ .ascii "[Optimsed Assembler Interpreter Loop]\000" ++ ALIGN_WORD ++ ++ Opcode aastore ++ ldr tmp1, [stack, #12] ++ ldr tmp_vvv, [stack, #8] ++ cmp tmp1, #0 ++ ldr sl, [stack, #4] ++ beq null_ptr_exception ++ ldr r3, [tmp1, #8] ++ cmp tmp_vvv, r3 ++ bcs array_bounds_exception ++ cmp sl, #0 ++ beq .aastore_exit ++ ldr r3, [tmp1, #4] ++ ldr r0, [sl, #4] ++ ldr r1, [r3, #136] ++ cmp r0, r1 ++ beq .aastore_exit ++ add r0, r0, #8 ++ bl _ZNK5Klass13is_subtype_ofEP12klassOopDesc ++ cmp r0, #0 ++ moveq r0, #VMSYMBOLS_ArrayStoreException ++ beq raise_exception ++.aastore_exit: ++ ldr r2, [dispatch, #Universe_collectedHeap_Address-XXX] ++ add r1, tmp1, #12 ++ str sl, [r1, tmp_vvv, asl #2]! ++ ldr r3, [r2] ++ mov lr, #0 ++ ldr r3, [r3, #12] ++ add stack, stack, #12 ++ ldr r3, [r3, #76] ++ strb lr, [r3, r1, lsr #9] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH 1 ++ ++ Opcode wide ++ ldrb r2, [jpc, #1] ++ ldrb r1, [jpc, #2] @ zero_extendqisi2 ++ ldrb r3, [jpc, #3] @ zero_extendqisi2 ++ ++ sub lr, r2, #opc_aload+1 ++ cmp lr, #opc_istore - (opc_aload+1) ++ bcc wide_undef_opc_exception ++ ++ sub lr, r2, #opc_iload ++ cmp r2, #opc_istore ++ subcs lr, lr, #opc_istore - (opc_aload+1) ++ cmp r2, #opc_astore+1 ++ ++ orr r1, r3, r1, asl #8 ++ adr r3, wide_case_table ++ ldrcc pc, [r3, lr, lsl #2] ++ ++ cmp r2, #opc_ret ++ beq do_wide_ret ++ cmp r2, #opc_iinc ++ beq do_wide_iinc ++wide_undef_opc_exception: ++ mov r0, #VMSYMBOLS_InternalError ++ adr r1, undef_opcode_msg ++ b raise_exception_with_msg ++undef_opcode_msg: ++ .ascii "undefined opcode\000" ++ ALIGN_WORD ++ ++wide_case_table: ++ .word case_wide_iload ++ .word case_wide_lload ++ .word case_wide_fload ++ .word case_wide_dload ++ .word case_wide_aload ++ .word case_wide_istore ++ .word case_wide_lstore ++ .word case_wide_fstore ++ .word case_wide_dstore ++ .word case_wide_astore ++ ++case_wide_iload: ++case_wide_fload: ++case_wide_aload: ++ ldr r2, [locals, -r1, lsl #2] ++ PUSH r2 ++ DISPATCH 4 ++case_wide_istore: ++case_wide_fstore: ++ POP r2 ++ str r2, [locals, -r1, lsl #2] ++ DISPATCH 4 ++case_wide_dload: ++case_wide_lload: ++ sub r1, locals, r1, lsl #2 ++ ldmda r1, {r1, r2} ++ PUSH2 r1, r2 ++ DISPATCH 4 ++case_wide_dstore: ++case_wide_lstore: ++ POP2 r2, r3 ++ sub r1, locals, r1, lsl #2 ++ stmda r1, {r2, r3} ++ DISPATCH 4 ++case_wide_astore: ++ mov r3, r1 ++ mov r0, stack ++ mvn r1, #0 ++ mov r2, locals ++ bl _ZN19BytecodeInterpreter6astoreEPiiS0_i ++ DISPATCH 4 ++do_wide_ret: ++ ldr r2, [istate, #ISTATE_METHOD] ++ ldr r2, [r2, #8] ++ ldr r1, [locals, -r1, lsl #2] ++ add jpc, r2, r1 ++ DISPATCH 48 ++do_wide_iinc: ++ ldrsb r2, [jpc, #4] ++ ldrb r3, [jpc, #5] ++ orr r2, r3, r2, lsl #8 ++ ldr r3, [locals, -r1, lsl #2] ++ add r3, r3, r2 ++ str r3, [locals, -r1, lsl #2] ++ DISPATCH 6 ++ ++ Opcode multianewarray ++ ldrb tmp1, [jpc, #3] @ zero_extendqisi2 ++ ldr r0, [istate, #ISTATE_THREAD] ++ add r1, stack, tmp1, lsl #2 ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime14multianewarrayEP10JavaThreadPi ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r1, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r1, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++ ldr r3, [r0, #THREAD_VM_RESULT] ++ str r3, [stack, tmp1, asl #2] ++ ldr r2, [istate, #ISTATE_THREAD] ++ mov r3, tmp1, asl #2 ++ sub r3, r3, #4 ++ str r1, [r2, #THREAD_VM_RESULT] ++ add stack, stack, r3 ++ DISPATCH 4 ++ ++ Opcode jsr_w ++ ldr r3, [istate, #ISTATE_METHOD] ++ ldr r1, [r3, #8] ++ rsb r2, r1, jpc ++ sub r2, r2, #43 ++ str r2, [stack], #-4 ++ b do_goto_w ++ ++ Opcode goto_w ++ add r2, jpc, #1 ++ ldrb tmp1, [jpc, #1] @ zero_extendqisi2 ++ ldrb r3, [r2, #3] @ zero_extendqisi2 ++ ldrb r0, [r2, #1] @ zero_extendqisi2 ++ ldrb ip, [r2, #2] @ zero_extendqisi2 ++ orr r3, r3, tmp1, asl #24 ++ orr r3, r3, r0, asl #16 ++ orr r3, r3, ip, asl #8 ++ cmp r3, #0 ++ add jpc, jpc, r3 ++ bgt 1f ++ ++ ldr r3, [dispatch, #SafePointSynchronize_state_Address-XXX] ++ ldr r1, [r3] ++ cmp r1, #1 ++ bne 1f ++ ldr r3, [istate, #ISTATE_THREAD] ++ mov r0, sp ++ str r3, [sp] ++ bl _ZN17HandleMarkCleanerD1Ev ++ ldr r0, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN20SafepointSynchronize5blockEP10JavaThread ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++1: ++ DISPATCH 0 ++ ++ Opcode breakpoint ++ mov r2, jpc ++ str stack, [istate, #ISTATE_STACK] ++ str jpc, [istate, #ISTATE_BCP] ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr r1, [istate, #ISTATE_METHOD] ++ bl _ZN18InterpreterRuntime24get_original_bytecode_atEP10JavaThreadP13methodOopDescPh ++ ldr stack, [istate, #ISTATE_STACK] ++ ldmib istate, {jpc, locals} @ phole ldm ++ mov tmp1, r0 ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ cmp r3, #0 ++ bne handle_exception ++ str stack, [istate, #ISTATE_STACK] ++ str jpc, [istate, #ISTATE_BCP] ++ mov r2, jpc ++ ldr r1, [istate, #ISTATE_METHOD] ++ bl _ZN18InterpreterRuntime11_breakpointEP10JavaThreadP13methodOopDescPh ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr jpc, [istate, #ISTATE_BCP] ++ cmp r3, #0 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ldr locals, [istate, #ISTATE_LOCALS] ++ bne handle_exception ++ and r0, tmp1, #255 ++ DISPATCH_BYTECODE ++ ++ Opcode undefined ++ ldr r2, [dispatch, #Bytecodes_name_Address-XXX] ++ ldrb r3, [jpc, #0] @ zero_extendqisi2 ++ adrl r0, bytecode_interpreter_str ++ cmp r3, #last_implemented_bytecode+1 ++ adrcs ip, unknown_bytecode ++ ldrcc ip, [r2, r3, asl #2] ++ adr r2, unimplemented_opcode_msg ++ mov r1, #99 ++ str ip, [sp, #0] ++ bl _Z19report_fatal_varargPKciS0_z ++ b breakpoint ++unimplemented_opcode_msg: ++ .ascii "\011*** Unimplemented opcode: %d = %s\012\000" ++unknown_bytecode: ++ .ascii "\000" ++ ALIGN_WORD ++ ++ Opcode return_register_finalizer ++ ldr r1, [locals, #0] ++ ldr r3, [r1, #4] ++ ldr r2, [r3, #84] ++ tst r2, #1073741824 ++ beq handle_return ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ ldr r0, [istate, #ISTATE_THREAD] ++ bl _ZN18InterpreterRuntime18register_finalizerEP10JavaThreadP7oopDesc ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ cmp r3, #0 ++ beq handle_return ++ b handle_exception ++ ++@ ECN: normal_entry_synchronized doesn't really mean synchronized. It means ++@ may or may not be synchronized. So we still have to check the synchronized ++@ flag in the synchronized path, otherwise we may get an IllegalMonitor. ++normal_entry_synchronized: ++ stmfd sp!, {regset, lr} ++ sub sp, sp, #220 ++ mov sl, r0 ++ mov tmp1, r2 ++ ldrh r2, [sl, #40] ++ ldrh r3, [sl, #42] ++ rsb tmp_zzz, r3, r2 ++ cmp tmp_zzz, #0 ++ ble .normal_entry_synchronized_no_locals ++ ++ mov r2, #0 ++ ldr r1, [tmp1, #THREAD_JAVA_SP] ++.zero_locals_synchronized: ++ subs tmp_zzz, tmp_zzz, #1 ++ str r2, [r1, #-4]! ++ bgt .zero_locals_synchronized ++ str r1, [tmp1, #THREAD_JAVA_SP] ++ ++.normal_entry_synchronized_no_locals: ++ mov r2, tmp1 ++ mov r1, sl ++ add r0, tmp1, #THREAD_JAVA_STACK_BASE ++ bl build_normal ++@ add lr, sp, #192 ++@ str r0, [sp, #56] ++ mov tmp_vvv, r0 ++ ldr r3, [tmp1, #THREAD_TOP_ZERO_FRAME] ++ sub r0, r0, #72 ++@ str lr, [sp, #32] ++ mov istate, r0 ++@ str r0, [sp, #60] ++ str r3, [tmp_vvv, #0] ++ ldr r0, [tmp1, #THREAD_STACK_SIZE] ++ ldr r3, [tmp1, #THREAD_STACK_BASE] ++ ldr r2, [tmp1, #THREAD_JAVA_SP] ++ ldr r1, [tmp1, #THREAD_JAVA_STACK_BASE] ++ adrl ip, dispatch_init_adcon ++ rsb r3, r0, r3 ++ rsb r2, r1, r2 ++ ldrd r0, [ip] ++ rsb r3, r3, sp ++ cmp r2, #4096 ++ cmpge r3, #32768 ++ add r0, r0, ip ++ str tmp_vvv, [tmp1, #THREAD_TOP_ZERO_FRAME] ++ str tmp_vvv, [tmp1, #THREAD_LAST_JAVA_SP] ++ add dispatch, r1, r0 ++ blt .throw_stack_overflow ++ ldr stack, [istate, #ISTATE_STACK] ++ ldmib istate, {jpc, locals} @ phole ldm ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [r0, #24] ++ tst r3, #32 ++ bne normal_do_synchronization ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH 0 ++ ++do_execute_java_bytecodes_restore_locals_and_jpc: ++ ldr jpc, [istate, #ISTATE_BCP] ++do_execute_java_bytecodes_restore_locals: ++ ldr locals, [istate, #ISTATE_LOCALS] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH 0 ++ ++normal_do_synchronization: ++ tst r3, #8 ++ ldrne r3, [r0, #12] ++ ldreq sl, [locals, #0] ++ ldrne r2, [r3, #16] ++ ldr r3, [dispatch, #UseBiasedLocking_Address-XXX] ++ ldr ip, [istate, #ISTATE_MONITOR_BASE] ++ ldrne sl, [r2, #60] ++ str ip, [sp, #100] ++ ldrb r1, [r3] ++ cmp r1, #0 ++ beq .normal_do_synchronisation_1 ++ ldr tmp_xxx, [sl, #0] ++ and r3, tmp_xxx, #7 ++ cmp r3, #5 ++ beq .normal_do_synchronisation_4 ++.normal_do_synchronisation_1: ++ ldr r0, [sp, #100] ++ ldr r3, [sl, #0] ++ sub fp, r0, #8 ++ orr tmp_xxx, r3, #1 ++ str tmp_xxx, [r0, #-8] ++.normal_do_synchronisation_2: ++ ldr tmp_vvv, [sl, #0] ++ cmp tmp_xxx, tmp_vvv ++ bne .normal_do_synchronisation_3 ++ mov r0, tmp_xxx ++ mov r1, fp ++ mov r2, sl ++ mov r3, #0xffffffc0 ++ bic r3, r3, #0xf000 ++ blx r3 ++ cmp r0, #0 ++ bne .normal_do_synchronisation_2 ++.normal_do_synchronisation_3: ++ cmp tmp_xxx, tmp_vvv ++ beq do_execute_java_bytecodes_restore_locals ++ bic r1, tmp_xxx, #3 ++ ldr r2, [istate, #ISTATE_THREAD] ++ mov r0, r2 ++ ldr r3, [r2, #0] ++ ldr ip, [r3, #THREAD_VTABLE_IS_LOCK_OWNED] ++ blx ip ++ cmp r0, #0 ++ beq .handle_exception_28 ++ ldr r0, [sp, #100] ++ mov r3, #0 ++ str r3, [r0, #-8] ++ b do_execute_java_bytecodes_restore_locals ++.normal_do_synchronisation_4: ++ ldr r2, [sl, #4] ++ ldr r2, [r2, #104] ++ ldr r0, [istate, #ISTATE_THREAD] ++ eor r3, r2, r0 ++ eor r3, r3, tmp_xxx ++ bics ip, r3, #120 ++ beq do_execute_java_bytecodes_restore_locals ++ mov r0, r2 ++ mov r1, sl ++ mov r2, tmp_xxx ++ bl _ZN6Atomic11cmpxchg_ptrEPvPVvS0_ ++ cmp tmp_xxx, r0 ++ beq .normal_do_synchronisation_1 ++ b do_execute_java_bytecodes_restore_locals ++ ++# r2 = [jpc, #1] ++# r1 = [jpc, #2] ++ Opcode invokevirtual ++ add r0, constpool, r1, lsl #12 ++ ldr r2, [r0, r2, asl #4]! @ r0 = cache ++ and r2, r2, #0xff000000 ++ cmp r2, #182 << 24 ++ blne resolve_invokevirtual ++ ldr r3, [r0, #12] ++ mov r0, #opc_invokeresolved ++ tst r3, #67108864 ++ movne r0, #opc_invokevfinal ++ b rewrite_bytecode ++ ++ Opcode invokespecial ++ add r0, constpool, r1, lsl #12 ++ ldr r2, [r0, r2, asl #4]! @ r0 = cache ++ and r2, r2, #0x00ff0000 ++ cmp r2, #183 << 16 ++ blne resolve_invokespecial ++ mov r0, #opc_invokespecialresolved ++ b rewrite_bytecode ++ ++ Opcode invokestatic ++ add r0, constpool, r1, lsl #12 ++ ldr r2, [r0, r2, asl #4]! @ r0 = cache ++ and r2, r2, #0x00ff0000 ++ cmp r2, #184 << 16 ++ blne resolve_invokestatic ++ mov r0, #opc_invokestaticresolved ++ b rewrite_bytecode ++ ++# r2 = [jpc, #1] ++# r1 = [jpc, #2] ++ Opcode invokevfinal ++ str stack, [istate, #ISTATE_STACK] ++ add r0, constpool, r1, lsl #12 ++ str jpc, [istate, #ISTATE_BCP] ++ add r0, r2, asl #4 ++ ldr r3, [r0, #12] ++ ldr tmp1, [istate, #ISTATE_THREAD] ++ and r1, r3, #255 ++ ldr r2, [stack, r1, asl #2] ++ mov r1, #0 ++ cmp r2, #0 ++ beq null_ptr_exception ++ ++ ldr tmp2, [r0, #8] ++ ++ str tmp2, [istate, #ISTATE_CALLEE] ++ ldr ip, [tmp2, #76] ++ str r1, [tmp1, #THREAD_LAST_JAVA_SP] ++ str ip, [istate, #36] ++ ++ add stack, stack, #4 ++ str stack, [tmp1, #THREAD_JAVA_SP] ++ ++ ldr r3, [ip, #0] ++ adr lr, normal_entry ++ cmp r3, lr ++ beq fast_normal_entry ++ adr lr, native_entry ++ cmp r3, lr ++ beq fast_native_entry ++ adr lr, accessor_entry ++ cmp r3, lr ++ beq fast_accessor_entry ++ b normal_dispatch_and_return ++ ++# r2 = [jpc, #1] ++# r1 = [jpc, #2] ++ Opcode invokeresolved ++ str stack, [istate, #ISTATE_STACK] ++ add r0, constpool, r1, lsl #12 ++ str jpc, [istate, #ISTATE_BCP] ++ add r0, r0, r2, asl #4 ++ ldr r3, [r0, #12] ++ ldr tmp1, [istate, #ISTATE_THREAD] ++ and r1, r3, #255 ++ ldr r2, [stack, r1, asl #2] ++ mov r1, #0 ++#ifndef HW_NULL_PTR_CHECK ++ cmp r2, #0 ++ beq null_ptr_exception_jpc_0 ++#endif ++ ++ ldr tmp2, [r0, #8] ++.abortentry104: ++ ldr r3, [r2, #4] ++ add r3, r3, tmp2, lsl #2 ++ ldr tmp2, [r3, #304] ++ ++ str tmp2, [istate, #ISTATE_CALLEE] ++ ldr ip, [tmp2, #76] ++ str r1, [tmp1, #THREAD_LAST_JAVA_SP] ++ str ip, [istate, #36] ++ ++ add stack, stack, #4 ++ str stack, [tmp1, #THREAD_JAVA_SP] ++ ++ ldr r3, [ip, #0] ++ adr lr, normal_entry ++ cmp r3, lr ++ beq fast_normal_entry ++ adr lr, native_entry ++ cmp r3, lr ++ beq fast_native_entry ++ adr lr, accessor_entry ++ cmp r3, lr ++ beq fast_accessor_entry ++ ++normal_dispatch_and_return: ++ mov r0, tmp2 ++ mov r1, ip ++ ldr r2, [istate, #ISTATE_THREAD] ++ blx r3 ++ ++ ldr ip, [istate, #ISTATE_THREAD] ++ ldr r3, [ip, #THREAD_JAVA_SP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ sub r3, r3, #4 ++ str r3, [istate, #ISTATE_STACK] ++ ++ ldr r1, [ip, #THREAD_TOP_ZERO_FRAME] ++ add r2, r2, #4 ++ str r2, [ip, #THREAD_JAVA_SP] ++ str r1, [ip, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r3, [r0, #4] ++ DISPATCH_START 3 ++ ldr locals, [istate, #ISTATE_LOCALS] ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ add constpool, constpool, #CONST_POOL_OFFSET ++ cmp r3, #0 ++ DISPATCH_NEXT ++ bne invokespecial_exception_fix ++ DISPATCH_FINISH ++ ++ Opcode invokestaticresolved ++ str stack, [istate, #ISTATE_STACK] ++ add r0, constpool, r1, lsl #12 ++ str jpc, [istate, #ISTATE_BCP] ++ add r0, r2, asl #4 ++ ++ ldr tmp2, [r0, #4] ++ mov r1, #0 ++ str tmp2, [istate, #ISTATE_CALLEE] ++ ldr r3, [tmp2, #76] ++ ldr tmp1, [istate, #ISTATE_THREAD] ++ str r3, [istate, #36] ++ str r1, [tmp1, #THREAD_LAST_JAVA_SP] ++ ++ add stack, stack, #4 ++ str stack, [tmp1, #THREAD_JAVA_SP] ++ ++ ldr ip, [istate, #36] ++ ldr r3, [ip, #0] ++ adr lr, normal_entry ++ cmp r3, lr ++ beq fast_normal_entry ++ adr lr, native_entry ++ cmp r3, lr ++ beq fast_native_entry ++ adr lr, accessor_entry ++ cmp r3, lr ++ beq fast_accessor_entry ++ b normal_dispatch_and_return ++ ++ Opcode invokespecialresolved ++ str stack, [istate, #ISTATE_STACK] ++ add r0, constpool, r1, lsl #12 ++ str jpc, [istate, #ISTATE_BCP] ++ add r0, r2, asl #4 ++ ++ ldr r3, [r0, #12] ++ ldr tmp1, [istate, #ISTATE_THREAD] ++ and r3, r3, #255 ++ ldr r2, [stack, r3, asl #2] ++ mov r1, #0 ++ cmp r2, #0 ++ beq null_ptr_exception ++ ++ ldr tmp2, [r0, #4] ++ ++ str tmp2, [istate, #ISTATE_CALLEE] ++ ldr ip, [tmp2, #76] ++ str r1, [tmp1, #THREAD_LAST_JAVA_SP] ++ str ip, [istate, #36] ++ ++ add stack, stack, #4 ++ str stack, [tmp1, #THREAD_JAVA_SP] ++ ++ ldr r3, [ip, #0] ++ adr lr, normal_entry ++ cmp r3, lr ++ beq fast_normal_entry ++ adr lr, native_entry ++ cmp r3, lr ++ beq fast_native_entry ++ adr lr, accessor_entry ++ cmp r3, lr ++ beq fast_accessor_entry ++ b normal_dispatch_and_return ++ ++ ALIGN_CODE ++accessor_entry: ++ adrl ip, dispatch_init_adcon ++ ldr r3, [ip] ++ add r3, r3, ip ++ ldr ip, [ip, #12] ++ ldr ip, [r3, ip] ++ ldr r1, [r0, #8] ++ ldr ip, [ip, #0] ++ ldrb r3, [r1, #50] ++ ldrb r1, [r1, #51] ++ cmp ip, #0 ++ ldr ip, [r0, #12] ++ bne normal_entry ++ ldr ip, [ip, #12] ++ orr r3, r3, r1, lsl #8 @ r3 = index ++ ++ add r1, ip, #16 ++ ldr r3, [r1, r3, lsl #4]! @ r1 = cache, r3 = flags ++ ldr ip, [r2, #THREAD_JAVA_SP] @ ip == stack ++ and r3, r3, #0x00ff0000 ++ cmp r3, #180 << 16 ++ ldr r3, [ip, #0] ++ bne normal_entry ++ ++ cmp r3, #0 ++ beq normal_entry ++ ++ ldr r0, [r1, #12] ++ ldr r1, [r1, #8] ++ movs r0, r0, lsr #29 ++ bls accessor_non_w ++ ++ ldr r0, [r3, r1] ++ str r0, [ip, #0] ++ bx lr ++ ++ ALIGN_CODE ++normal_entry: ++ adrl ip, dispatch_init_adcon ++ stmfd sp!, {regset, lr} ++ mov tmp2, r0 ++ ldrd r0, [ip] ++ sub sp, sp, #220 ++ ++ mov istate, #ISTATE_THREAD ++ add dispatch, ip, r3 ++ ++ add r0, r0, ip ++ add dispatch, r1, r0 ++ ++ ldrh r1, [tmp2, #40] ++ ldrh r3, [tmp2, #42] ++ mov tmp1, r2 ++ ++ rsb tmp_xxx, r3, r1 ++ ldr stack, [tmp1, #THREAD_JAVA_SP] ++ movs tmp_xxx, tmp_xxx, asr #1 ++ mov r0, #0 ++ mov ip, #0 ++ strcs r0, [stack, #-4]! ++.zero_locals: ++ subs tmp_xxx, tmp_xxx, #1 ++ stmgedb stack!, {r0, ip} ++ bgt .zero_locals ++ ++@ r11 = thread ++@ r10 = method ++ ldrh r2, [r10, #38] ++ mvn tmp_vvv, #0x540 @ form 0xCAFEBABF ++ bic tmp_vvv, tmp_vvv, #0x14000 ++ bic tmp_vvv, tmp_vvv, #0x35000000 ++ str istate, [stack, #-76 + ISTATE_SAVED_ISTATE] ++ sub istate, stack, #76 @ istate == istate ++ mov r7, istate @ monitor_base == istate ++ sub r5, istate, r2, lsl #2 ++ str r5, [tmp1, #THREAD_JAVA_SP] @ drop stack now ++ sub r5, r5, #4 @ stack limit = istate - stackwords - 4 ++ mov r3, istate ++ stmdb stack, {r0, r3, r5, r7, istate, tmp_vvv, ip} @ ++ ++ str ip, [istate, #ISTATE_CALLEE] ++ str ip, [istate, #ISTATE_MDX] ++ str ip, [istate, #ISTATE_PREV_LINK] ++ ++ sub locals, stack, #4 ++ add locals, locals, r1, lsl #2 @ locals == r7 ++ ++ ldr jpc, [r10, #8] @ jpc == r5 ++ ldr constpool, [r10, #12] @ ++ ++ sub stack, istate, #ISTATE_BCP @ stack == r4 ++ str stack, [istate, #ISTATE_STACK] ++ ++ add jpc, jpc, #48 ++ ++ ldr constpool, [constpool, #12] ++ ++ str tmp1, [istate, #ISTATE_THREAD] ++ stmib istate, {jpc, locals, constpool, r10} ++ ++ add constpool, constpool, #CONST_POOL_OFFSET ++ ++ str stack, [istate, #ISTATE_STACK] ++ ++ add tmp2, istate, #72 ++ ++ ldr r3, [tmp1, #THREAD_TOP_ZERO_FRAME] ++ str r3, [istate, #72] @ Fill in prev_link ++ ldr r0, [tmp1, #THREAD_STACK_SIZE] ++ ldr r3, [tmp1, #THREAD_STACK_BASE] ++ ldr r2, [tmp1, #THREAD_JAVA_SP] ++ ldr r1, [tmp1, #THREAD_JAVA_STACK_BASE] ++ rsb r3, r0, r3 ++ DISPATCH_START 0 ++ rsb r2, r1, r2 ++ rsb r3, r3, sp ++ DISPATCH_NEXT ++ cmp r2, #4096 ++ cmpge r3, #32768 ++ DISPATCH_NEXT ++ str tmp2, [tmp1, #THREAD_TOP_ZERO_FRAME] ++ str tmp2, [tmp1, #THREAD_LAST_JAVA_SP] ++ DISPATCH_NEXT ++ blt .throw_stack_overflow ++ DISPATCH_FINISH ++ ++ ALIGN_CODE ++native_entry: ++ adrl ip, dispatch_init_adcon ++ stmfd sp!, {r3, r4, r5, r7, r9, r10, r11, lr} ++@--- ++ ldrd dispatch, [ip] ++ mov r11, r0 ++ ldrh r1, [r11, #42] ++ add dispatch, dispatch, ip ++ ldr r4, [r2, #THREAD_JAVA_SP] ++ add dispatch, dispatch, r7 ++ ldr ip, [r2, #THREAD_TOP_ZERO_FRAME] ++ mov r0, #0 ++ mvn r10, #0x540 @ form 0xCAFEBABF in r10 ++ bic r10, r10, #0x14000 ++ bic r10, r10, #0x35000000 ++ sub r9, r4, #76 ++ mov r7, r9 ++ str r9, [r2, #THREAD_JAVA_SP] @ drop stack ++ sub r5, r9, #4 @ stack limit = r9 - 4 ++ mov r3, r9 ++ stmdb r4, {r0, r3, r5, r7, r9, r10, ip} ++ str r0, [r9, #ISTATE_CALLEE] ++ str r0, [r9, #ISTATE_PREV_LINK] ++ str r0, [r9, #ISTATE_MSG] ++ str r0, [r9, #ISTATE_MDX] ++ sub r7, r4, #4 ++ add r7, r7, r1, lsl #2 ++ mov r5, #0 ++ ldr r10, [r11, #12] ++ ldr r10, [r10, #12] ++ stmia r9, {r2, r5, r7, r10, r11} ++ add r0, r9, #72 ++ mov r9, r2 ++@--- ++.LPIC18_native_entry: ++ ldr r2, [r9, #THREAD_STACK_SIZE] ++ ldr r3, [r9, #THREAD_STACK_BASE] ++ rsb r3, r2, r3 ++ rsb r3, r3, sp ++ cmp r3, #4096 ++ str r0, [r9, #THREAD_TOP_ZERO_FRAME] ++ blt .native_entry_throw_stack_overflow ++ ldr r5, [r11, #84] ++ cmp r5, #0 ++ bne .native_entry_got_handleraddr ++ str r0, [r9, #THREAD_LAST_JAVA_SP] ++ mov r0, r9 ++ mov r1, r11 ++ bl _ZN18InterpreterRuntime19prepare_native_callEP10JavaThreadP13methodOopDesc ++ ldr r1, [r9, #THREAD_PENDING_EXC] ++ str r5, [r9, #THREAD_LAST_JAVA_SP] ++ cmp r1, #0 ++ bne .native_entry_exception ++ ldr r5, [r11, #84] ++.native_entry_got_handleraddr: ++ ldr r2, [dispatch, #InterpreterRuntime_slow_signature_handler_Address-XXX] ++ cmp r5, r2 ++ bne .native_entry_get_handler ++ ldr r3, [r9, #THREAD_TOP_ZERO_FRAME] ++ mov r2, #0 ++ mov r0, r9 ++ str r3, [r9, #THREAD_LAST_JAVA_SP] ++ mov r3, r2 ++ mov r1, r11 ++ bl _ZN18InterpreterRuntime22slow_signature_handlerEP10JavaThreadP13methodOopDescPiS4_ ++ ldr r1, [r9, #THREAD_PENDING_EXC] ++ mov r3, #0 ++ cmp r1, #0 ++ str r3, [r9, #THREAD_LAST_JAVA_SP] ++ mov r5, r0 ++ bne .native_entry_exception ++.native_entry_get_handler: ++ ++ sub ip, r7, r4 ++ mov ip, ip, asr #2 ++ add lr, ip, #4 ++ bic lr, lr, #1 ++ ++ add r3, r4, #ISTATE_OOP_TEMP-76 ++ ++ mov r4, sp ++ sub sp, sp, #16 ++ sub sp, sp, lr, lsl #2 ++ mov lr, sp ++ ++ add r1, r5, #24 ++ ++ add r2, r9, #THREAD_JNI_ENVIRONMENT ++ str r2, [lr], #4 ++ add r1, r1, #4 ++ ++ ldr r2, [r11, #24] ++ tst r2, #8 ++ beq .do_copy_args ++ ++ ldr r2, [r11, #12] ++ ldr r2, [r2, #16] ++ ldr r2, [r2, #60] ++ str r2, [r3] ++ ++ str r3, [lr], #4 ++ add r1, r1, #4 ++ ++.do_copy_args: ++ cmp ip, #0 ++ blt .no_args ++ ++.copy_args: ++ ldr r0, [r1], #4 ++ ldrh r3, [r0, #6] ++ cmp r3, #FFI_TYPE_DOUBLE ++ cmpne r3, #FFI_TYPE_SINT64 ++ beq .copy_long ++ ++ cmp r3, #FFI_TYPE_POINTER ++ beq .copy_ptr ++ ++ ldr r2, [r7], #-4 ++ str r2, [lr], #4 ++ subs ip, ip, #1 ++ bge .copy_args ++ b .no_args ++ ++.copy_long: ++ tst lr, #4 ++ addne lr, lr, #4 ++ ldmda r7!, {r2, r3} ++ stmia lr!, {r2, r3} ++ subs ip, ip, #2 ++ bge .copy_args ++ b .no_args ++ ++.copy_ptr: ++ ldr r2, [r7], #-4 ++ cmp r2, #0 ++ addne r2, r7, #4 ++ str r2, [lr], #4 ++ subs ip, ip, #1 ++ bge .copy_args ++ ++.no_args: ++ ldr r0, [r9, #THREAD_TOP_ZERO_FRAME] ++ str r0, [r9, #THREAD_LAST_JAVA_SP] ++ ++ mov r2, #_thread_in_native ++ str r2, [r9, #THREAD_STATE] ++ ++ ldr ip, [r11, #80] ++ ldrh r11, [r11, #42] ++ ldmia sp!, {r0, r1, r2, r3} ++ blx ip ++ ++ mov sp, r4 ++ ++ mov r3, #_thread_in_native_trans ++ str r3, [r9, #THREAD_STATE] ++ ++.L206_native_entry: ++ ldr r3, [dispatch, #SafePointSynchronize_state_Address-XXX] ++ ldr r3, [r3, #0] ++ cmp r3, #0 ++ ldreq r3, [r9, #THREAD_SUSPEND_FLAGS] ++ cmpeq r3, #0 ++ bne .native_entry_do_special ++ ++.native_entry_do_return: ++ mov r3, #_thread_in_Java ++ mov r2, #0 ++ str r3, [r9, #THREAD_STATE] ++ str r2, [r9, #THREAD_LAST_JAVA_SP] ++ ++ add r2, r5, #24 ++ ldr r3, [r5, #4] ++ ++ ldr r5, [r9, #THREAD_TOP_ZERO_FRAME] ++ ldr ip, [r5], #4 ++ str ip, [r9, #THREAD_TOP_ZERO_FRAME] ++ ++ add r5, r5, r11, lsl #2 ++ ++ ldr ip, [r2, r3, asl #2] ++ ldrh r2, [ip, #6] ++ ++ cmp r2, #FFI_TYPE_POINTER ++ beq .native_return_obj ++ ++ ldr ip, [r9, #THREAD_ACTIVE_HANDLES] ++ mov r3, #0 @ ECN: OK, not an obj, save to clear handles ++ str r3, [ip, #128] ++ ++ cmp r2, #FFI_TYPE_VOID ++ beq .native_return_void ++ cmp r2, #FFI_TYPE_FLOAT ++ cmpne r2, #FFI_TYPE_SINT32 ++ beq .native_return_w ++ cmp r2, #FFI_TYPE_DOUBLE ++ cmpne r2, #FFI_TYPE_SINT64 ++ beq .native_return_dw ++ ++ cmp r2, #FFI_TYPE_UINT16 ++ beq .native_return_char ++ cmp r2, #FFI_TYPE_SINT16 ++ beq .native_return_short ++ cmp r2, #FFI_TYPE_BOOL ++ beq .native_return_bool ++ cmp r2, #FFI_TYPE_SINT8 ++ beq .native_return_byte ++ ++ str r0, [r0, -r0] ++ ++.native_return_obj: ++ cmp r0, #0 ++ ldrne r0, [r0] ++ str r0, [r5, #-4]! ++ str r5, [r9, #THREAD_JAVA_SP] ++ ldr r2, [r9, #THREAD_ACTIVE_HANDLES] ++ mov r3, #0 @ ECN: Now that the object is safe on the Java stack ++ str r3, [r2, #128] @ stack, with the Thread SP updated, clear the active_handles. ++ ldmfd sp!, {r3, r4, r5, r7, r9, r10, r11, pc} ++.native_return_short: ++ mov r0, r0, lsl #16 ++ mov r0, r0, asr #16 ++.native_return_w: ++ str r0, [r5, #-4]! ++.native_return_void: ++ str r5, [r9, #THREAD_JAVA_SP] ++ ldmfd sp!, {r3, r4, r5, r7, r9, r10, r11, pc} ++.native_return_dw: ++ stmdb r5!, {r0, r1} ++ str r5, [r9, #THREAD_JAVA_SP] ++ ldmfd sp!, {r3, r4, r5, r7, r9, r10, r11, pc} ++.native_return_byte: ++ mov r0, r0, lsl #24 ++ mov r0, r0, asr #24 ++ str r0, [r5, #-4]! ++ str r5, [r9, #THREAD_JAVA_SP] ++ ldmfd sp!, {r3, r4, r5, r7, r9, r10, r11, pc} ++.native_return_char: ++ mov r0, r0, lsl #16 ++ mov r0, r0, lsr #16 ++ str r0, [r5, #-4]! ++ str r5, [r9, #THREAD_JAVA_SP] ++ ldmfd sp!, {r3, r4, r5, r7, r9, r10, r11, pc} ++.native_return_bool: ++ ands r0, r0, #255 ++ movne r0, #1 ++ str r0, [r5, #-4]! ++ str r5, [r9, #THREAD_JAVA_SP] ++ ldmfd sp!, {r3, r4, r5, r7, r9, r10, r11, pc} ++ ++.native_entry_throw_stack_overflow: ++ str r0, [r9, #THREAD_LAST_JAVA_SP] ++ mov r0, r9 ++ bl _ZN18InterpreterRuntime24throw_StackOverflowErrorEP10JavaThread ++ mov r3, #0 ++ ldr r1, [r9, #THREAD_PENDING_EXC] ++ str r3, [r9, #THREAD_LAST_JAVA_SP] ++.native_entry_exception: ++ ldr r5, [r9, #THREAD_TOP_ZERO_FRAME] ++ ldr r3, [r5], #4 ++ str r3, [r9, #THREAD_TOP_ZERO_FRAME] ++ ++ ldrh r3, [r11, #42] ++ add r5, r5, r3, lsl #2 ++ str r5, [r9, #THREAD_JAVA_SP] ++ ++ ldmfd sp!, {r3, r4, r5, r7, r9, r10, r11, pc} ++.native_entry_do_special: ++ stmdb sp!, {r0, r1} ++ mov r0, r9 ++ bl _ZN10JavaThread40check_special_condition_for_native_transEPS_ ++ ldmia sp!, {r0, r1} ++ b .native_entry_do_return ++ ++ ALIGN_CODE ++fast_normal_entry: ++ ldrh r0, [tmp2, #40] ++ mov r1, #0 ++ ldrh r3, [tmp2, #42] ++ mvn ip, #0x540 @ form 0xCAFEBABF in ip ++ ldrh r2, [tmp2, #38] ++ bic ip, ip, #0x35000000 ++ sub r7, r0, r3 ++ subs r5, r7, #2 ++ tst r7, #1 ++ bic ip, ip, #0x14000 ++ strne r1, [stack, #-4]! ++ bcc 3f ++1: ++ str r1, [stack, #-4] ++ str r1, [stack, #-8]! ++ subs r5, r5, #2 ++ bcs 1b ++3: ++ ldr lr, [tmp1, #THREAD_TOP_ZERO_FRAME] ++ str istate, [stack, #-76 + ISTATE_SAVED_ISTATE] ++ sub istate, stack, #76 @ istate == istate ++ sub r2, istate, r2, lsl #2 ++ str r1, [stack, #-76 + ISTATE_MDX] ++ mov r7, istate @ monitor_base == istate ++ str r2, [tmp1, #THREAD_JAVA_SP] ++ sub r5, r2, #4 @ stack limit = istate - stackwords - 4 ++ mov r3, istate ++ stmdb stack, {r1, r3, r5, r7, istate, ip, lr} @ ++ sub locals, stack, #4 ++ add locals, locals, r0, lsl #2 @ locals == r7 ++ ldr r3, [tmp1, #THREAD_JAVA_STACK_BASE] ++ sub stack, istate, #4 @ stack == r4 ++ ldr jpc, [tmp2, #8] ++ ldr constpool, [tmp2, #12] @ ++ str stack, [istate, #ISTATE_STACK] ++ add ip, istate, #72 ++ DISPATCH_START 48 ++ mov lr, #0 @ ECN: FIXME - r1 already 0 ++ ldr constpool, [constpool, #12] ++ str ip, [tmp1, #THREAD_TOP_ZERO_FRAME] ++ rsb r2, r3, r2 ++ str ip, [tmp1, #THREAD_LAST_JAVA_SP] ++ DISPATCH_NEXT ++ str tmp1, [istate, #ISTATE_THREAD] ++ stmib istate, {jpc, locals, constpool, r10} ++ DISPATCH_NEXT ++ cmp r2, #4096 ++ add constpool, constpool, #CONST_POOL_OFFSET ++ str lr, [istate, #ISTATE_PREV_LINK] ++ blt .throw_stack_overflow ++ DISPATCH_NEXT ++ str lr, [istate, #ISTATE_CALLEE] ++ DISPATCH_FINISH ++ ++handle_return: ++ ++ ldr tmp2, [istate, #ISTATE_MONITOR_BASE] @ tmp2 = base ++ ++ ldr tmp1, [istate, #ISTATE_STACK_BASE] @ tmp1 = end ++ ldr tmp_xxx, [istate, #ISTATE_THREAD] ++ ++ cmp tmp1, tmp2 ++ blcc return_check_monitors ++ ++ mov r3, #0 ++ ldrb ip, [jpc, #0] ++ ++ ldr r2, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ str r3, [tmp_xxx, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_METHOD] ++ ldr r3, [r2, #0] ++ ldrh r0, [r0, #40] ++ add r1, r2, #4 ++ str r3, [tmp_xxx, #THREAD_TOP_ZERO_FRAME] ++ ++ add r1, r1, r0, lsl #2 ++ ++ cmp ip, #opc_lreturn ++ cmpne ip, #opc_dreturn ++ ldreq r0, [stack, #8] ++ streq r0, [r1, #-4]! ++ cmpne ip, #opc_ireturn ++ cmpne ip, #opc_freturn ++ cmpne ip, #opc_areturn ++ ldreq r0, [stack, #4] ++ streq r0, [r1, #-4]! ++ ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ ++ str r1, [tmp_xxx, #THREAD_JAVA_SP] ++ ++ cmp istate, #ISTATE_THREAD ++ ++ addeq sp, sp, #220 ++ ldmeqfd sp!, {regset, pc} ++ ++fast_handle_return: ++ ldr ip, [istate, #ISTATE_THREAD] ++ ldr r3, [ip, #THREAD_JAVA_SP] ++ ldr r2, [istate, #ISTATE_STACK_LIMIT] ++ sub r3, r3, #4 ++ str r3, [istate, #ISTATE_STACK] ++ ++ ldr r1, [ip, #THREAD_TOP_ZERO_FRAME] ++ add r2, r2, #4 ++ str r2, [ip, #THREAD_JAVA_SP] ++ str r1, [ip, #THREAD_LAST_JAVA_SP] ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr jpc, [istate, #ISTATE_BCP] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ DISPATCH_START 3 ++ ldr constpool, [istate, #ISTATE_CONSTANTS] ++ ldr locals, [istate, #ISTATE_LOCALS] ++ DISPATCH_NEXT ++ add constpool, constpool, #CONST_POOL_OFFSET ++ DISPATCH_NEXT ++ cmp r3, #0 ++ DISPATCH_NEXT ++ bne return_exception ++ DISPATCH_FINISH ++ ++normal_return: ++ add sp, sp, #220 ++ str stack, [tmp_xxx, #THREAD_JAVA_SP] ++ ldmfd sp!, {regset, pc} ++ ++return_check_monitors: ++ ldr r2, [istate, #ISTATE_METHOD] ++ ldr r0, [r2, #24] ++ tst r0, #1<<5 ++ subne tmp2, tmp2, #8 ++ cmp tmp1, tmp2 ++ bcs .return_unlock ++1: ++ ldr r3, [tmp1, #4] ++ cmp r3, #0 ++ bne return_throw_illegal_monitor_state ++ add tmp1, tmp1, #8 ++ cmp tmp1, tmp2 ++ bcc 1b ++ ++.return_unlock: ++ tst r0, #1<<5 ++ bxeq lr ++ ++ ldr tmp1, [tmp2, #4] @ base->obj == NULL ++ cmp tmp1, #0 ++ beq return_throw_illegal_monitor_state ++ ++ ldr r0, [tmp2, #0] @ r0 = header ++ mov r3, #0 ++ cmp r0, #0 ++ str r3, [tmp2, #4] @ base->obj = NULL ++ bxeq lr ++ ++ mov tmp_vvv, lr ++ mov r1, tmp1 ++ mov r2, tmp2 ++ bl _ZN6Atomic11cmpxchg_ptrEPvPVvS0_ ++ cmp tmp2, r0 ++ bxeq tmp_vvv ++ ++ str tmp1, [tmp2, #4] ++ add r0, sp, #144 ++ mov r1, tmp_xxx ++ bl _ZN10HandleMark10initializeEP6Thread ++ mov r1, tmp2 ++ mov r0, tmp_xxx ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime11monitorexitEP10JavaThreadP15BasicObjectLock ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr jpc, [istate, #ISTATE_BCP] ++ add r0, sp, #144 ++ bl _ZN10HandleMarkD1Ev ++ ldr r3, [tmp_xxx, #THREAD_PENDING_EXC] ++ cmp r3, #0 ++ bne handle_exception ++ bx tmp_vvv ++ ++return_throw_illegal_monitor_state: ++ add r0, sp, #144 ++ mov r1, tmp_xxx ++ bl _ZN10HandleMark10initializeEP6Thread ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ mov r0, tmp_xxx ++ bl _ZN18InterpreterRuntime37throw_illegal_monitor_state_exceptionEP10JavaThread ++ add r0, sp, #144 ++ bl _ZN10HandleMarkD1Ev ++ b handle_exception_with_bcp ++ ++@ ---------------------------------------------------------------------------------------- ++.throw_stack_overflow: ++ ldr r0, [istate, #ISTATE_THREAD] ++ bl _ZN18InterpreterRuntime24throw_StackOverflowErrorEP10JavaThread ++ ldr r3, [istate, #ISTATE_THREAD] ++ ldr ip, [istate, #ISTATE_THREAD] ++ ldr r2, [r3, #THREAD_TOP_ZERO_FRAME] ++ mov r3, #0 ++ add r1, r2, #4 ++ str r3, [ip, #THREAD_LAST_JAVA_SP] ++ str r1, [ip, #THREAD_JAVA_SP] ++ ldr r3, [r2, #0] ++ str r3, [ip, #THREAD_TOP_ZERO_FRAME] ++ ldr r2, [istate, #ISTATE_METHOD] ++ ldrh r3, [r2, #40] ++ mov r3, r3, asl #2 ++ add r1, r1, r3 ++ str r1, [ip, #THREAD_JAVA_SP] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ cmp istate, #ISTATE_THREAD ++ addeq sp, sp, #220 ++ ldmeqfd sp!, {regset, pc} ++ b fast_handle_return ++ ++handle_exception_do_not_unlock: ++ mov r3, #1 ++ strb r3, [r2, #THREAD_DO_NOT_UNLOCK] ++ b handle_exception ++ ++raise_exception: ++ adr r1, null_str ++raise_exception_with_msg: ++ str r1, [sp] ++ ldr r3, [dispatch, #VmSymbols_symbols_Address-XXX] ++ ldr r3, [r3, r0, lsl #2] ++ ldr tmp1, [istate, #ISTATE_THREAD] ++ str jpc, [istate, #ISTATE_BCP] ++ str stack, [istate, #ISTATE_STACK] ++ mov ip, #_thread_in_vm ++ str ip, [tmp1, #THREAD_STATE] ++ mov r2, #99 ++ ldr r0, [istate, #ISTATE_THREAD] ++ adrl r1, bytecode_interpreter_str ++ bl _ZN10Exceptions10_throw_msgEP6ThreadPKciP13symbolOopDescS3_ ++ mov r0, sp ++ str tmp1, [sp] ++ bl _ZN18ThreadInVMfromJavaD1Ev ++ b handle_exception_with_bcp ++null_str: ++ .byte 0 ++ ALIGN_WORD ++ ++invokespecial_exception_fix: ++invokestatic_exception_fix: ++invokevirtual_exception_fix: ++return_exception: ++ sub jpc, jpc, #3 ++invokespecial_exception: ++invokestatic_exception: ++invokevirtual_exception: ++putfield_exception: ++getfield_exception: ++handle_exception: ++ str jpc, [istate, #ISTATE_BCP] ++handle_exception_with_bcp: ++ ldr stack, [istate, #ISTATE_STACK_BASE] ++ sub stack, stack, #4 ++ str stack, [istate, #ISTATE_STACK] ++ add r1, sp, #168 ++ str r1, [sp, #36] ++ ldr r0, [istate, #ISTATE_THREAD] ++handle_exception_1: ++ ldr sl, [r0, #4] ++ str r0, [sp, #124] ++ cmp sl, #0 ++ moveq tmp_yyy, sl ++ beq .handle_exception_3 ++ ldr r0, [r0, #THREAD_HANDLE_AREA] ++ ldr r1, [r0, #8] ++ ldr r3, [r0, #12] ++ add r2, r1, #4 ++ cmp r2, r3 ++ movls r3, r1 ++ strls r2, [r0, #8] ++ bls .handle_exception_2 ++ mov r1, #4 ++ bl _ZN5Arena4growEj ++ mov r3, r0 ++.handle_exception_2: ++ str sl, [r3, #0] ++ mov tmp_yyy, r3 ++ ldr r0, [istate, #ISTATE_THREAD] ++.handle_exception_3: ++ mov r1, r0 ++ ldr r0, [sp, #36] ++ bl _ZN10HandleMark10initializeEP6Thread ++ ldr r0, [istate, #ISTATE_THREAD] ++ bl _ZN12ThreadShadow23clear_pending_exceptionEv ++ ldr r1, [istate, #ISTATE_STACK_BASE] ++ ldr r0, [istate, #ISTATE_THREAD] ++ cmp tmp_yyy, #0 ++ sub stack, r1, #4 ++ moveq r1, tmp_yyy ++ str stack, [istate, #ISTATE_STACK] ++ ldrne r1, [tmp_yyy, #0] ++ bl _ZN18InterpreterRuntime31exception_handler_for_exceptionEP10JavaThreadP7oopDesc ++ ldr stack, [istate, #ISTATE_STACK] ++ mov sl, r0 ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ cmp r3, #0 ++ beq .handle_exception_5 ++ ldr r0, [sp, #36] ++ bl _ZN10HandleMarkD1Ev ++ ldr r1, [sp, #124] ++ ldr tmp_yyy, [r1, #THREAD_LAST_HANDLE_MARK] ++ ldr r0, [tmp_yyy, #8] ++ ldr sl, [tmp_yyy, #4] ++ ldr r3, [r0, #0] ++ cmp r3, #0 ++ beq .handle_exception_4 ++ bl _ZN5Chunk9next_chopEv ++ ldr r0, [tmp_yyy, #8] ++.handle_exception_4: ++ str r0, [sl, #4] ++ ldr r3, [tmp_yyy, #12] ++ str r3, [sl, #8] ++ ldr r2, [tmp_yyy, #16] ++ str r2, [sl, #12] ++ ldr r0, [istate, #ISTATE_THREAD] ++ b handle_exception_1 ++.handle_exception_5: ++ ldr tmp_yyy, [r0, #THREAD_VM_RESULT] ++ cmp tmp_yyy, #0 ++ moveq r1, tmp_yyy ++ beq .handle_exception_7 ++ ldr r3, [dispatch, #ThreadLocalStorage_thread_index-XXX] ++ ldr r0, [r3] ++ bl pthread_getspecific ++ ldr r0, [r0, #THREAD_HANDLE_AREA] ++ ldr r1, [r0, #8] ++ ldr r3, [r0, #12] ++ add r2, r1, #4 ++ cmp r2, r3 ++ movls r3, r1 ++ strls r2, [r0, #8] ++ bls .handle_exception_6 ++ mov r1, #4 ++ bl _ZN5Arena4growEj ++ mov r3, r0 ++.handle_exception_6: ++ str tmp_yyy, [r3, #0] ++ mov r1, r3 ++ ldr r0, [istate, #ISTATE_THREAD] ++.handle_exception_7: ++ cmp sl, #0 ++ mov r3, #0 ++ str r3, [r0, #THREAD_VM_RESULT] ++ blt .handle_exception_9 ++ cmp r1, r3 ++ moveq r0, r1 ++ ldrne r0, [r1, #0] ++ str r0, [stack, #0] ++ sub stack, stack, #4 ++ ldr r3, [istate, #ISTATE_METHOD] ++ ldr r0, [sp, #36] ++ ldr r2, [r3, #8] ++ add r2, r2, #48 ++ add ip, r2, sl ++ str ip, [istate, #ISTATE_BCP] ++ bl _ZN10HandleMarkD1Ev ++ ldr r1, [sp, #124] ++ ldr tmp_yyy, [r1, #THREAD_LAST_HANDLE_MARK] ++ ldr r0, [tmp_yyy, #8] ++ ldr sl, [tmp_yyy, #4] ++ ldr r3, [r0, #0] ++ cmp r3, #0 ++ beq .handle_exception_8 ++ bl _ZN5Chunk9next_chopEv ++ ldr r0, [tmp_yyy, #8] ++.handle_exception_8: ++ str r0, [sl, #4] ++ ldr r3, [tmp_yyy, #12] ++ str r3, [sl, #8] ++ ldr r2, [tmp_yyy, #16] ++ str r2, [sl, #12] ++ b do_execute_java_bytecodes_restore_locals_and_jpc ++.handle_exception_9: ++ cmp r1, #0 ++ ldr r0, [istate, #ISTATE_THREAD] ++ mov r2, #0 ++ ldrne r1, [r1, #0] ++ mov r3, r2 ++ bl _ZN12ThreadShadow21set_pending_exceptionEP7oopDescPKci ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr tmp_yyy, [r0, #4] ++ cmp tmp_yyy, #0 ++ streq tmp_yyy, [sp, #48] ++ beq .handle_exception_11 ++ ldr r0, [r0, #THREAD_HANDLE_AREA] ++ ldr r1, [r0, #8] ++ ldr r3, [r0, #12] ++ add r2, r1, #4 ++ cmp r2, r3 ++ movls r3, r1 ++ strls r2, [r0, #8] ++ bls .handle_exception_10 ++ mov r1, #4 ++ bl _ZN5Arena4growEj ++ mov r3, r0 ++.handle_exception_10: ++ str tmp_yyy, [r3, #0] ++ ldr r0, [istate, #ISTATE_THREAD] ++ str r3, [sp, #48] ++.handle_exception_11: ++ bl _ZN12ThreadShadow23clear_pending_exceptionEv ++ mov r1, #0 ++ ldr r0, [istate, #ISTATE_THREAD] ++ str r1, [sp, #44] ++ ldrb r3, [r0, #THREAD_DO_NOT_UNLOCK] @ zero_extendqisi2 ++ cmp r3, r1 ++ beq .handle_exception_15 ++ strb r1, [r0, #THREAD_DO_NOT_UNLOCK] ++ ldr r0, [istate, #ISTATE_THREAD] ++.handle_exception_12: ++ ldr r1, [sp, #48] ++ cmp r1, #0 ++ movne r2, r1 ++ ldrne r1, [r2, #0] ++.handle_exception_13: ++ mov r2, #0 ++ mov r3, r2 ++ bl _ZN12ThreadShadow21set_pending_exceptionEP7oopDescPKci ++ mov r3, #0 ++ ldr r2, [istate, #ISTATE_BCP] ++ ldrb r2, [r2, #0] @ zero_extendqisi2 ++ str stack, [istate, #ISTATE_STACK] ++ str r2, [istate, #ISTATE_CALLEE] ++ ldr lr, [istate, #ISTATE_THREAD] ++ ldr r1, [lr, #THREAD_TOP_ZERO_FRAME] ++ str r3, [lr, #THREAD_LAST_JAVA_SP] ++ add r2, r1, #4 ++ str r2, [lr, #THREAD_JAVA_SP] ++ ldr r3, [r1, #0] ++ str r3, [lr, #THREAD_TOP_ZERO_FRAME] ++ ldr r1, [istate, #ISTATE_METHOD] ++ ldrh r3, [r1, #40] ++ ldr r0, [sp, #36] ++ mov r3, r3, asl #2 ++ add r2, r2, r3 ++ str r2, [lr, #THREAD_JAVA_SP] ++ bl _ZN10HandleMarkD1Ev ++ ldr r0, [sp, #124] ++ ldr tmp_yyy, [r0, #THREAD_LAST_HANDLE_MARK] ++ ldr r0, [tmp_yyy, #8] ++ ldr sl, [tmp_yyy, #4] ++ ldr r3, [r0, #0] ++ cmp r3, #0 ++ beq .handle_exception_14 ++ bl _ZN5Chunk9next_chopEv ++ ldr r0, [tmp_yyy, #8] ++.handle_exception_14: ++ str r0, [sl, #4] ++ ldr r3, [tmp_yyy, #12] ++ str r3, [sl, #8] ++ ldr r2, [tmp_yyy, #16] ++ str r2, [sl, #12] ++ ldr istate, [istate, #ISTATE_SAVED_ISTATE] ++ cmp istate, #ISTATE_THREAD ++ bne fast_handle_return ++ add sp, sp, #220 ++ ldmfd sp!, {regset, pc} ++.handle_exception_15: ++ ldr ip, [istate, #ISTATE_MONITOR_BASE] ++ ldr r2, [istate, #ISTATE_METHOD] ++ str ip, [sp, #92] ++ ldr tmp_vvv, [istate, #ISTATE_STACK_BASE] ++ ldr r3, [r2, #24] ++ mov r3, r3, lsr #5 ++ ands r3, r3, #1 ++ subne ip, ip, #8 ++ strne ip, [sp, #92] ++ ldr lr, [sp, #92] ++ str r3, [sp, #96] ++ cmp tmp_vvv, lr ++ bcs .handle_exception_21 ++ add r0, sp, #144 ++ add r1, sp, #212 ++ str r0, [sp, #28] ++ str r1, [sp, #24] ++ .p2align 3 ++.handle_exception_16: ++ ldr tmp_yyy, [tmp_vvv, #4] ++ cmp tmp_yyy, #0 ++ beq .handle_exception_20 ++ ldr fp, [tmp_vvv, #0] ++ mov r2, #0 ++ cmp fp, r2 ++ str r2, [tmp_vvv, #4] ++ beq .handle_exception_19 ++ .p2align 3 ++.handle_exception_17: ++ ldr sl, [tmp_yyy, #0] ++ cmp tmp_vvv, sl ++ bne .handle_exception_18 ++ mov r0, tmp_vvv ++ mov r1, fp ++ mov r2, tmp_yyy ++ mov r3, #0xffffffc0 ++ bic r3, r3, #0xf000 ++ blx r3 ++ cmp r0, #0 ++ bne .handle_exception_17 ++.handle_exception_18: ++ cmp tmp_vvv, sl ++ beq .handle_exception_19 ++ str tmp_yyy, [tmp_vvv, #4] ++ ldr r0, [sp, #28] ++ ldr r1, [istate, #ISTATE_THREAD] ++ bl _ZN10HandleMark10initializeEP6Thread ++ mov r1, tmp_vvv ++ ldr r0, [istate, #ISTATE_THREAD] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime11monitorexitEP10JavaThreadP15BasicObjectLock ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r0, [sp, #28] ++ bl _ZN10HandleMarkD1Ev ++.handle_exception_19: ++ ldr r1, [sp, #44] ++ cmp r1, #0 ++ beq .handle_exception_27 ++ ldr r3, [r1, #0] ++ cmp r3, #0 ++ beq .handle_exception_27 ++.handle_exception_20: ++ ldr r3, [sp, #92] ++ add tmp_vvv, tmp_vvv, #8 ++ cmp tmp_vvv, r3 ++ bcc .handle_exception_16 ++.handle_exception_21: ++ ldr ip, [sp, #96] ++ cmp ip, #0 ++ beq .handle_exception_23 ++ ldr r0, [sp, #92] ++ ldr sl, [r0, #4] ++ cmp sl, #0 ++ beq .handle_exception_26 ++ mov ip, r0 ++ ldr r0, [r0, #0] ++ mov r3, #0 ++ cmp r0, #0 ++ str r3, [ip, #4] ++ beq .handle_exception_23 ++ mov r1, sl ++ ldr r2, [sp, #92] ++ bl _ZN6Atomic11cmpxchg_ptrEPvPVvS0_ ++ ldr r1, [sp, #92] ++ cmp r1, r0 ++ beq .handle_exception_22 ++ ldr r3, [sp, #92] ++ add tmp_yyy, sp, #144 ++ mov r0, tmp_yyy ++ str sl, [r3, #4] ++ ldr r1, [istate, #ISTATE_THREAD] ++ bl _ZN10HandleMark10initializeEP6Thread ++ ldr r1, [sp, #92] ++ ldr r0, [istate, #ISTATE_THREAD] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime11monitorexitEP10JavaThreadP15BasicObjectLock ++ mov r0, tmp_yyy ++ ldr stack, [istate, #ISTATE_STACK] ++ bl _ZN10HandleMarkD1Ev ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr r1, [r0, #4] ++ cmp r1, #0 ++ beq .handle_exception_24 ++ add r0, sp, #204 ++ bl _ZN6HandleC1EP7oopDesc ++ ldr r1, [sp, #204] ++ ldr r0, [istate, #ISTATE_THREAD] ++ str r1, [sp, #44] ++ bl _ZN12ThreadShadow23clear_pending_exceptionEv ++.handle_exception_22: ++ ldr r0, [istate, #ISTATE_THREAD] ++ b .handle_exception_24 ++.handle_exception_23: ++ ldr r0, [istate, #ISTATE_THREAD] ++.handle_exception_24: ++ ldr r3, [sp, #44] ++ cmp r3, #0 ++ beq .handle_exception_12 ++.handle_exception_25: ++ ldr lr, [sp, #44] ++ ldr r1, [lr, #0] ++ cmp r1, #0 ++ bne .handle_exception_13 ++ b .handle_exception_12 ++.handle_exception_26: ++ ldr r1, [sp, #44] ++ cmp r1, #0 ++ beq .handle_exception_29 ++ ldr r3, [r1, #0] ++ cmp r3, #0 ++ beq .handle_exception_29 ++ ldr r0, [istate, #ISTATE_THREAD] ++ b .handle_exception_25 ++ ++.handle_exception_27: ++ ldr r0, [sp, #28] ++ ldr r1, [istate, #ISTATE_THREAD] ++ bl _ZN10HandleMark10initializeEP6Thread ++ ldr r0, [istate, #ISTATE_THREAD] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime37throw_illegal_monitor_state_exceptionEP10JavaThread ++ ldr r0, [sp, #28] ++ ldr stack, [istate, #ISTATE_STACK] ++ bl _ZN10HandleMarkD1Ev ++ ldr r0, [sp, #24] ++ ldr r3, [istate, #ISTATE_THREAD] ++ ldr r1, [r3, #4] ++ bl _ZN6HandleC1EP7oopDesc ++ ldr r2, [sp, #212] ++ ldr r0, [istate, #ISTATE_THREAD] ++ str r2, [sp, #44] ++ bl _ZN12ThreadShadow23clear_pending_exceptionEv ++ b .handle_exception_20 ++.handle_exception_28: ++ mov r1, fp ++ str stack, [istate, #ISTATE_STACK] ++ ldr r0, [istate, #ISTATE_THREAD] ++ bl _ZN18InterpreterRuntime12monitorenterEP10JavaThreadP15BasicObjectLock ++ ldr r0, [istate, #ISTATE_THREAD] ++ ldr stack, [istate, #ISTATE_STACK] ++ ldr r3, [r0, #THREAD_PENDING_EXC] ++ cmp r3, #0 ++ mov r2, r0 ++ beq do_execute_java_bytecodes_restore_locals_and_jpc ++ b handle_exception_do_not_unlock ++.handle_exception_29: ++ add tmp_yyy, sp, #144 ++ mov r0, tmp_yyy ++ ldr r1, [istate, #ISTATE_THREAD] ++ bl _ZN10HandleMark10initializeEP6Thread ++ ldr r0, [istate, #ISTATE_THREAD] ++ str stack, [istate, #ISTATE_STACK] ++ bl _ZN18InterpreterRuntime37throw_illegal_monitor_state_exceptionEP10JavaThread ++ mov r0, tmp_yyy ++ ldr stack, [istate, #ISTATE_STACK] ++ bl _ZN10HandleMarkD1Ev ++ ldr r3, [istate, #ISTATE_THREAD] ++ add r0, sp, #208 ++ ldr r1, [r3, #4] ++ bl _ZN6HandleC1EP7oopDesc ++ ldr r2, [sp, #208] ++ ldr r0, [istate, #ISTATE_THREAD] ++ str r2, [sp, #44] ++ bl _ZN12ThreadShadow23clear_pending_exceptionEv ++ ldr r0, [istate, #ISTATE_THREAD] ++ b .handle_exception_24 ++opclabels_data_adcon: ++ .word opclabels_data(GOTOFF) ++ ++ ALIGN_CODE ++fast_accessor_entry: ++ ldr ip, [dispatch, #SafePointSynchronize_state_Address-XXX] ++ ldr r3, [tmp2, #8] ++ ldr ip, [ip, #0] ++ ldrb lr, [r3, #50] ++ ldrb r3, [r3, #51] ++ cmp ip, #0 ++ ldr ip, [tmp2, #12] ++ bne fast_normal_entry ++ ldr ip, [ip, #12] ++ ++ DISPATCH_START 3 ++ ++ orr lr, lr, r3, lsl #8 @ lr = index ++ add r3, ip, #16 ++ ldr lr, [r3, lr, lsl #4]! @ r3 = cache, lr = flags ++ ++ DISPATCH_NEXT ++ ++ cmp lr, #180 << 16 ++ GET_STACK 0, lr ++ bne fast_normal_entry ++ ++ cmp lr, #0 ++ beq fast_normal_entry ++ ++ ++ ldr r2, [r3, #12] ++ ldr r3, [r3, #8] ++ movs r2, r2, lsr #29 ++ bls .fast_accessor_non_w ++ ++ DISPATCH_NEXT ++ ++ ldr tmp1, [lr, r3] ++ ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ ++ PUT_STACK 0, tmp1 ++ ++ DISPATCH_FINISH ++ ++.fast_accessor_non_w: ++ bcs .fast_accessor_h ++ beq .fast_accessor_sb ++ tst r2, #2 ++ bne .fast_accessor_dw ++.fast_accessor_sh: ++ DISPATCH_STATE 2 ++ DISPATCH_NEXT ++ ldrsh tmp1, [lr, r3] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUT_STACK 0, tmp1 ++ DISPATCH_FINISH ++.fast_accessor_h: ++ DISPATCH_STATE 2 ++ DISPATCH_NEXT ++ ldrh tmp1, [lr, r3] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUT_STACK 0, tmp1 ++ DISPATCH_FINISH ++.fast_accessor_sb: ++ DISPATCH_STATE 2 ++ DISPATCH_NEXT ++ ldrsb tmp1, [lr, r3] ++ DISPATCH_NEXT ++ DISPATCH_NEXT ++ PUT_STACK 0, tmp1 ++ DISPATCH_FINISH ++.fast_accessor_dw: ++ DISPATCH_STATE 2 ++ add tmp1, lr, r3 ++ DISPATCH_NEXT ++ ldm tmp1, {tmp2, tmp1} ++ DISPATCH_NEXT ++ PUT_STACK 0, tmp1 ++ DISPATCH_NEXT ++ PUSH tmp2 ++ DISPATCH_FINISH ++ ++.iconst_div_rem_0: ++ sub jpc, jpc, #1 @ Point to idiv ++.lrem_0: ++.ldiv_0: ++.remc_0: ++.divc_0: ++divide_by_zero_exception: ++ mov r0, #VMSYMBOLS_ArithmeticException ++ adr r1, div_zero_msg ++ b raise_exception_with_msg ++div_zero_msg: ++ .ascii "/ by int zero\000" ++ ALIGN_WORD ++ ++array_bound_exception_jpc_4_r3: ++ sub jpc, jpc, #1 ++array_bound_exception_jpc_3_r3: ++ sub jpc, jpc, #1 ++array_bound_exception_jpc_2_r3: ++ sub jpc, jpc, #1 ++array_bound_exception_jpc_1_r3: ++ sub jpc, jpc, #1 ++array_bound_exception_jpc_0_r3: ++ mov r2, r3 ++ b array_bounds_exception ++array_bound_exception_jpc_1_tmp2: ++ sub jpc, jpc, #1 ++array_bound_exception_jpc_0_tmp2: ++ mov r2, tmp2 ++ b array_bounds_exception ++array_bound_exception_jpc_3: ++ sub jpc, jpc, #1 ++array_bound_exception_jpc_2: ++ sub jpc, jpc, #1 ++array_bound_exception_jpc_1: ++ sub jpc, jpc, #1 ++array_bound_exception_jpc_0: ++array_bounds_exception: ++ adr r1, percent_d_str ++ add r0, sp, #168 ++ bl sprintf ++ add r1, sp, #168 ++ mov r0, #VMSYMBOLS_ArrayIndexOutOfBounds ++ b raise_exception_with_msg ++percent_d_str: ++ .ascii "%d\000" ++ ALIGN_WORD ++ ++#ifndef HW_NULL_PTR_CHECK ++null_ptr_exception_jpc_5: ++ sub jpc, jpc, #1 ++null_ptr_exception_jpc_4: ++ sub jpc, jpc, #1 ++null_ptr_exception_jpc_3: ++ sub jpc, jpc, #1 ++null_ptr_exception_jpc_2: ++ sub jpc, jpc, #1 ++null_ptr_exception_jpc_1: ++ sub jpc, jpc, #1 ++null_ptr_exception_jpc_0: ++#endif ++null_ptr_exception: ++ mov r0, #VMSYMBOLS_NullPointerException ++ b raise_exception ++ ++@ ==== Fast SW FP emulation =============================================================== ++ ++#define al r0 ++#define ah r1 ++#define bl r2 ++#define bh r3 ++#define tmp tmp1 ++#define sh r12 ++#define ex_add r14 ++ ++@ TOS = TOSM1 + TOS ++@ What we actually do is TOS = TOS + TOSM1 ++@ --- do_dadd_vtos ------------------------------------------------- ++ Opcode dadd ++ POP4 al, ah, bl, bh ++ mov tmp, #0xff000000 ++ orr tmp, tmp, #0x00e00000 ++ bics ex_add, tmp, ah, LSL #1 ++ bicnes ex_add, tmp, bh, LSL #1 ++ beq .dadd_naninf ++ teq ah, bh ++ eormi bh, bh, #1 << 31 ++ bmi ._dsub1 ++._dadd1: ++ subs ex_add, al, bl ++ sbcs sh, ah, bh ++ bhs .dadd_swapped ++ adds bl, bl, ex_add ++ adc bh, bh, sh ++ subs al, al, ex_add ++ sbc ah, ah, sh ++.dadd_swapped: ++ mov ex_add, ah, LSR #20 ++ sub sh, ex_add, bh, LSR #20 ++ tst tmp, bh, LSL #1 ++ beq .dadd_uncommon ++ bic ah, ah, ex_add, LSL #20 ++ bic bh, bh, tmp ++ orr bh, bh, #1 << 20 ++.dadd_doadd: ++ rsbs tmp, sh, #32 ++ blo .dadd_bigshift ++.dadd_smallshift: ++ adds al, al, bl, LSR sh ++ adc ah, ah, bh, LSR sh ++ adds al, al, bh, LSL tmp ++ adcs ah, ah, #0 ++ cmp ah, #1 << 20 ++ bhs .dadd_carry ++ add ah, ah, ex_add, LSL #20 @ add exponent ++.dadd_nocarry: ++ movs bl, bl, LSL tmp @ round and sticky bits ++ bpl .dadd_exit ++ adds al, al, #1 ++ movccs bl, bl, LSL #1 @ is sticky bit zero? ++ bne .dadd_exit ++.dadd_roundeven: ++ cmp al, #0 ++ bicne al, al, #1 @ RTE if carry didn't occur ++ adceq ah, ah, #0 @ increment high word if it did ++.dadd_check_overflow_inx: ++ mov bh, ah, LSL #1 ++ cmp bh, #0xFFE00000 ++ blo .dadd_exit ++ subhs ah, ah, #3<<29 @ bias exponent ++ b .return_double_Inf ++.dadd_bigshift: ++ cmp bl, #1 ++ adc bl, bh, bh ++ sub sh, sh, #32 @ nonzero ++ rsbs tmp, sh, #31 @ sets C if within a word ++ movlo tmp, #0 @ C clear if sh > 31 ++ addhss al, al, bh, LSR sh ++ adc ah, ah, ex_add, LSL #20 ++ cmp ex_add, ah, LSR #20 ++ beq .dadd_nocarry ++ sub ah, ah, ex_add, LSL #20 ++.dadd_carry: ++ add ah, ah, #1 << 20 ++ movs ah, ah, LSR #1 ++ add ah, ah, ex_add, LSL #20 ++ movs al, al, RRX ++ bcc .dadd_check_overflow_exact ++ adcs al, al, #0 ++ movccs tmp, bl, LSL tmp @EQ = round to even ++ bne .dadd_check_overflow_exact ++ b .dadd_roundeven ++.dadd_rnearup_carry: ++ adds al, al, #1 ++ movccs bl, bl, LSL #1 @ is sticky bit zero? ++ bne .dadd_check_overflow_inx ++ b .dadd_roundeven ++.dadd_check_overflow_exact: ++ mov bh, ah, LSL #1 ++ cmp bh, #0xFFE00000 ++ blo .dadd_exit ++ sub ah, ah, #3<<29 @ bias exponent ++ ++.return_double_Inf: ++ and a3, ah, #0x80000000 ++.return_double_Inf_1: ++ mov al, #0 ++ mov ah, #0x7f000000 ++ orr ah, ah, #0x00f00000 ++ orr ah,ah,a3 ++.dadd_exit: ++ PUSH2 al, ah ++ DISPATCH 1 ++ ++.dadd_uncommon: ++ orrs tmp, bl, bh, LSL #1 @ Is b zero or denormal? ++ beq .dadd_bzero ++ movs tmp, ex_add, LSL #21 ++ bic ah, ah, ex_add, LSL #20 ++ bicne bh, bh, #1 << 31 ++ subne sh, sh, #1 @ adjust exponent to fake exp_b = 1 ++ bne .dadd_doadd ++ adds al, al, bl ++ adc ah, ah, bh ++ b .daddsub_denorm ++.dadd_bzero: ++ movs tmp, ex_add, LSL #21 @ is a denormal? ++ bne .dadd_exit ++ orrs tmp, al, ah, LSL #1 @ a zero? ++ beq .dadd_exit ++ b .daddsub_denorm ++ ++.dadd_naninf: ++ cmp al, #1 @ sets C if al!=0 ++ adc ex_add, ah, ah ++ cmp bl, #1 ++ adc sh, bh, bh ++ cmp ex_add, tmp @ HI if a is NaN ++ cmpls sh, tmp @ HI if either is NaN ++ bhi .return_double_NaN ++ cmp ex_add, sh ++ beq .dadd_twoinf ++ cmp ex_add, tmp @ EQ if a is Inf ++ movne ah, bh ++ movne al, bl ++ b .dadd_exit ++.dadd_twoinf: ++ teq ah, bh ++ bpl .dadd_exit ++ b .return_double_NaN ++ ++@ ECN: load 1st arg off stack and do a reverse subtract ++@ ECN: We want TOSM1 - TOS, but args end up in wrong order so do rsb ++@ --- do_dsub_itos ------------------------------------------------- ++ Opcode dsub ++ POP4 al, ah, bl, bh ++ mov tmp, #0xff000000 ++ orr tmp, tmp, #0x00e00000 ++ bics ex_add, tmp, ah, LSL #1 ++ bicnes ex_add, tmp, bh, LSL #1 ++ beq .drsb_naninf ++ teq ah, bh ++ eor ah, ah, #1 << 31 ++ bmi ._dadd1 ++ eor bh, bh, #1 << 31 ++._dsub1: ++ subs ex_add, al, bl ++ sbcs sh, ah, bh ++ bhs .dsub_swapped ++.dsub_do_swap: ++ eor sh, sh, #1 << 31 @ negate a and b as a - b == -b - -a ++ adds bl, bl, ex_add ++ adc bh, bh, sh ++ subs al, al, ex_add ++ sbc ah, ah, sh ++.dsub_swapped: ++ mov ex_add, ah, LSR #20 ++ sub sh, ex_add, bh, LSR #20 ++ tst tmp, bh, LSL #1 ++ beq .dsub_uncommon ++ bic ah, ah, ex_add, LSL #20 ++ bic bh, bh, tmp, ASR #1 ++ rsbs bl, bl, #0 ++ rsc bh, bh, tmp, ASR #1 @ 0xffe00000 >> 1 = -(1 << 20) ++.dsub_dosub: ++ rsbs tmp, sh, #32 ++ blo .dsub_bigshift ++.dsub_smallshift: ++ adds al, al, bl, LSR sh ++ adc ah, ah, bh, ASR sh ++ adds al, al, bh, LSL tmp ++ adcs ah, ah, #0 ++ bmi .dsub_borrow ++.dsub_noborrow: ++ add ah, ah, ex_add, LSL #20 ++ movs bl, bl, LSL tmp ++.dsub_dorounding: ++ bpl .dsub_exit ++ adds al, al, #1 @ Z flag set if carry to high word ++ cmpne bl, #0x80000000 @ check we don't have to round to even ++ bne .dsub_exit ++ cmp al, #0 ++ addeq ah, ah, #1 ++ bicne al, al, #1 ++ b .dsub_exit ++.dsub_bigshift: ++ cmp bl, #1 ++ adc bl, bh, bh ++ sub sh, sh, #32 ++ rsbs tmp, sh, #31 ++ blo .dsub_hugeshift ++ adds al, al, bh, ASR sh ++ adcs ah, ah, #-1 ++ bpl .dsub_noborrow ++.dsub_borrow: ++ add tmp, tmp, #1 ++ movs tmp, bl, LSL tmp ++ adcs al, al, al @ shift al,ah left including guard bit ++ adc ah, ah, ah ++ add sh, ah, ex_add, LSL #21 @ ah = 0xFFE00000 + fraction. Adding ++ movs sh, sh, LSR #21 @ C-bit is clear if bit 20 of ah ++ bls .dsub_renormalize @ clear, so 2 bits or more ++ add ah, ah, ex_add, LSL #20 ++ adds al, al, tmp, LSR #31 @ C and Z flag are set if carry over ++ cmpcc tmp, #0x80000000 @ check that we don't have to round ++ bne .dsub_exit ++ cmp al, #0 ++ addeq ah, ah, #1 ++ bicne al, al, #1 ++ b .dsub_exit ++.dsub_renormalize: ++ bcs .dsub_ex_one ++ adds ah, ah, #1 << 21 ++ cmpeq al, #0 ++ beq .dsub_retzero @ go and deal with it, if so ++ mov sh, ex_add, LSR #11 ++ bic ex_add, ex_add, #1 << 11 ++ sub ex_add, ex_add, #2 @ for leading bit ++.dsub_renormloop: @ TODO: add loop for 8 bit per cycle renorm ++ adds al, al, al ++ adc ah, ah, ah ++ sub ex_add, ex_add, #1 ++ tst ah, #1 << 20 ++ beq .dsub_renormloop ++ add ah, ah, sh, LSL #31 ++ add ah, ah, ex_add, LSL #20 ++ cmp ex_add, #0 ++ bgt .dsub_exit ++ add ah, ah, #3 << 29 @ bias exponent ++ @ Rounding direction indicator is zero (denormal results are exact) ++ mov ip, #0 ++ b .__dunder ++.dsub_hugeshift: ++.dsub_return: ++ add ah, ah, ex_add, LSL #20 ++.dsub_return1: ++.dsub_exit: ++ PUSH2 al, ah ++ DISPATCH 1 ++.dsub_ex_one: @ underflow when ex = 1 - shift back to denorm ++ movs ah, ah, ASR #1 ++ mov al, al, RRX ++ add ah, ah, ex_add, LSL #20 ++ b .dsub_denorm ++.dsub_uncommon: ++ orrs tmp, bl, bh, LSL #12 @ is b zero or denorm? ++ beq .dsub_bzero ++ movs tmp, ex_add, LSL #21 ++ bic ah, ah, ex_add, LSL #20 ++ beq .dsub_both_denorm ++ bic bh, bh, #1 << 31 ++ sub sh, sh, #1 ++ rsbs bl, bl,#0 ++ rsc bh, bh,#0 ++ b .dsub_dosub ++.dsub_both_denorm: ++ subs al, al, bl ++ sbc ah, ah, bh ++ b .dsub_denorm ++.dsub_bzero: ++ orrs tmp, al, ah, LSL #1 ++ bne .dsub_denorm @ return a@ but it might be denormal ++.dsub_retzero: ++ mov ah, #0 @ clear sign bit (al is already 0) ++ b .dsub_exit ++.dsub_denorm: ++.daddsub_denorm: ++ movs bl, ah, LSL #1 @ discard sign bit ++ tsteq al, al @ do we have a zero? ++ beq .dsub_retzero @ yes@ go and ensure the right sign ++ b .dsub_exit ++.drsb_naninf: ++ @ Handle NaNs and infinities in reverse subtraction. We ++ @ just swap the operands and go to dsub_naninf. ++ eor ah, ah, bh ++ eor al, al, bl ++ eor bh, bh, ah ++ eor bl, bl, al ++ eor ah, ah, bh ++ eor al, al, bl ++.dsub_naninf: ++ cmp al, #1 @ sets C if al!=0 ++ adc ex_add, ah, ah ++ cmp bl, #1 ++ adc sh, bh, bh ++ cmp ex_add, tmp @ HI if a is NaN ++ cmpls sh, tmp @ HI if either is NaN ++ bhi .return_double_NaN ++ cmp ex_add, sh ++ beq .dsub_twoinf ++ cmp ex_add, tmp @ EQ if a is Inf ++ eorne ah, bh, #0x80000000 ++ movne al, bl ++ b .dsub_exit ++.dsub_twoinf: ++ teq ah, bh ++ bmi .dsub_exit ++ ++.return_double_NaN: ++ and a3, ah, #0x80000000 ++ mov al, #0 ++ mov ah, #0x7f000000 ++ orr ah, ah, #0x00f80000 ++ orr ah,ah,a3 ++ b .dsub_exit ++ ++@ === underflow handler ================================================ ++ ++#define INX_pos 30 ++#define INX_bit (1<<30) ++ ++#define exp r2 ++#define temp r3 ++ ++.__dunder: ++ tst ah, ah ++ orrmi ip, ip, #1<<16 ++ mov temp, #0x600 ++ mov exp, ah, LSR #20 @ find the exponent ++ add temp, temp, #1 ++ bic ah, ah, exp, LSL #20 @ remove exponent from mantissa ++ bic exp, exp, #0x800 @ lose the sign bit ++ sub exp, temp, exp ++ orr ah, ah, #1<<20 @ put on mantissa leading bit ++ cmp exp, #53 ++ bhi .dunder_stickyonly ++ beq .dunder_roundbit ++ cmp exp, #21 ++ blo .dunder_hiword ++ subs exp, exp, #32 ++ bls .dunder_hiloword ++.dunder_loloword: ++ rsb temp, exp, #32 ++ cmp al, #0 ++ mov al, ah, LSR exp ++ mov exp, ah, LSL temp ++ orrne exp, exp, #1 ++ mov ah, #0 ++ b .dunder_round ++.dunder_hiloword: ++ rsb temp, exp, #0 ++ add exp, exp, #32 ++ mov ah, ah, LSL temp ++ orr ah, ah, al, LSR exp ++ mov exp, al, LSL temp ++ mov al, ah ++ mov ah, #0 ++ b .dunder_round ++.dunder_hiword: ++ rsb temp, exp, #32 ++ mov tmp, al, LSL temp ++ mov temp, ah, LSL temp ++ orr al, temp, al, LSR exp ++ mov ah, ah, LSR exp ++ mov exp, tmp ++ b .dunder_round ++.dunder_roundbit: ++ orrs exp, al, ah, LSL #12 ++ mov al, #0 ++ mov ah, #0 ++ mov exp, #0x80000000 ++ addne exp, exp, #1 ++ b .dunder_round ++.dunder_stickyonly: ++ mov exp, #1 ++ mov ah, #0 ++ mov al, #0 ++.dunder_round: ++ tst ip, #1<<16 ++ bic ip, ip, #1<<16 ++ orrne ah, ah, #0x80000000 ++ tst exp, exp ++ beq .dsub_exit ++ movs exp, exp, LSL #1 @ round bit in C, sticky in ~Z ++ bcc .dunder_rerounded @ if no round bit, we're done ++ beq .dunder_roundeven @ RTE is tricky due to rerounding ++.dunder_roundup: ++ adds al, al, #1 @ round up ++ adc ah, ah, #0 ++.dunder_rerounded: ++ b .dsub_exit ++.dunder_roundeven: ++ movs exp, ip, ASR #INX_pos @ get -1, 0, +1 from direction bits ++ bmi .dunder_roundup @ if -1, round up unconditionally ++ bne .dunder_rerounded @ if +1, round down unconditionally ++ adds al, al, #1 @ round up ... ++ adc ah, ah, #0 ++ bic al, al, #1 @ ... and then to even ++ b .dunder_rerounded ++ ++@ === MULTIPLY Double =================================================== ++ ++#define ex_m r14 ++#define uh r12 ++#define ul r4 ++#define rs r4 ++#define th r5 ++#define tl r11 ++ ++@ --- do_dmul_itos ------------------------------------------------- ++ Opcode dmul ++ POP4 al, ah, bl, bh ++ stmdb sp!, {r4, r5} ++ mov tmp, #0x7f00000 ++ orr tmp, tmp, #0x00f0000 ++ bics ex_m, tmp, ah, LSR #4 @ test for Infs or NaNs ++ bicnes ex_m, tmp, bh, LSR #4 ++ beq .dmul_naninf ++ and ex_m, tmp, ah, LSR #4 @ get exponent of a ++ eor th, ah, bh @ compute sign of result ++ orr ex_m, ex_m, th, LSR #31 @ and save it at bottom of ex ++ ands th, tmp, bh, LSR #4 @ get exponent of b, and test ++ tstne ah, tmp, LSL #4 @ for zeros/denorms ... ++ beq .dmul_zerodenorm @ go and renormalise if we got any ++.dmul_normalised: ++ add ex_m, ex_m, th @ calculate exponent of result ++ sub ex_m, ex_m, #0x3FC0000 @ rebias exponent mostly ++ bic ah, ah, tmp, LSL #5 @ clear sign and all but lo bit of exp ++ bic bh, bh, tmp, LSL #5 ++ orr ah, ah, #1<<20 @ set leading bit on mantissa ++ orr bh, bh, #1<<20 @ set leading bit on mantissa ++.dmul_mantmul: ++ umull ul, uh, ah, bl ++ umull tl, th, al, bh ++ adds tl, tl, ul ++ adcs th, th, uh @ carry from here is used below ++ umull ul, uh, ah, bh @ uh:ul is top part ++ adc bh, uh, #0 @ get carry from above addition ++ umull ah, uh, al, bl @ uh:ah is bottom part ++ adds tl, tl, uh ++ adcs th, th, ul ++ adcs bh, bh, #0 ++ tst ah, ah ++ orrne tl, tl, #1 @ don't lose sticky bit ++ mov bl, #-4 ++ mov uh, #32-12 @ uh will be corresponding right shift ++ cmp bh, #0x200 @ C set if it's 11 bits ++ adc uh, uh, #0 ++ adc bl, bl, ex_m, ASR #16 @ increment exponent correspondingly ++ rsb ul, uh, #32 @ ul is left shift ++ mov ah, bh, LSL ul ++ mov al, th, LSL ul ++ orr ah, ah, th, LSR uh ++ orr al, al, tl, LSR uh ++ add ah, ah, bl, LSL #20 @ put exponent back on (may wrap ++ eor ah, ah, ex_m, LSL #31 @ put sign back on (with EOR so that ++ movs rs, tl, LSL ul @ compute the round word ++ beq .dmul_exact ++ movs uh, rs, LSL #1 @ rs is already in place ++ movcc rs, #-INX_bit @ direction indicator: rounded down ++ bcc .dmul_rounded ++ orreq bh, bh, #1<<31 @ save the round-to-even bit ++ adcs al, al, #0 @ round up if necessary ++ adc ah, ah, #0 ++ mov rs, #INX_bit @ direction indicator: rounded up ++ tst al, bh, LSR #31 @ does RTE do anything? ++ bic al, al, bh, LSR #31 @ perform RTE ++ movne rs, #-INX_bit @ if RTE had effect, we rounded down ++.dmul_exact: ++.dmul_rounded: ++ teq ah, ex_m, LSL #31 @ do the signs agree? ++ mov uh, #0x70000000 @ even if so, need to test exp 0/7FF ++ orr uh, uh, #0x0ff00000 ++ bmi .dmul_outflow @ if not, UFL or OFL ++ tst ah, uh ++ bicnes uh, uh, ah @ is exp 0 or 7FF? ++ beq .dmul_outflow ++.dmul_exit: ++ ldmia sp!, {r4, r5} ++ PUSH2 al, ah ++ DISPATCH 1 ++ ++.dmul_rdirect: ++ movs ul, ex_m, LSL #31 @ put sign bit in N ++ tstpl uh, #2 << 22 @ if +ve: EQ iff round up. Keeps PL ++ tstmi uh, #1 << 22 @ if -ve: EQ iff round up. ++ moveq rs, #INX_bit @ rounded up ++ movne rs, #-INX_bit @ rounded down ++ addeqs al, al, #1 @ may set C ++ adc ah, ah, #0 ++ b .dmul_rounded ++ ++.dmul_outflow: ++ cmp ex_m, #0x400<<16 @ Which ballpark are we in? ++ addle ah, ah, #0x60000000 @ Bias up if underflow ++ subge ah, ah, #0x60000000 @ Bias down if overflow ++ mov ip, rs ++ ldmia sp!, {r4, r5} ++ ble .__dunder @ underflow ++ b .return_double_Inf ++ ++.dmul_zerodenorm: ++ orrs ul, al, ah, LSL #1 @ is a zero? ++ orrnes ul, bl, bh, LSL #1 @ or is b zero? ++ beq .dmul_zero @ Return zero if so ++ ++ tst th, th @ is b denormal? ++ beq .dmul_renorm_op2 ++.dmul_done_op2: ++ bics ul, ex_m, #1 @ is a denormal? (careful of sign bit) ++ beq .dmul_renorm_op1 ++ b .dmul_normalised ++.dmul_zero: ++ mov al, #0 @ clear low word ++ mov ah, ex_m, LSL #31 @ get sign of result and clear hi word ++ b .dmul_exit ++ ++.dmul_renorm_op1: ++ add ex_m, ex_m, #1<<16 @ correct the exponent ++ bic ah, ah, #0x80000000 @ this will get in our way ++ orrs tl, ah, al, LSR #12 @ is highest set bit in low twelve? ++ moveq al, al, LSL #20 @ if so, move it up ++ subeq ex_m, ex_m, #20<<16 @ and adjust exponent ++ tst ah, ah @ is highest set bit in low word? ++ moveq ah, al, LSR #12 @ if so, move up by 20 ++ moveq al, al, LSL #20 ++ subeq ex_m, ex_m, #20<<16 @ and adjust exponent ++ mov ul, #0 @ shift of top word ++ movs tl, ah, LSR #(21-16) @ is highest set bit within 16 of top? ++ moveq ah, ah, LSL #16 @ if not, move up ++ addeq ul, ul, #16 @ and adjust exponent ++ movs tl, ah, LSR #(21-8) @ is highest set bit within 8 of top? ++ moveq ah, ah, LSL #8 @ if not, move up ++ addeq ul, ul, #8 @ and adjust exponent ++ movs tl, ah, LSR #(21-4) @ is highest set bit within 4 of top? ++ moveq ah, ah, LSL #4 @ if not, move up ++ addeq ul, ul, #4 @ and adjust exponent ++ movs tl, ah, LSR #(21-2) @ is highest set bit within 2 of top? ++ moveq ah, ah, LSL #2 @ if not, move up ++ addeq ul, ul, #2 @ and adjust exponent ++ movs tl, ah, LSR #(21-1) @ is highest set bit within 1 of top? ++ moveq ah, ah, LSL #1 @ if not, move up ++ addeq ul, ul, #1 @ and adjust exponent ++ ++ sub ex_m, ex_m, ul, LSL #16 @ calculate final pseudo exponent ++ mov tl, al, LSL ul @ shift low word up by same amout ++ rsb ul, ul, #32 @ compute reverse shift for al ++ orr ah, ah, al, LSR ul @ put in high end of low word ++ mov al, tl ++ ++@ ECN: Reload tmp ++ mov tmp, #0x7f00000 ++ orr tmp, tmp, #0x00f0000 ++ ++ b .dmul_normalised ++ ++.dmul_renorm_op2: ++ add th, th, #1<<16 @ correct the exponent ++ bic bh, bh, #0x80000000 @ this will get in our way ++ orrs tl, bh, bl, LSR #12 @ is highest set bit in low twelve? ++ moveq bl, bl, LSL #20 @ if so, move it up ++ subeq th, th, #20<<16 @ and adjust exponent ++ tst bh, bh @ is highest set bit in low word? ++ moveq bh, bl, LSR #12 @ if so, move up by 20 ++ moveq bl, bl, LSL #20 ++ subeq th, th, #20<<16 @ and adjust exponent ++ mov ul, #0 @ shift of top word ++ movs tl, bh, LSR #(21-16) @ is highest set bit within 16 of top? ++ moveq bh, bh, LSL #16 @ if not, move up ++ addeq ul, ul, #16 @ and adjust exponent ++ movs tl, bh, LSR #(21-8) @ is highest set bit within 8 of top? ++ moveq bh, bh, LSL #8 @ if not, move up ++ addeq ul, ul, #8 @ and adjust exponent ++ movs tl, bh, LSR #(21-4) @ is highest set bit within 4 of top? ++ moveq bh, bh, LSL #4 @ if not, move up ++ addeq ul, ul, #4 @ and adjust exponent ++ movs tl, bh, LSR #(21-2) @ is highest set bit within 2 of top? ++ moveq bh, bh, LSL #2 @ if not, move up ++ addeq ul, ul, #2 @ and adjust exponent ++ movs tl, bh, LSR #(21-1) @ is highest set bit within 1 of top? ++ moveq bh, bh, LSL #1 @ if not, move up ++ addeq ul, ul, #1 @ and adjust exponent ++ ++ sub th, th, ul, LSL #16 @ calculate final pseudo exponent ++ mov tl, bl, LSL ul @ shift low word up by same amout ++ rsb ul, ul, #32 @ compute reverse shift for bl ++ orr bh, bh, bl, LSR ul @ put in high end of low word ++ mov bl, tl ++ ++@ ECN: Reload tmp ++ mov tmp, #0x7f00000 ++ orr tmp, tmp, #0x00f0000 ++ ++ b .dmul_done_op2 ++ ++.dmul_naninf: ++ mov uh, ah, LSL #1 @ discard sign bit on a ++ mov ul, bh, LSL #1 @ and on b ++ cmp uh, tmp, LSL #5 @ HI if ah shows a to be NaN ++ cmpeq al, #0 @ now HI if a is NaN ++ cmpls ul, tmp, LSL #5 @ another chance to set HI ... ++ cmpeq bl, #0 @ ... if b is NaN ++ bhi .dmul_ivo ++ orrs ul, al, ah, LSL #1 @ is a zero? ++ orrnes ul, bl, bh, LSL #1 @ or is b zero? ++ beq .dmul_ivo ++ eor ah, ah, bh ++ mov al, #0 ++ and ah, ah, #0x80000000 ++ orr ah, ah, tmp, LSL #4 ++ b .dmul_exit ++ ++.dmul_ivo: ++ ldmia sp!, {r4, r5} ++ b .return_double_NaN ++ ++#undef al ++#undef ah ++#undef bl ++#undef bh ++#undef tmp ++#undef sh ++#undef ex_add ++ ++#undef INX_pos ++#undef INX_bit ++ ++#undef exp ++#undef temp ++ ++#undef ex_m ++#undef uh ++#undef ul ++#undef rs ++#undef th ++#undef tl ++ ++@ --- ignore_safepoints --------------------------------------------------------------------------- ++ .global _ZN14CppInterpreter17ignore_safepointsEv ++ .type _ZN14CppInterpreter17ignore_safepointsEv, %function ++_ZN14CppInterpreter17ignore_safepointsEv: ++ adrl ip, dispatch_init_adcon ++ ldrd r2, [ip] ++ add r2, r2, ip ++ add ip, r3, r2 ++ ldr r2, [ip, #AbstractInterpreter_notice_safepoints-XXX] ++ ldrb r1, [r2, #0] @ zero_extendqisi2 ++ cmp r1, #0 ++ bxeq lr ++ mov r3, #0 ++ strb r3, [r2, #0] ++ adrl r3, main_dispatch_table ++ mov r2, #256 ++1: ++ ldr r1, [r3], #4 ++ str r1, [ip], #4 ++ subs r2, r2, #1 ++ bne 1b ++ ++ bx lr ++ ++@ --- notice_safepoints --------------------------------------------------------------------------- ++ .global _ZN14CppInterpreter17notice_safepointsEv ++ .type _ZN14CppInterpreter17notice_safepointsEv, %function ++_ZN14CppInterpreter17notice_safepointsEv: ++ adrl ip, dispatch_init_adcon ++ ldrd r2, [ip] ++ add r2, r2, ip ++ add ip, r3, r2 ++ ldr r2, [ip, #AbstractInterpreter_notice_safepoints-XXX] ++ ldrb r1, [r2, #0] @ zero_extendqisi2 ++ cmp r1, #0 ++ bxne lr ++ mov r3, #1 ++ strb r3, [r2, #0] ++ adrl r3, safe_dispatch_table ++ mov r2, #256 ++1: ++ ldr r1, [r3], #4 ++ str r1, [ip], #4 ++ subs r2, r2, #1 ++ bne 1b ++ ++ bx lr ++ ++@ --- END execute.s ---------------------------------------------------------------------------- ++ ++bci_init: ++ adr r3, dispatch_init_adcon ++ ldrd r0, [r3] ++ add r0, r0, r3 ++ add r1, r1, r0 ++ adr r2, adcon_init_table ++ mov r3, r1 ++1: ++ ldr ip, [r2], #4 ++ cmp ip, #0 ++ ldrne ip, [r0, ip] ++ strne ip, [r1, #-4]! ++ bne 1b ++ adr r2, main_dispatch_table ++ mov r1, #256 ++2: ++ ldr ip, [r2], #4 ++ str ip, [r3], #4 ++ subs r1, r1, #1 ++ bne 2b ++ ++ bx lr ++ ++ ALIGN_DATA ++dispatch_init_adcon: ++ .word _GLOBAL_OFFSET_TABLE_-dispatch_init_adcon, opclabels_data(GOTOFF) ++adcon_init_table: ++ .word _ZN18InterpreterRuntime22slow_signature_handlerEP10JavaThreadP13methodOopDescPiS4_(GOT) ++ .word _ZN20SafepointSynchronize6_stateE(GOT) ++ .word _ZN9vmSymbols8_symbolsE(GOT) ++ .word always_do_update_barrier(GOT) ++ .word UseBiasedLocking(GOT) ++ .word _ZN8Universe14_collectedHeapE(GOT) ++ .word ZeroTLAB(GOT) ++ .word UseTLAB(GOT) ++ .word _ZN9Bytecodes5_nameE(GOT) ++ .word _ZN19AbstractInterpreter18_notice_safepointsE(GOT) ++ .word _ZN18ThreadLocalStorage13_thread_indexE(GOT) ++ .word 0 ++ ++ ALIGN_DATA ++main_dispatch_table: ++ MAIN_DISPATCH_TABLE ++safe_dispatch_table: ++ .word do_nop ++ .word do_u4const_0 ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_iconst_N ++ .word do_u8const_0 ++ .word do_lconst_1 ++ .word do_u4const_0 ++ .word do_fconst_1 ++ .word do_fconst_2 ++ .word do_u8const_0 ++ .word do_dconst_1 ++ .word do_bipush ++ .word do_sipush ++ .word do_ldc ++ .word do_ldc_w ++ .word do_ldc2_w ++ .word do_u4load ++ .word do_u8load ++ .word do_u4load ++ .word do_u8load ++ .word do_u4load ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_iload_0 ++ .word do_u8load_0 ++ .word do_u8load_1 ++ .word do_u8load_2 ++ .word do_u8load_3 ++ .word do_fload_0 ++ .word do_fload_0 ++ .word do_fload_0 ++ .word do_fload_0 ++ .word do_u8load_0 ++ .word do_u8load_1 ++ .word do_u8load_2 ++ .word do_u8load_3 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_aload_0 ++ .word do_u4aload ++ .word do_u8aload ++ .word do_u4aload ++ .word do_u8aload ++ .word do_u4aload ++ .word do_baload ++ .word do_caload ++ .word do_saload ++ .word do_u4store ++ .word do_u8store ++ .word do_u4store ++ .word do_u8store ++ .word do_u4store ++ .word do_u4store_0 ++ .word do_u4store_1 ++ .word do_u4store_2 ++ .word do_u4store_3 ++ .word do_u8store_0 ++ .word do_u8store_1 ++ .word do_u8store_2 ++ .word do_u8store_3 ++ .word do_u4store_0 ++ .word do_u4store_1 ++ .word do_u4store_2 ++ .word do_u4store_3 ++ .word do_u8store_0 ++ .word do_u8store_1 ++ .word do_u8store_2 ++ .word do_u8store_3 ++ .word do_u4store_0 ++ .word do_u4store_1 ++ .word do_u4store_2 ++ .word do_u4store_3 ++ .word do_u4astore ++ .word do_u8astore ++ .word do_u4astore ++ .word do_u8astore ++ .word do_aastore ++ .word do_bastore ++ .word do_u2astore ++ .word do_u2astore ++ .word do_jpop ++ .word do_jpop2 ++ .word do_dup ++ .word do_dup_x1 ++ .word do_dup_x2 ++ .word do_dup2 ++ .word do_dup2_x1 ++ .word do_dup2_x2 ++ .word do_swap ++ .word do_iadd ++ .word do_ladd ++ .word do_fadd ++ .word do_dadd ++ .word do_isub ++ .word do_lsub ++ .word do_fsub ++ .word do_dsub ++ .word do_imul ++ .word do_lmul ++ .word do_fmul ++ .word do_dmul ++ .word do_idiv ++ .word do_ldiv ++ .word do_fdiv ++ .word do_ddiv ++ .word do_irem ++ .word do_lrem ++ .word do_frem ++ .word do_drem ++ .word do_ineg ++ .word do_lneg ++ .word do_fneg ++ .word do_dneg ++ .word do_ishl ++ .word do_lshl ++ .word do_ishr ++ .word do_lshr ++ .word do_iushr ++ .word do_lushr ++ .word do_iand ++ .word do_land ++ .word do_ior ++ .word do_lor ++ .word do_ixor ++ .word do_lxor ++ .word do_iinc ++ .word do_i2l ++ .word do_i2f ++ .word do_i2d ++ .word do_l2i ++ .word do_l2f ++ .word do_l2d ++ .word do_f2i ++ .word do_f2l ++ .word do_f2d ++ .word do_d2i ++ .word do_d2l ++ .word do_d2f ++ .word do_i2b ++ .word do_i2c ++ .word do_i2s ++ .word do_lcmp ++ .word do_fcmpl ++ .word do_fcmpg ++ .word do_dcmpl ++ .word do_dcmpg ++ .word do_ifeq_safe ++ .word do_ifne_safe ++ .word do_iflt_safe ++ .word do_ifge_safe ++ .word do_ifgt_safe ++ .word do_ifle_safe ++ .word do_if_icmpeq_safe ++ .word do_if_icmpne_safe ++ .word do_if_icmplt_safe ++ .word do_if_icmpge_safe ++ .word do_if_icmpgt_safe ++ .word do_if_icmple_safe ++ .word do_if_icmpeq_safe ++ .word do_if_icmpne_safe ++ .word do_goto_safe ++ .word do_jsr ++ .word do_ret ++ .word do_tableswitch ++ .word do_lookupswitch ++ .word do_ireturn_safe ++ .word do_lreturn_safe ++ .word do_ireturn_safe ++ .word do_lreturn_safe ++ .word do_ireturn_safe ++ .word do_return_safe ++ .word do_getstatic ++ .word do_putstatic ++ .word do_getfield ++ .word do_putfield ++ .word do_invokevirtual ++ .word do_invokespecial ++ .word do_invokestatic ++ .word do_invokeinterface ++ .word do_undefined ++ .word do_new ++ .word do_newarray ++ .word do_anewarray ++ .word do_arraylength ++ .word do_athrow ++ .word do_checkcast ++ .word do_instanceof ++ .word do_monitorenter ++ .word do_monitorexit ++ .word do_wide ++ .word do_multianewarray ++ .word do_ifeq_safe ++ .word do_ifne_safe ++ .word do_goto_w ++ .word do_jsr_w ++ .word do_breakpoint ++ .word do_undefined ++ .word do_bgetfield ++ .word do_cgetfield ++ .word do_undefined ++ .word do_undefined ++ .word do_igetfield ++ .word do_lgetfield ++ .word do_sgetfield ++ .word do_aputfield ++ .word do_bputfield ++ .word do_cputfield ++ .word do_undefined ++ .word do_undefined ++ .word do_iputfield ++ .word do_lputfield ++ .word do_undefined ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_iaccess_0 ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .word do_invokevfinal ++ .word do_undefined ++ .word do_undefined ++ .word do_return_register_finalizer ++ .word do_undefined ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_0_iconst_N ++ .word do_iload_iconst_N ++ .word do_invokeresolved ++ .word do_iadd_istore_N ++ .word do_isub_istore_N ++ .word do_iand_istore_N ++ .word do_ior_istore_N ++ .word do_ixor_istore_N ++ .word do_iadd_u4store ++ .word do_isub_u4store ++ .word do_iand_u4store ++ .word do_ior_u4store ++ .word do_ixor_u4store ++ .word do_invokespecialresolved ++ .word do_invokestaticresolved ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ .word do_undefined ++ ++ SUB_DISPATCH_TABLES ++ ++ .section .init_array,"aw",%init_array ++ .word bci_init(target1) ++ ++ .data ++ ALIGN_DATA ++ .word 0, 0, 0, 0, 0 ++ThreadLocalStorage_thread_index: .word 0 ++AbstractInterpreter_notice_safepoints: .word 0 ++Bytecodes_name_Address: .word 0 ++UseTLAB_Address: .word 0 ++ZeroTLAB_Address: .word 0 ++Universe_collectedHeap_Address: .word 0 ++UseBiasedLocking_Address: .word 0 ++always_do_update_barrier_Address: .word 0 ++VmSymbols_symbols_Address: .word 0 ++SafePointSynchronize_state_Address: .word 0 ++InterpreterRuntime_slow_signature_handler_Address: .word 0 ++XXX: ++opclabels_data: ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++#endif +diff -ruNE ports/hotspot/src/cpu/zero/vm/mkbc.c ports/hotspot/src/cpu/zero/vm/mkbc.c +--- ports/hotspot/src/cpu/zero/vm/mkbc.c 1970-01-01 00:00:00.000000000 +0000 ++++ ports/hotspot/src/cpu/zero/vm/mkbc.c 2009-06-29 09:51:02.000000000 +0000 +@@ -0,0 +1,581 @@ ++#include ++#include ++#include ++#include ++ ++#define DEFAULT_PREFIX "do_" ++ ++static char *prefix = DEFAULT_PREFIX; ++ ++#define ISALPHA(c) (isalpha(c) || (c) == '_') ++#define ISALNUM(c) (isalnum(c) || (c) == '_') ++ ++FILE *source_f, *bci_f, *bci_f; ++ ++typedef struct Bytecode { ++ char *name; ++ int len; ++} Bytecode; ++ ++typedef struct StringList { ++ struct StringList *next; ++ char *line; ++} StringList; ++ ++typedef struct OpcodeList { ++ struct OpcodeList *next; ++ long opcode; ++} OpcodeList; ++ ++typedef struct OpcodeSequence { ++ struct OpcodeSequence *next; ++ OpcodeList *opcode_list; ++} OpcodeSequence; ++ ++typedef struct BytecodeImpl { ++ struct BytecodeImpl *next; ++ OpcodeSequence *opcode_seq; ++ StringList *macro_impl; ++ StringList *direct_impl; ++ int len; ++ char *name; ++ char *do_name; ++} BytecodeImpl; ++ ++Bytecode bytecodes[256]; ++ ++BytecodeImpl *the_impl = 0; ++BytecodeImpl **the_impl_ptr = &the_impl; ++ ++#define BUFLEN 1024 ++ ++static int lineno = 1; ++ ++void fatal(const char *s) ++{ ++ fputs(s, stderr); ++ fputc('\n', stderr); ++ exit(1); ++} ++ ++void outmem(void) ++{ ++ fprintf(stderr, "Out of memory\n"); ++ exit(1); ++} ++ ++void synerr(void) ++{ ++ fprintf(stderr, "Syntax error at line %d\n", lineno); ++ exit(1); ++} ++ ++int readchar() ++{ ++ int c; ++ ++ c = getc(source_f); ++ if (c == '\n') lineno++; ++ return c; ++} ++ ++int readwhitespace(int c, char *buf, int len) ++{ ++ int i = 0; ++ ++ while ((isspace)(c)) { ++ if (buf && i < len-1) buf[i++] = c; ++ c = (readchar)(); ++ } ++ if (buf && i < len) buf[i] = 0; ++ return c; ++} ++ ++int skipwhitespace(int c) ++{ ++ while ((isspace)(c)) { ++ c = (readchar)(); ++ } ++ return c; ++} ++ ++int readeol(int c, char *buf, int len) ++{ ++ int i = 0; ++ ++ while (c != '\n' && c != EOF) { ++ if (buf && i < len-1) buf[i++] = c; ++ c = (readchar)(); ++ } ++ if (buf && i < len) buf[i] = 0; ++ if (c == '\n') c = (readchar)(); ++ return c; ++} ++ ++int skipeol(int c) ++{ ++ while (c != '\n' && c != EOF) c = (readchar)(); ++ if (c == '\n') c = (readchar)(); ++ return c; ++} ++ ++int readsymbol(int c, char *buf, int len) ++{ ++ int i = 0; ++ ++ while (ISALNUM(c)) { ++ if (buf && i < len-1) buf[i++] = c; ++ c = (readchar)(); ++ } ++ if (buf && i < len) buf[i] = 0; ++ return c; ++} ++ ++int bcdef(int c, char *buf, int len) ++{ ++ BytecodeImpl *def; ++ OpcodeSequence *seq; ++ OpcodeSequence **seqp; ++ OpcodeList *opc; ++ OpcodeList **opcp; ++ StringList *macro, **macrop; ++ StringList *direct, **directp; ++ char *name; ++ char *line; ++ int i; ++ int length, overall_len; ++ ++ def = malloc(sizeof(BytecodeImpl)); ++ if (!def) outmem(); ++ def->next = 0; ++ def->opcode_seq = 0; ++ def->macro_impl = 0; ++ def->direct_impl = 0; ++ def->len = -1; ++ *the_impl_ptr = def; ++ the_impl_ptr = &(def->next); ++ seqp = &(def->opcode_seq); ++ overall_len = 0; ++ do { ++ seq = malloc(sizeof(OpcodeSequence)); ++ if (!seq) outmem(); ++ seq->next = 0; ++ seq->opcode_list = 0; ++ *seqp = seq; ++ seqp = &(seq->next); ++ opcp = &(seq->opcode_list); ++ length = -2; ++ do { ++ c = (readchar)(); ++ c = skipwhitespace(c); ++ if (!ISALPHA(c)) synerr(); ++ c = readsymbol(c, buf, len); ++ c = skipwhitespace(c); ++ opc = malloc(sizeof(OpcodeList)); ++ if (!opc) outmem(); ++ opc->next = 0; ++ opc->opcode = -1; ++ *opcp = opc; ++ opcp = &(opc->next); ++ name = strdup(buf); ++ if (!name) outmem(); ++ for (i = 0; i < 256; i++) { ++ if (strcmp(name, bytecodes[i].name) == 0) { ++ opc->opcode = i; ++ break; ++ } ++ } ++ if (i == 256) { ++ fprintf(stderr, "No such opcode '%s'\n", name); ++ exit(1); ++ } ++ if (length == -2) length = bytecodes[i].len; ++ } while (c == ','); ++ overall_len += length; ++ if (c != ')') synerr(); ++ c = (readchar)(); ++ c = skipwhitespace(c); ++ } while (c == '('); ++// strcpy(buf, "do_"); ++ *buf = 0; ++ if (ISALPHA(c)) { ++ c = readsymbol(c, buf, len); ++ c = skipwhitespace(c); ++ } else { ++ seq = def->opcode_seq; ++// strcat(buf, "bytecode"); ++ while (seq) { ++ opc = seq->opcode_list; ++ if (*buf) strcat(buf, "_"); ++ strcat(buf, bytecodes[opc->opcode].name); ++// sprintf(buf+strlen(buf), "_%ld", opc->opcode); ++ seq = seq->next; ++ } ++ } ++ name = strdup(buf); ++ if (!name) outmem(); ++ def->name = name; ++ def->do_name = name; ++ def->len = overall_len; ++ if (c != '{') synerr(); ++ c = (readchar)(); ++ while (c != '\n' && isspace(c)) c = (readchar)(); ++ if (c != '\n') synerr(); ++ c = (readchar)(); ++ c = readwhitespace(c, buf, len); ++ macrop = &(def->macro_impl); ++ while (c != '}' && c != EOF) { ++ c = readeol(c, buf + strlen(buf), len - strlen(buf)); ++ line = strdup(buf); ++ if (!line) outmem(); ++ macro = malloc(sizeof(StringList)); ++ if (!macro) outmem(); ++ *macrop = macro; ++ macrop = &(macro->next); ++ macro->next = 0; ++ macro->line = line; ++ c = readwhitespace(c, buf, len); ++ } ++ if (c != '}') synerr(); ++ c = (readchar)(); ++ c = skipwhitespace(c); ++ if (ISALPHA(c)) { ++ c = readsymbol(c, buf, len); ++ c = skipwhitespace(c); ++ name = strdup(buf); ++ if (!name) outmem(); ++ def->do_name = name; ++ } ++ if (c == '[') { ++ c = (readchar)(); ++ while (c != '\n' && isspace(c)) c = (readchar)(); ++ if (c != '\n') synerr(); ++ c = (readchar)(); ++ c = readwhitespace(c, buf, len); ++ directp = &(def->direct_impl); ++ while (c != ']' && c != EOF) { ++ c = readeol(c, buf + strlen(buf), len - strlen(buf)); ++ line = strdup(buf); ++ if (!line) outmem(); ++ direct = malloc(sizeof(StringList)); ++ if (!direct) outmem(); ++ *directp = direct; ++ directp = &(direct->next); ++ direct->next = 0; ++ direct->line = line; ++ c = readwhitespace(c, buf, len); ++ } ++ if (c != ']') synerr(); ++ c = (readchar)(); ++ } ++ return c; ++} ++ ++void mkbc(void) ++{ ++ char buf[BUFLEN]; ++ char *endptr; ++ int c; ++ char *name; ++ long opcode, len; ++ ++ c = (readchar)(); ++ c = skipwhitespace(c); ++ while (c != EOF) { ++ if (c == '#') { ++ c = skipeol(c); ++ } else if (ISALPHA(c)) { ++ c = readsymbol(c, buf, BUFLEN); ++ c = skipwhitespace(c); ++ if (c == '=') { ++ name = strdup(buf); ++ if (!name) outmem(); ++ c = (readchar)(); ++ c = skipwhitespace(c); ++ if (!(isdigit)(c)) synerr(); ++ c = readsymbol(c, buf, BUFLEN); ++ opcode = strtol(buf, &endptr, 0); ++ if (*endptr != 0) synerr(); ++ c = skipwhitespace(c); ++ if (c != ',') synerr(); ++ c = (readchar)(); ++ c = skipwhitespace(c); ++ if (!(isdigit)(c)) synerr(); ++ c = readsymbol(c, buf, BUFLEN); ++ len = strtol(buf, &endptr, 0); ++ if (*endptr != 0) synerr(); ++ bytecodes[opcode].name = name; ++ bytecodes[opcode].len = len; ++ } ++ } else if (c == '(') { ++ c = bcdef(c, buf, BUFLEN); ++ } else synerr(); ++ c = skipwhitespace(c); ++ } ++} ++ ++typedef struct TableEntry { ++ BytecodeImpl *impl; ++ char *impl_name; ++ char *def_name; ++ struct TableEntry *subtable; ++} TableEntry; ++ ++TableEntry *the_table; ++ ++int is_duplicate(TableEntry *a, TableEntry *b) ++{ ++ int i; ++ char buf[256]; ++ ++ for (i = 0; i < 256; i++) { ++ if (a[i].subtable || b[i].subtable) { ++ if (!(a[i].subtable) || !(b[i].subtable)) return 0; ++ if (!is_duplicate(a[i].subtable, b[i].subtable)) return 0; ++ } else if (a[i].impl_name && b[i].impl_name) { ++ if (strcmp(a[i].impl_name, b[i].impl_name) != 0) ++ return 0; ++ } else if (a[i].def_name && b[i].def_name) { ++ if (strcmp(a[i].def_name, b[i].def_name) != 0) ++ return 0; ++ } else return 0; ++ } ++ return 1; ++} ++ ++void remove_duplicates(TableEntry *table, int start, int *table_indices, int depth) ++{ ++ TableEntry *start_entry = table[start].subtable; ++ int i, j; ++ ++ if (!start_entry) fatal("Subtable is NULL in remove_duplicates!!!"); ++ for (i = start+1; i < 256; i++) { ++ if (table[i].subtable) { ++ if (is_duplicate(start_entry, table[i].subtable)) { ++ fputs("dispatch", bci_f); ++ for (j = 0; j < depth; j++) { ++ fputc('_', bci_f); ++ fputs(bytecodes[table_indices[j]].name, bci_f); ++ } ++ fputc('_', bci_f); ++ fputs(bytecodes[i].name, bci_f); ++ fputs(":\n", bci_f); ++ free(table[i].subtable); ++ table[i].subtable = 0; ++ } ++ } ++ } ++} ++ ++void writeouttable(TableEntry *table, int *table_indices, int depth) ++{ ++ int i, j; ++ int len; ++ ++ for (i = 0; i < 256; i++) { ++ if (table[i].subtable) { ++ len = 0; ++ fputs("\t.word\tdispatch", bci_f); ++ table_indices[depth] = i; ++ for (j = 0; j <= depth; j++) { ++ fputc('_', bci_f); ++ fputs(bytecodes[table_indices[j]].name, bci_f); ++ len += bytecodes[table_indices[j]].len; ++ } ++ fprintf(bci_f, "+%d\n", len); ++ } else { ++ if (table[i].impl_name) ++ fprintf(bci_f, "\t.word\t%s%s\n", prefix, table[i].impl_name); ++ else ++ fprintf(bci_f, "\t.word\t%s%s\n", prefix, table[i].def_name); ++ } ++ } ++ if (depth == 0) { ++ fputs("\t.endm\n", bci_f); ++ fputs("\t.macro\tSUB_DISPATCH_TABLES\n", bci_f); ++ } ++ for (i = 0; i < 256; i++) { ++ if (table[i].subtable) { ++ fputs("dispatch", bci_f); ++ table_indices[depth] = i; ++ for (j = 0; j <= depth; j++) { ++ fputc('_', bci_f); ++ fputs(bytecodes[table_indices[j]].name, bci_f); ++ } ++ fputs(":\n", bci_f); ++ remove_duplicates(table, i, table_indices, depth); ++ writeouttable(table[i].subtable, table_indices, depth+1); ++ } ++ } ++} ++ ++void do_tableentry(BytecodeImpl *impl, TableEntry **tablep, int *table_indices, int depth) ++{ ++ TableEntry *table; ++ char *def = "undefined"; ++ int i,j; ++ ++ if (depth == 0) fatal("Depth = 0 for tableentry\n"); ++ for (i = 0; i < depth; i++) { ++ table = *tablep; ++ if (!table) { ++ table = malloc(sizeof(TableEntry) * 256); ++ if (!table) outmem(); ++ *tablep = table; ++ def = strdup(def); ++ if (!def) outmem(); ++ for (j = 0; j < 256; j++) { ++ table[j].impl_name = 0; ++ table[j].def_name = def; ++ table[j].subtable = 0; ++ } ++ } ++ table = &table[table_indices[i]]; ++ tablep = &(table->subtable); ++ if (table->impl_name) def = table->def_name; ++ } ++ if (!table->impl_name) ++ table->impl_name = impl->do_name; ++ table->def_name = impl->do_name; ++} ++ ++void dumpseq(BytecodeImpl *impl, OpcodeSequence *seq, int *table_indices, int depth) ++{ ++ OpcodeList *opc; ++ ++ opc = seq->opcode_list; ++ while (opc) { ++ table_indices[depth++] = opc->opcode; ++ if (seq->next != NULL) { ++ dumpseq(impl, seq->next, table_indices, depth); ++ } else { ++ do_tableentry(impl, &the_table, table_indices, depth); ++ } ++ depth--; ++ opc = opc->next; ++ } ++} ++ ++void dumptable(void) ++{ ++ BytecodeImpl *impl = the_impl; ++ int table_indices[256]; ++ int j; ++ char buf[256]; ++ char *def; ++ ++ the_table = malloc(sizeof(TableEntry) * 256); ++ if (!the_table) outmem(); ++ for (j = 0; j < 256; j++) { ++ sprintf(buf, "%s", bytecodes[j].name); ++ def = strdup(buf); ++ if (!def) outmem(); ++ the_table[j].impl_name = 0; ++ the_table[j].def_name = def; ++ the_table[j].subtable = 0; ++ } ++ while (impl) { ++ dumpseq(impl, impl->opcode_seq, table_indices, 0); ++ impl = impl->next; ++ } ++ fputs("\t.macro\tMAIN_DISPATCH_TABLE\n", bci_f); ++ writeouttable(the_table, table_indices, 0); ++ fputs("\t.endm\n", bci_f); ++} ++ ++void dumpimpl(void) ++{ ++ BytecodeImpl *impl = the_impl; ++ OpcodeList *opc; ++ StringList *code; ++ StringList *sl; ++ char buf[BUFLEN]; ++ char macro[BUFLEN]; ++ ++ while (impl) { ++ buf[0] = 0; ++ fprintf(bci_f, "@-----------------------------------------------------------------------------\n"); ++ fprintf(bci_f, "\t.macro\t%s\tjpc_off=0, seq_len=%d\n", impl->name, impl->len); ++ sl = impl->macro_impl; ++ while (sl) { ++ fputs(sl->line, bci_f); ++ fputc('\n', bci_f); ++ sl = sl->next; ++ } ++ fprintf(bci_f, "\t.endm\n\n"); ++ sl = impl->direct_impl; ++ if (sl) { ++ do { ++ fputs(sl->line, bci_f); ++ fputc('\n', bci_f); ++ sl = sl->next; ++ } while (sl); ++ } else { ++ fprintf(bci_f, "\tOpcode\t%s\n", impl->do_name); ++// fprintf(bci_f, "%s:\n", impl->do_name); ++ fprintf(bci_f, "\t%s\n", impl->name); ++// fprintf(bci_f, "\tDISPATCH\t%d\n", impl->len); ++ } ++ impl = impl->next; ++ } ++} ++ ++void dumpbc() ++{ ++ int i; ++ ++ for (i = 0; i < 256; i++) { ++ if (strcmp(bytecodes[i].name, "undefined") != 0) ++ fprintf(bci_f, "#define opc_%s\t\t0x%02x\n", bytecodes[i].name, i); ++ } ++ fputc('\n', bci_f); ++ dumpimpl(); ++ dumptable(); ++} ++ ++void usage(void) ++{ ++ fatal("Usage: mkbc "); ++} ++ ++int main(int argc, char **argv) ++{ ++ int i; ++ char *source, *bci; ++ char *s; ++ ++ source = bci = 0; ++ while (s = *++argv) { ++ if (*s == '-') { ++ if (s[1] == 'P') { ++ prefix = s+2; ++ } else { ++ fprintf(stderr, "Unrecognized option %s\n", s); ++ usage(); ++ } ++ } else { ++ if (!source) source = s; ++ else if (!bci) bci = s; ++ else { ++ fprintf(stderr, "Too many arguments\n"); ++ usage(); ++ } ++ } ++ } ++ if (!bci) { ++ fprintf(stderr, "Too few arguments\n"); ++ usage(); ++ } ++ source_f = fopen(source, "r"); ++ if (!source_f) fatal("Error opening source file"); ++ bci_f = fopen(bci, "w"); ++ if (!bci_f) fatal("Error opening bci file for write"); ++ for (i = 0; i < 256; i++) { ++ bytecodes[i].name = "undefined"; ++ bytecodes[i].len = -1; ++ } ++ mkbc(); ++ dumpbc(); ++ if (fclose(source_f)) fatal("Error reading source"); ++ if (fclose(bci_f)) fatal("Error writing bci"); ++} --- openjdk-6-6b16~pre5.orig/debian/patches/default-jvm-cfg.diff +++ openjdk-6-6b16~pre5/debian/patches/default-jvm-cfg.diff @@ -0,0 +1,66 @@ +--- openjdk/hotspot/src/os/linux/launcher/java.c~ 2008-11-22 01:11:18.000000000 +0100 ++++ openjdk/hotspot/src/os/linux/launcher/java.c 2008-12-17 09:43:09.000000000 +0100 +@@ -1653,7 +1653,7 @@ + ReadKnownVMs(const char *jrepath, char * arch, jboolean speculative) + { + FILE *jvmCfg; +- char jvmCfgName[MAXPATHLEN+20]; ++ char jvmCfgName[MAXPATHLEN+30]; + char line[MAXPATHLEN+20]; + int cnt = 0; + int lineno = 0; +@@ -1674,6 +1674,10 @@ + + jvmCfg = fopen(jvmCfgName, "r"); + if (jvmCfg == NULL) { ++ strcat(jvmCfgName, "-default"); ++ jvmCfg = fopen(jvmCfgName, "r"); ++ } ++ if (jvmCfg == NULL) { + if (!speculative) { + ReportErrorMessage2("Error: could not open `%s'", jvmCfgName, + JNI_TRUE); +--- openjdk/hotspot/src/os/solaris/launcher/java.c~ 2008-11-22 01:11:18.000000000 +0100 ++++ openjdk/hotspot/src/os/solaris/launcher/java.c 2008-12-17 09:43:09.000000000 +0100 +@@ -1653,7 +1653,7 @@ + ReadKnownVMs(const char *jrepath, char * arch, jboolean speculative) + { + FILE *jvmCfg; +- char jvmCfgName[MAXPATHLEN+20]; ++ char jvmCfgName[MAXPATHLEN+30]; + char line[MAXPATHLEN+20]; + int cnt = 0; + int lineno = 0; +@@ -1674,6 +1674,10 @@ + + jvmCfg = fopen(jvmCfgName, "r"); + if (jvmCfg == NULL) { ++ strcat(jvmCfgName, "-default"); ++ jvmCfg = fopen(jvmCfgName, "r"); ++ } ++ if (jvmCfg == NULL) { + if (!speculative) { + ReportErrorMessage2("Error: could not open `%s'", jvmCfgName, + JNI_TRUE); +--- openjdk/jdk/src/share/bin/java.c~ 2008-11-22 01:11:18.000000000 +0100 ++++ openjdk/jdk/src/share/bin/java.c 2008-12-17 09:43:09.000000000 +0100 +@@ -1653,7 +1653,7 @@ + ReadKnownVMs(const char *jrepath, char * arch, jboolean speculative) + { + FILE *jvmCfg; +- char jvmCfgName[MAXPATHLEN+20]; ++ char jvmCfgName[MAXPATHLEN+30]; + char line[MAXPATHLEN+20]; + int cnt = 0; + int lineno = 0; +@@ -1674,6 +1674,10 @@ + + jvmCfg = fopen(jvmCfgName, "r"); + if (jvmCfg == NULL) { ++ strcat(jvmCfgName, "-default"); ++ jvmCfg = fopen(jvmCfgName, "r"); ++ } ++ if (jvmCfg == NULL) { + if (!speculative) { + ReportErrorMessage2("Error: could not open `%s'", jvmCfgName, + JNI_TRUE); --- openjdk-6-6b16~pre5.orig/debian/patches/ld-symbolic-functions-original.diff +++ openjdk-6-6b16~pre5/debian/patches/ld-symbolic-functions-original.diff @@ -0,0 +1,43 @@ +--- openjdk/corba/make/common/Defs-linux.gmk.orig 2008-07-26 23:40:27.434474148 +0200 ++++ openjdk/corba/make/common/Defs-linux.gmk 2008-07-26 23:42:08.776002862 +0200 +@@ -205,7 +205,7 @@ + + EXTRA_LIBS += -lc + +-LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs ++LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs -Wl,-Bsymbolic-functions + LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) + + # +--- openjdk/hotspot/agent/src/os/linux/Makefile.orig 2008-07-26 23:40:27.434474148 +0200 ++++ openjdk/hotspot/agent/src/os/linux/Makefile 2008-07-26 23:42:08.776002862 +0200 +@@ -62,7 +62,7 @@ + + $(LIBSA): $(OBJS) mapfile + if [ ! -d $(ARCH) ] ; then mkdir $(ARCH) ; fi +- $(GCC) -shared $(LFLAGS_LIBSA) -o $(LIBSA) $(OBJS) $(LIBS) ++ $(GCC) -shared -Wl,-Bsymbolic-functions $(LFLAGS_LIBSA) -o $(LIBSA) $(OBJS) $(LIBS) + + test.o: test.c + $(GCC) -c -o test.o -g -D_GNU_SOURCE -D_$(ARCH)_ $(if $(filter $(ARCH),alpha),,-D$(ARCH)) $(INCLUDES) test.c +--- openjdk/hotspot/build/linux/makefiles/gcc.make.orig 2008-07-26 23:40:27.464474601 +0200 ++++ openjdk/hotspot/build/linux/makefiles/gcc.make 2008-07-26 23:42:08.776002862 +0200 +@@ -142,6 +142,7 @@ + + # Enable linker optimization + LFLAGS += -Xlinker -O1 ++LFLAGS += -Wl,-Bsymbolic-functions + + # Use $(MAPFLAG:FILENAME=real_file_name) to specify a map file. + MAPFLAG = -Xlinker --version-script=FILENAME +--- openjdk/jdk/make/common/Defs-linux.gmk.orig 2008-07-26 23:40:27.444474299 +0200 ++++ openjdk/jdk/make/common/Defs-linux.gmk 2008-07-26 23:42:08.776002862 +0200 +@@ -215,7 +215,7 @@ + + EXTRA_LIBS += -lc + +-LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs ++LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs -Wl,-Bsymbolic-functions + LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) + + # --- openjdk-6-6b16~pre5.orig/debian/patches/hotspot-warn-no-errformat.diff +++ openjdk-6-6b16~pre5/debian/patches/hotspot-warn-no-errformat.diff @@ -0,0 +1,22 @@ +--- openjdk/hotspot/make/solaris/makefiles/gcc.make~ 2008-12-02 19:48:28.000000000 +0100 ++++ openjdk/hotspot/make/solaris/makefiles/gcc.make 2008-12-02 19:50:49.000000000 +0100 +@@ -110,7 +110,7 @@ + + # Compiler warnings are treated as errors + # Commented out for now because of gcc 4.3 warnings OpenJDK isn't ready for +-# WARNINGS_ARE_ERRORS = -Werror ++# WARNINGS_ARE_ERRORS = -Werror -Wno-error=format + # Enable these warnings. See 'info gcc' about details on these options + ADDITIONAL_WARNINGS = -Wpointer-arith -Wconversion -Wsign-compare + CFLAGS_WARN/DEFAULT = $(WARNINGS_ARE_ERRORS) $(ADDITIONAL_WARNINGS) +--- openjdk/hotspot/make/linux/makefiles/gcc.make~ 2008-12-02 19:48:51.000000000 +0100 ++++ openjdk/hotspot/make/linux/makefiles/gcc.make 2008-12-02 19:51:04.000000000 +0100 +@@ -99,7 +99,7 @@ + endif + + # Compiler warnings are treated as errors +-# WARNINGS_ARE_ERRORS = -Werror ++# WARNINGS_ARE_ERRORS = -Werror -Wno-error=format + + # Except for a few acceptable ones + # Since GCC 4.3, -Wconversion has changed its meanings to warn these implicit --- openjdk-6-6b16~pre5.orig/debian/patches/fontconfig-arphic-uming.diff +++ openjdk-6-6b16~pre5/debian/patches/fontconfig-arphic-uming.diff @@ -0,0 +1,244 @@ +--- openjdk/jdk/src/solaris/classes/sun/awt/fontconfigs/linux.fontconfig.Ubuntu.properties.orig 2008-10-12 10:42:26.000000000 +0000 ++++ openjdk/jdk/src/solaris/classes/sun/awt/fontconfigs/linux.fontconfig.Ubuntu.properties 2008-10-12 10:43:49.000000000 +0000 +@@ -25,107 +25,156 @@ + + # Version + +-# Uses Ubuntu 6.10 (Edgy) fonts and file paths. ++# Used for Ubuntu 6.10 (edgy), Ubuntu 7.04 (feisty), Ubuntu 7.10 (gutsy), ++# Debian 4.0 (etch), Debian 5.0 (lenny) fonts and file paths. + version=1 + + # Component Font Mappings + ++allfonts.chinese-gb18030=-misc-ar pl shanheisun uni-medium-r-normal--*-*-*-*-p-*-iso10646-1 ++allfonts.chinese-gb18030.motif=-misc-ar pl shanheisun uni-medium-r-normal--*-*-*-*-p-*-iso10646-1 ++allfonts.chinese-big5=-misc-ar pl shanheisun uni-medium-r-normal--*-*-*-*-p-*-iso10646-1 ++allfonts.chinese-big5.motif=-misc-ar pl shanheisun uni-medium-r-normal--*-*-*-*-p-*-iso10646-1 ++ + dialog.plain.latin-1=DejaVu Sans +-dialog.plain.japanese-x0208=Kochi Gothic +-dialog.plain.korean=Baekmuk Dotum ++dialog.plain.latin-1.motif=LuxiSans-Regular ++dialog.plain.japanese-x0208=-vlgothic-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++dialog.plain.korean=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* ++dialog.plain.korean.motif=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* + + dialog.bold.latin-1=DejaVu Sans Bold +-dialog.bold.japanese-x0208=Kochi Gothic +-dialog.bold.korean=Baekmuk Dotum ++dialog.bold.latin-1.motif=LuxiSans-Bold ++dialog.bold.japanese-x0208=-vlgothic-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++dialog.bold.korean=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* ++dialog.bold.korean.motif=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* + + dialog.italic.latin-1=DejaVu Sans Oblique +-dialog.italic.japanese-x0208=Kochi Gothic +-dialog.italic.korean=Baekmuk Dotum ++dialog.italic.latin-1.motif=LuxiSans-Oblique ++dialog.italic.japanese-x0208=-vlgothic-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++dialog.italic.korean=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* ++dialog.italic.korean.motif=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* + + dialog.bolditalic.latin-1=DejaVu Sans Bold Oblique +-dialog.bolditalic.japanese-x0208=Kochi Gothic +-dialog.bolditalic.korean=Baekmuk Dotum +- ++dialog.bolditalic.latin-1.motif=LuxiSans-BoldOblique ++dialog.bolditalic.japanese-x0208=-vlgothic-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++dialog.bolditalic.korean=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* ++dialog.bolditalic.korean.motif=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* + + sansserif.plain.latin-1=DejaVu Sans +-sansserif.plain.japanese-x0208=Kochi Gothic +-sansserif.plain.korean=Baekmuk Dotum ++sansserif.plain.latin-1.motif=LuxiSans-Regular ++sansserif.plain.japanese-x0208=-vlgothic-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++sansserif.plain.korean=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* ++sansserif.plain.korean.motif=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* + + sansserif.bold.latin-1=DejaVu Sans Bold +-sansserif.bold.japanese-x0208=Kochi Gothic +-sansserif.bold.korean=Baekmuk Dotum ++sansserif.bold.latin-1.motif=LuxiSans-Bold ++sansserif.bold.japanese-x0208=-vlgothic-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++sansserif.bold.korean=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* ++sansserif.bold.korean.motif=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* + + sansserif.italic.latin-1=DejaVu Sans Oblique +-sansserif.italic.japanese-x0208=Kochi Gothic +-sansserif.italic.korean=Baekmuk Dotum ++sansserif.italic.latin-1.motif=LuxiSans-Oblique ++sansserif.italic.japanese-x0208=-vlgothic-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++sansserif.italic.korean=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* ++sansserif.italic.korean.motif=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* + + sansserif.bolditalic.latin-1=DejaVu Sans Bold Oblique +-sansserif.bolditalic.japanese-x0208=Kochi Gothic +-sansserif.bolditalic.korean=Baekmuk Dotum +- ++sansserif.bolditalic.latin-1.motif=LuxiSans-BoldOblique ++sansserif.bolditalic.japanese-x0208=-vlgothic-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++sansserif.bolditalic.korean=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* ++sansserif.bolditalic.korean.motif=-misc-baekmuk gulim-medium-r-normal--*-%d-*-*-c-*-*-* + + serif.plain.latin-1=DejaVu Serif +-serif.plain.japanese-x0208=Kochi Mincho +-serif.plain.korean=Baekmuk Batang ++serif.plain.latin-1.motif=LuxiSerif-Regular ++serif.plain.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++serif.plain.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++serif.plain.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + serif.bold.latin-1=DejaVu Serif Bold +-serif.bold.japanese-x0208=Kochi Mincho +-serif.bold.korean=Baekmuk Batang ++serif.bold.latin-1.motif=LuxiSerif-Bold ++serif.bold.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++serif.bold.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++serif.bold.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + serif.italic.latin-1=DejaVu Serif Oblique +-serif.italic.japanese-x0208=Kochi Mincho +-serif.italic.korean=Baekmuk Batang ++serif.italic.latin-1.motif=LuxiSerif-Oblique ++serif.italic.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++serif.italic.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++serif.italic.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + serif.bolditalic.latin-1=DejaVu Serif Bold Oblique +-serif.bolditalic.japanese-x0208=Kochi Mincho +-serif.bolditalic.korean=Baekmuk Batang +- ++serif.bolditalic.latin-1.motif=LuxiSerif-BoldOblique ++serif.bolditalic.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++serif.bolditalic.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++serif.bolditalic.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + monospaced.plain.latin-1=DejaVu Sans Mono +-monospaced.plain.japanese-x0208=Kochi Gothic +-monospaced.plain.korean=Baekmuk Dotum ++monospaced.plain.latin-1.motif=LuxiMono-Regular ++monospaced.plain.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++monospaced.plain.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++monospaced.plain.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + monospaced.bold.latin-1=DejaVu Sans Mono Bold +-monospaced.bold.japanese-x0208=Kochi Gothic +-monospaced.bold.korean=Baekmuk Dotum ++monospaced.bold.latin-1.motif=LuxiMono-Bold ++monospaced.bold.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++monospaced.bold.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++monospaced.bold.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + monospaced.italic.latin-1=DejaVu Sans Mono Oblique +-monospaced.italic.japanese-x0208=Kochi Gothic +-monospaced.italic.korean=Baekmuk Dotum ++monospaced.italic.latin-1.motif=LuxiMono-Oblique ++monospaced.italic.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++monospaced.italic.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++monospaced.italic.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + monospaced.bolditalic.latin-1=DejaVu Sans Mono Bold Oblique +-monospaced.bolditalic.japanese-x0208=Kochi Gothic +-monospaced.bolditalic.korean=Baekmuk Dotum +- ++monospaced.bolditalic.latin-1.motif=LuxiMono-BoldOblique ++monospaced.bolditalic.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++monospaced.bolditalic.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++monospaced.bolditalic.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + dialoginput.plain.latin-1=DejaVu Sans Mono +-dialoginput.plain.japanese-x0208=Kochi Gothic +-dialoginput.plain.korean=Baekmuk Dotum ++dialoginput.plain.latin-1.motif=LuxiMono-Regular ++dialoginput.plain.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++dialoginput.plain.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++dialoginput.plain.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + dialoginput.bold.latin-1=DejaVu Sans Mono Bold +-dialoginput.bold.japanese-x0208=Kochi Gothic +-dialoginput.bold.korean=Baekmuk Dotum ++dialoginput.bold.latin-1.motif=LuxiMono-Bold ++dialoginput.bold.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++dialoginput.bold.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++dialoginput.bold.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + dialoginput.italic.latin-1=DejaVu Sans Mono Oblique +-dialoginput.italic.japanese-x0208=Kochi Gothic +-dialoginput.italic.korean=Baekmuk Dotum ++dialoginput.italic.latin-1.motif=LuxiMono-Oblique ++dialoginput.italic.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++dialoginput.italic.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++dialoginput.italic.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + dialoginput.bolditalic.latin-1=DejaVu Sans Mono Bold Oblique +-dialoginput.bolditalic.japanese-x0208=Kochi Gothic +-dialoginput.bolditalic.korean=Baekmuk Dotum +- +-allfonts.chinese-big5=AR PL ZenKai Uni +-allfonts.chinese-gb18030=AR PL ZenKai Uni ++dialoginput.bolditalic.latin-1.motif=LuxiMono-BoldOblique ++dialoginput.bolditalic.japanese-x0208=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 ++dialoginput.bolditalic.korean=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* ++dialoginput.bolditalic.korean.motif=-misc-baekmuk batang-medium-r-normal--*-%d-*-*-c-*-*-* + + # Search Sequences + + sequence.allfonts=latin-1 +-sequence.allfonts.Big5=chinese-big5,latin-1 +-sequence.allfonts.x-euc-jp-linux=japanese-x0208,latin-1 +-sequence.allfonts.EUC-KR=korean,latin-1 +-sequence.allfonts.GB18030=chinese-gb18030,latin-1 ++sequence.allfonts.UTF-8.ko=latin-1,korean ++sequence.allfonts.UTF-8=latin-1,chinese-gb18030 ++sequence.allfonts.UTF-8.ja=latin-1,japanese-x0208 ++sequence.allfonts.UTF-8.zh.CN=latin-1,chinese-gb18030 ++sequence.allfonts.UTF-8.zh.TW=latin-1,chinese-big5 ++sequence.allfonts.Big5=latin-1,chinese-big5 ++sequence.allfonts.GB2312=latin-1,chinese-gb18030 ++sequence.allfonts.x-euc-jp-linux=latin-1,japanese-x0208 ++sequence.allfonts.EUC-KR=latin-1,korean ++sequence.allfonts.GB18030=latin-1,chinese-gb18030 + sequence.fallback=chinese-big5,chinese-gb18030,japanese-x0208,korean + ++# Exclusion Ranges ++ ++exclusion.japanese-x0208=0390-03d6,2200-22ef,2701-27be ++ + # Font File Names + + filename.DejaVu_Sans=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf +@@ -143,8 +192,27 @@ + filename.DejaVu_Serif_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-Oblique.ttf + filename.DejaVu_Serif_Bold_Oblique=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif-BoldOblique.ttf + +-filename.Kochi_Gothic=/usr/share/fonts/truetype/kochi/kochi-gothic-subst.ttf +-filename.Kochi_Mincho=/usr/share/fonts/truetype/kochi/kochi-mincho-subst.ttf +-filename.AR_PL_ZenKai_Uni=/usr/share/fonts//truetype/arphic/ukai.ttf +-filename.Baekmuk_Dotum=/usr/share/fonts/truetype/baekmuk/dotum.ttf +-filename.Baekmuk_Batang=/usr/share/fonts/truetype/baekmuk/batang.ttf ++filename.-misc-ar_pl_shanheisun_uni-medium-r-normal--*-*-*-*-p-*-iso10646-1=/usr/share/fonts/truetype/arphic/uming.ttf ++filename.-misc-baekmuk_batang-medium-r-normal--*-%d-*-*-c-*-*-*=/usr/share/fonts/truetype/baekmuk/batang.ttf ++filename.-misc-baekmuk_gulim-medium-r-normal--*-%d-*-*-c-*-*-*=/usr/share/fonts/truetype/baekmuk/gulim.ttf ++filename.-vlgothic-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0=/usr/share/fonts/truetype/vlgothic/VL-Gothic-Regular.ttf ++filename.-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0=/usr/share/fonts/truetype/sazanami/sazanami-mincho.ttf ++ ++filename.LuxiSans-Regular=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxisr.ttf ++filename.LuxiSans-Bold=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxisb.ttf ++filename.LuxiSans-Oblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxisri.ttf ++filename.LuxiSans-BoldOblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxisbi.ttf ++filename.LuxiMono-Regular=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luximr.ttf ++filename.LuxiMono-Bold=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luximb.ttf ++filename.LuxiMono-Oblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luximri.ttf ++filename.LuxiMono-BoldOblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luximbi.ttf ++filename.LuxiSerif-Regular=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxirr.ttf ++filename.LuxiSerif-Bold=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxirb.ttf ++filename.LuxiSerif-Oblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxirri.ttf ++filename.LuxiSerif-BoldOblique=/usr/share/fonts/truetype/ttf-xfree86-nonfree/luxirbi.ttf ++ ++# AWT X11 font paths ++awtfontpath.latin-1=/usr/share/fonts/X11/Type1 ++awtfontpath.chinese-gb18030=/usr/share/fonts/truetype/arphic ++awtfontpath.japanese-x0208=/usr/share/fonts/truetype/vlgothic ++awtfontpath.korean=/usr/share/fonts/truetype/baekmuk --- openjdk-6-6b16~pre5.orig/debian/patches/openjdk-ubuntu-branding.patch +++ openjdk-6-6b16~pre5/debian/patches/openjdk-ubuntu-branding.patch @@ -0,0 +1,11 @@ +--- openjdk/hotspot/src/share/vm/runtime/arguments.cpp~ 2008-12-17 10:14:03.000000000 +0100 ++++ openjdk/hotspot/src/share/vm/runtime/arguments.cpp 2008-12-17 10:16:29.000000000 +0100 +@@ -25,7 +25,7 @@ + #include "incls/_precompiled.incl" + #include "incls/_arguments.cpp.incl" + +-#define DEFAULT_VENDOR_URL_BUG "http://icedtea.classpath.org/bugzilla" ++#define DEFAULT_VENDOR_URL_BUG "https://bugs.launchpad.net/ubuntu/+source/openjdk-6/" + #define DEFAULT_JAVA_LAUNCHER "generic" + + char** Arguments::_jvm_flags_array = NULL; --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-hotspot-opt-O0.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-hotspot-opt-O0.diff @@ -0,0 +1,11 @@ +--- openjdk/hotspot/make/linux/makefiles/gcc.make~ 2007-11-29 12:38:22.578339247 +0100 ++++ openjdk/hotspot/make/linux/makefiles/gcc.make 2007-11-29 12:42:28.742052571 +0100 +@@ -103,7 +103,7 @@ + CFLAGS_WARN/BYFILE = $(CFLAGS_WARN/$@)$(CFLAGS_WARN/DEFAULT$(CFLAGS_WARN/$@)) + + # The flags to use for an Optimized g++ build +-OPT_CFLAGS += -O3 ++OPT_CFLAGS += -O0 + + # Hotspot uses very unstrict aliasing turn this optimization off + OPT_CFLAGS += -fno-strict-aliasing --- openjdk-6-6b16~pre5.orig/debian/patches/fix-race-cond-print.diff +++ openjdk-6-6b16~pre5/debian/patches/fix-race-cond-print.diff @@ -0,0 +1,15 @@ +--- openjdk/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java 2008-04-11 04:18:13.000000000 -0400 ++++ openjdk/jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java 2008-07-30 12:45:40.000000000 -0400 +@@ -163,6 +163,12 @@ + + + public UnixPrintServiceLookup() { ++ try { ++ refreshServices(); ++ } catch (Exception se) { ++ IPPPrintService.debug_println(debugPrefix+"Exception in refreshServices()"); ++ } ++ + // start the printer listener thread + if (pollServices) { + PrinterChangeListener thr = new PrinterChangeListener(); --- openjdk-6-6b16~pre5.orig/debian/patches/set-exec-name.diff +++ openjdk-6-6b16~pre5/debian/patches/set-exec-name.diff @@ -0,0 +1,69 @@ +--- openjdk/hotspot/src/os/solaris/launcher/java_md.c.orig 2008-11-20 09:41:00.000000000 +0100 ++++ openjdk/hotspot/src/os/solaris/launcher/java_md.c 2008-12-02 15:07:35.000000000 +0100 +@@ -1011,8 +1011,19 @@ + char buf[PATH_MAX+1]; + int len = readlink(self, buf, PATH_MAX); + if (len >= 0) { ++ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL}; ++ const char **prefix; ++ size_t prefix_len = 0; + buf[len] = '\0'; /* readlink doesn't nul terminate */ +- exec_path = strdup(buf); ++ for (prefix = prefixes; *prefix; prefix++) { ++ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix); ++ if (!strncmp(*prefix, buf, prefix_len)) { ++ prefix_len--; ++ break; ++ } ++ prefix_len = 0; ++ } ++ exec_path = strdup(buf + prefix_len); + } + } + #else /* !__sun && !__linux */ +--- openjdk/hotspot/src/os/linux/launcher/java_md.c.orig 2008-12-02 15:10:43.000000000 +0100 ++++ openjdk/hotspot/src/os/linux/launcher/java_md.c 2008-12-02 15:05:13.000000000 +0100 +@@ -1011,8 +1011,19 @@ + char buf[PATH_MAX+1]; + int len = readlink(self, buf, PATH_MAX); + if (len >= 0) { ++ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL}; ++ const char **prefix; ++ size_t prefix_len = 0; + buf[len] = '\0'; /* readlink doesn't nul terminate */ +- exec_path = strdup(buf); ++ for (prefix = prefixes; *prefix; prefix++) { ++ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix); ++ if (!strncmp(*prefix, buf, prefix_len)) { ++ prefix_len--; ++ break; ++ } ++ prefix_len = 0; ++ } ++ exec_path = strdup(buf + prefix_len); + } + } + #else /* !__sun && !__linux */ +--- openjdk/jdk/src/solaris/bin/java_md.c.orig 2008-05-13 11:00:46.020643623 +0200 ++++ openjdk/jdk/src/solaris/bin/java_md.c 2008-05-13 11:01:28.581285640 +0200 +@@ -884,8 +884,19 @@ + char buf[PATH_MAX+1]; + int len = readlink(self, buf, PATH_MAX); + if (len >= 0) { ++ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL}; ++ const char **prefix; ++ size_t prefix_len = 0; + buf[len] = '\0'; /* readlink doesn't nul terminate */ +- exec_path = JLI_StringDup(buf); ++ for (prefix = prefixes; *prefix; prefix++) { ++ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix); ++ if (!strncmp(*prefix, buf, prefix_len)) { ++ prefix_len--; ++ break; ++ } ++ prefix_len = 0; ++ } ++ exec_path = JLI_StringDup(buf + prefix_len); + } + } + #else /* !__sun && !__linux */ --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-opt-O2.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-opt-O2.diff @@ -0,0 +1,37 @@ +--- openjdk/hotspot/build/linux/makefiles/gcc.make~ 2007-11-29 12:38:22.578339247 +0100 ++++ openjdk/hotspot/build/linux/makefiles/gcc.make 2007-11-29 12:42:28.742052571 +0100 +@@ -103,7 +103,7 @@ + CFLAGS_WARN/BYFILE = $(CFLAGS_WARN/$@)$(CFLAGS_WARN/DEFAULT$(CFLAGS_WARN/$@)) + + # The flags to use for an Optimized g++ build +-OPT_CFLAGS += -O3 ++OPT_CFLAGS += -O2 + + # Hotspot uses very unstrict aliasing turn this optimization off + OPT_CFLAGS += -fno-strict-aliasing +--- openjdk/corba/make/common/Defs-linux.gmk~ 2007-11-29 12:38:22.578339247 +0100 ++++ openjdk/corba/make/common/Defs-linux.gmk 2007-11-29 12:42:52.452410236 +0100 +@@ -76,8 +76,8 @@ + # + # Default optimization + # +-CC_HIGHEST_OPT = -O3 +-CC_HIGHER_OPT = -O3 ++CC_HIGHEST_OPT = -O2 ++CC_HIGHER_OPT = -O2 + CC_LOWER_OPT = -O2 + CC_NO_OPT = + +--- openjdk/jdk/make/common/Defs-linux.gmk~ 2007-11-29 12:38:22.578339247 +0100 ++++ openjdk/jdk/make/common/Defs-linux.gmk 2007-11-29 12:43:13.992735167 +0100 +@@ -86,8 +86,8 @@ + # + # Default optimization + # +-CC_HIGHEST_OPT = -O3 +-CC_HIGHER_OPT = -O3 ++CC_HIGHEST_OPT = -O2 ++CC_HIGHER_OPT = -O2 + CC_LOWER_OPT = -O2 + CC_NO_OPT = + --- openjdk-6-6b16~pre5.orig/debian/patches/zero-asm-port.diff +++ openjdk-6-6b16~pre5/debian/patches/zero-asm-port.diff @@ -0,0 +1,141 @@ +diff -ruNE ports/hotspot/build/linux/makefiles/zero.make ports/hotspot/build/linux/makefiles/zero.make +--- ports/hotspot/build/linux/makefiles/zero.make 2009-06-25 09:36:42.000000000 +0000 ++++ ports/hotspot/build/linux/makefiles/zero.make 2009-06-29 09:57:25.000000000 +0000 +@@ -23,6 +23,17 @@ + # + # + ++ifdef ICEDTEA_ZERO_BUILD ++ifeq ($(ZERO_LIBARCH),arm) ++Obj_Files += cppInterpreter_arm.o ++CFLAGS += -DHOTSPOT_ASM -DHW_NULL_PTR_CHECK -march=armv5t -mtune=cortex-a8 -O2 -falign-functions=64 -falign-loops=8 -g0 ++%.o: %.S ++ @echo Assembling $< ++ $(QUIETLY) $(REMOVE_TARGET) ++ $(COMPILE.CC) -o $@ $< $(COMPILE_DONE) ++endif ++endif ++ + # The copied fdlibm routines in sharedRuntimeTrig.o must not be optimized + OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT) + # The copied fdlibm routines in sharedRuntimeTrans.o must not be optimized +diff -ruNE ports/hotspot/src/cpu/zero/vm/bytecodes_zero.cpp ports/hotspot/src/cpu/zero/vm/bytecodes_zero.cpp +--- ports/hotspot/src/cpu/zero/vm/bytecodes_zero.cpp 2009-06-25 09:36:42.000000000 +0000 ++++ ports/hotspot/src/cpu/zero/vm/bytecodes_zero.cpp 2009-06-29 12:28:05.000000000 +0000 +@@ -29,4 +29,32 @@ + void Bytecodes::pd_initialize() + { + // No zero specific initialization ++#if defined(PRODUCT) && defined(HOTSPOT_ASM) ++ def(_iaccess_0, "_iaccess_0", "b_jj", NULL, T_INT, 1, true, _aload_0); ++ def(_iaccess_1, "_iaccess_1", "b_jj", NULL, T_INT, 1, true, _aload_1); ++ def(_iaccess_2, "_iaccess_2", "b_jj", NULL, T_INT, 1, true, _aload_2); ++ def(_iaccess_3, "_iaccess_3", "b_jj", NULL, T_INT, 1, true, _aload_3); ++ ++ def(_iload_0_iconst_N, "iload_0_iconst_N", "b_", NULL, T_INT, 2, false, _iload_0); ++ def(_iload_1_iconst_N, "iload_1_iconst_N", "b_", NULL, T_INT, 2, false, _iload_1); ++ def(_iload_2_iconst_N, "iload_2_iconst_N", "b_", NULL, T_INT, 2, false, _iload_2); ++ def(_iload_3_iconst_N, "iload_3_iconst_N", "b_", NULL, T_INT, 2, false, _iload_3); ++ def(_iload_iconst_N, "iload_iconst_N", "bi_", NULL, T_INT, 2, false, _iload); ++ def(_invokeresolved, "invokeresolved", "bjj", NULL, T_ILLEGAL, -1, true, _invokevirtual); ++ ++ def(_iadd_istore_N, "iadd_istore_N", "b_", NULL, T_VOID, -2, false, _iadd); ++ def(_isub_istore_N, "isub_istore_N", "b_", NULL, T_VOID, -2, false, _isub); ++ def(_iand_istore_N, "iand_istore_N", "b_", NULL, T_VOID, -2, false, _iand); ++ def(_ior_istore_N, "ior_istore_N", "b_", NULL, T_VOID, -2, false, _ior); ++ def(_ixor_istore_N, "ixor_istore_N", "b_", NULL, T_VOID, -2, false, _ixor); ++ ++ def(_iadd_u4store, "iadd_u4store", "b_i", NULL, T_VOID, -2, false, _iadd); ++ def(_isub_u4store, "isub_u4store", "b_i", NULL, T_VOID, -2, false, _isub); ++ def(_iand_u4store, "iand_u4store", "b_i", NULL, T_VOID, -2, false, _iand); ++ def(_ior_u4store, "ior_u4store", "b_i", NULL, T_VOID, -2, false, _ior); ++ def(_ixor_u4store, "ixor_u4store", "b_i", NULL, T_VOID, -2, false, _ixor); ++ ++ def(_invokespecialresolved, "invokespecialresolved", "bjj", NULL, T_ILLEGAL, -1, true, _invokespecial); ++ def(_invokestaticresolved, "invokestaticresolved", "bjj", NULL, T_ILLEGAL, 0, true, _invokestatic); ++#endif + } +diff -ruNE ports/hotspot/src/cpu/zero/vm/bytecodes_zero.hpp ports/hotspot/src/cpu/zero/vm/bytecodes_zero.hpp +--- ports/hotspot/src/cpu/zero/vm/bytecodes_zero.hpp 2009-06-25 09:36:42.000000000 +0000 ++++ ports/hotspot/src/cpu/zero/vm/bytecodes_zero.hpp 2009-06-29 12:27:41.000000000 +0000 +@@ -0,0 +1,24 @@ ++#if defined(PRODUCT) && defined(HOTSPOT_ASM) ++#define _iaccess_0 ((Bytecodes::Code)0xdb) ++#define _iaccess_1 ((Bytecodes::Code)0xdc) ++#define _iaccess_2 ((Bytecodes::Code)0xdd) ++#define _iaccess_3 ((Bytecodes::Code)0xde) ++ _iload_0_iconst_N , // 231 ++ _iload_1_iconst_N , // 232 ++ _iload_2_iconst_N , // 233 ++ _iload_3_iconst_N , // 234 ++ _iload_iconst_N , // 235 ++ _invokeresolved , // 236 ++ _iadd_istore_N , // 237 ++ _isub_istore_N , // 238 ++ _iand_istore_N , // 239 ++ _ior_istore_N , // 240 ++ _ixor_istore_N , // 241 ++ _iadd_u4store , // 242 ++ _isub_u4store , // 243 ++ _iand_u4store , // 244 ++ _ior_u4store , // 245 ++ _ixor_u4store , // 246 ++ _invokespecialresolved , // 247 ++ _invokestaticresolved , // 248 ++#endif +diff -ruNE ports/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp ports/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp +--- ports/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp 2009-06-25 09:36:42.000000000 +0000 ++++ ports/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp 2009-06-29 12:32:43.000000000 +0000 +@@ -721,11 +721,25 @@ + return generate_entry(CppInterpreter::normal_entry); + } + ++#if defined(PRODUCT) && defined(HOTSPOT_ASM) ++typedef void (*BCI_ENTRY)(methodOopDesc*, intptr_t, Thread*); ++extern "C" BCI_ENTRY asm_generate_method_entry(AbstractInterpreter::MethodKind kind); ++#endif ++ + address AbstractInterpreterGenerator::generate_method_entry( + AbstractInterpreter::MethodKind kind) { + + address entry_point = NULL; + ++#if defined(PRODUCT) && defined(HOTSPOT_ASM) ++ if (!UseCompiler && !TaggedStackInterpreter && !JvmtiExport::can_post_interpreter_events() ++ && !PrintCommandLineFlags) { ++ BCI_ENTRY asm_entry = asm_generate_method_entry(kind); ++ if (asm_entry) ++ return ((InterpreterGenerator*)this)->generate_entry(asm_entry); ++ } ++#endif ++ + switch (kind) { + case Interpreter::zerolocals: + case Interpreter::zerolocals_synchronized: +diff -ruNE ports/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp ports/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp +--- ports/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp 2009-06-25 09:36:42.000000000 +0000 ++++ ports/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp 2009-06-29 12:34:18.000000000 +0000 +@@ -78,6 +78,10 @@ + Unimplemented(); + } + ++#if defined(PRODUCT) && defined(HOTSPOT_ASM) ++extern "C" int asm_check_null_ptr(ucontext_t *uc); ++#endif ++ + extern "C" int + JVM_handle_linux_signal(int sig, + siginfo_t* info, +@@ -86,6 +90,12 @@ + { + ucontext_t* uc = (ucontext_t*) ucVoid; + ++#if defined(PRODUCT) && defined(HOTSPOT_ASM) ++ if (sig == SIGSEGV) { ++ if (asm_check_null_ptr(uc)) return 1; ++ } ++#endif ++ + Thread* t = ThreadLocalStorage::get_thread_slow(); + + SignalHandlerMark shm(t); --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-mtune-generic.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-mtune-generic.diff @@ -0,0 +1,11 @@ +--- openjdk/hotspot/build/linux/makefiles/gcc.make~ 2007-11-24 16:52:59.077912783 +0100 ++++ openjdk/hotspot/build/linux/makefiles/gcc.make 2007-11-24 17:10:26.373711002 +0100 +@@ -69,7 +69,7 @@ + CFLAGS += -g + + ARCHFLAG = $(ARCHFLAG/$(BUILDARCH)) +-ARCHFLAG/i486 = -m32 -march=i586 ++ARCHFLAG/i486 = -m32 -march=i586 -mtune=generic + ARCHFLAG/amd64 = -m64 + ARCHFLAG/ia64 = + ARCHFLAG/sparc = -m32 -mcpu=v9 --- openjdk-6-6b16~pre5.orig/debian/patches/no-compiler-path.diff +++ openjdk-6-6b16~pre5/debian/patches/no-compiler-path.diff @@ -0,0 +1,48 @@ +--- openjdk/corba/make/common/shared/Compiler-gcc.gmk~ 2008-05-14 18:10:07.782578279 +0200 ++++ openjdk/corba/make/common/shared/Compiler-gcc.gmk 2008-05-14 18:15:42.217623155 +0200 +@@ -58,17 +58,17 @@ + ifeq ($(PLATFORM), linux) + + # Settings specific to Linux +- CC = $(COMPILER_PATH)gcc$(GCC_SUFFIX) +- CPP = $(COMPILER_PATH)gcc$(GCC_SUFFIX) -E ++ CC = gcc$(GCC_SUFFIX) ++ CPP = gcc$(GCC_SUFFIX) -E + # statically link libstdc++ before C++ ABI is stablized on Linux + STATIC_CXX = true + ifeq ($(STATIC_CXX),true) + # g++ always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++" + # We need to use gcc to statically link the C++ runtime. gcc and g++ use + # the same subprocess to compile C++ files, so it is OK to build using gcc. +- CXX = $(COMPILER_PATH)gcc$(GCC_SUFFIX) ++ CXX = gcc$(GCC_SUFFIX) + else +- CXX = $(COMPILER_PATH)g++$(GCC_SUFFIX) ++ CXX = g++$(GCC_SUFFIX) + endif + ifdef ICEDTEA_ZERO_BUILD + # zero +--- openjdk/jdk/make/common/shared/Compiler-gcc.gmk~ 2008-05-14 18:17:30.669259124 +0200 ++++ openjdk/jdk/make/common/shared/Compiler-gcc.gmk 2008-05-14 18:58:41.196526465 +0200 +@@ -58,17 +58,17 @@ + ifeq ($(PLATFORM), linux) + + # Settings specific to Linux +- CC = $(COMPILER_PATH)gcc$(GCC_SUFFIX) +- CPP = $(COMPILER_PATH)gcc$(GCC_SUFFIX) -E ++ CC = gcc$(GCC_SUFFIX) ++ CPP = gcc$(GCC_SUFFIX) -E + # statically link libstdc++ before C++ ABI is stablized on Linux + STATIC_CXX = true + ifeq ($(STATIC_CXX),true) + # g++ always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++" + # We need to use gcc to statically link the C++ runtime. gcc and g++ use + # the same subprocess to compile C++ files, so it is OK to build using gcc. +- CXX = $(COMPILER_PATH)gcc$(GCC_SUFFIX) ++ CXX = gcc$(GCC_SUFFIX) + else +- CXX = $(COMPILER_PATH)g++$(GCC_SUFFIX) ++ CXX = g++$(GCC_SUFFIX) + endif + ifdef ICEDTEA_ZERO_BUILD + # zero --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-no-stack-protector-original.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-no-stack-protector-original.diff @@ -0,0 +1,32 @@ +--- openjdk/hotspot/build/linux/makefiles/gcc.make~ 2007-11-24 14:49:38.366274732 +0100 ++++ openjdk/hotspot/build/linux/makefiles/gcc.make 2007-11-24 15:00:51.616430558 +0100 +@@ -62,6 +62,7 @@ + CFLAGS += -fno-exceptions + CFLAGS += -D_REENTRANT + CFLAGS += -fcheck-new ++CFLAGS += -fno-stack-protector -U_FORTIFY_SOURCE + + # Always generate full debuginfo on Linux. It'll be in a separate + # debuginfo package when building RPMs. +--- openjdk/corba/make/common/Defs-linux.gmk~ 2008-03-28 20:11:54.075568406 +0100 ++++ openjdk/corba/make/common/Defs-linux.gmk 2008-03-28 20:13:51.537340290 +0100 +@@ -107,6 +107,8 @@ + LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) + endif + ++CFLAGS_REQUIRED += -fno-stack-protector -U_FORTIFY_SOURCE ++ + # Add in platform specific optimizations for all opt levels + CC_HIGHEST_OPT += $(_OPT_$(ARCH)) + CC_HIGHER_OPT += $(_OPT_$(ARCH)) +--- openjdk/jdk/make/common/Defs-linux.gmk~ 2008-03-28 20:11:54.095568707 +0100 ++++ openjdk/jdk/make/common/Defs-linux.gmk 2008-03-28 20:14:15.037694787 +0100 +@@ -117,6 +117,8 @@ + LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) + endif + ++CFLAGS_REQUIRED += -fno-stack-protector -U_FORTIFY_SOURCE ++ + # Add in platform specific optimizations for all opt levels + CC_HIGHEST_OPT += $(_OPT_$(ARCH)) + CC_HIGHER_OPT += $(_OPT_$(ARCH)) --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-hotspot-no-stack-protector.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-hotspot-no-stack-protector.diff @@ -0,0 +1,11 @@ +--- openjdk/hotspot/make/linux/makefiles/gcc.make~ 2007-11-29 12:38:22.578339247 +0100 ++++ openjdk/hotspot/make/linux/makefiles/gcc.make 2007-11-29 12:42:28.742052571 +0100 +@@ -103,7 +103,7 @@ + CFLAGS_WARN/BYFILE = $(CFLAGS_WARN/$@)$(CFLAGS_WARN/DEFAULT$(CFLAGS_WARN/$@)) + + # The flags to use for an Optimized g++ build +-OPT_CFLAGS += -O3 ++OPT_CFLAGS += -O3 -fno-stack-protector -U_FORTIFY_SOURCE + + # Hotspot uses very unstrict aliasing turn this optimization off + OPT_CFLAGS += -fno-strict-aliasing --- openjdk-6-6b16~pre5.orig/debian/patches/ld-symbolic-functions.diff +++ openjdk-6-6b16~pre5/debian/patches/ld-symbolic-functions.diff @@ -0,0 +1,43 @@ +--- openjdk/corba/make/common/Defs-linux.gmk.orig 2008-07-26 23:40:27.434474148 +0200 ++++ openjdk/corba/make/common/Defs-linux.gmk 2008-07-26 23:42:08.776002862 +0200 +@@ -205,7 +205,7 @@ + + EXTRA_LIBS += -lc + +-LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs ++LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs -Wl,-Bsymbolic-functions + LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) + + # +--- openjdk/hotspot/agent/src/os/linux/Makefile.orig 2008-07-26 23:40:27.434474148 +0200 ++++ openjdk/hotspot/agent/src/os/linux/Makefile 2008-07-26 23:42:08.776002862 +0200 +@@ -62,7 +62,7 @@ + + $(LIBSA): $(OBJS) mapfile + if [ ! -d $(ARCH) ] ; then mkdir $(ARCH) ; fi +- $(GCC) -shared $(LFLAGS_LIBSA) -o $(LIBSA) $(OBJS) $(LIBS) ++ $(GCC) -shared -Wl,-Bsymbolic-functions $(LFLAGS_LIBSA) -o $(LIBSA) $(OBJS) $(LIBS) + + test.o: test.c + $(GCC) -c -o test.o -g -D_GNU_SOURCE -D_$(ARCH)_ $(if $(filter $(ARCH),alpha),,-D$(ARCH)) $(INCLUDES) test.c +--- openjdk/hotspot/make/linux/makefiles/gcc.make.orig 2008-07-26 23:40:27.464474601 +0200 ++++ openjdk/hotspot/make/linux/makefiles/gcc.make 2008-07-26 23:42:08.776002862 +0200 +@@ -142,6 +142,7 @@ + + # Enable linker optimization + LFLAGS += -Xlinker -O1 ++LFLAGS += -Wl,-Bsymbolic-functions + + # Use $(MAPFLAG:FILENAME=real_file_name) to specify a map file. + MAPFLAG = -Xlinker --version-script=FILENAME +--- openjdk/jdk/make/common/Defs-linux.gmk.orig 2008-07-26 23:40:27.444474299 +0200 ++++ openjdk/jdk/make/common/Defs-linux.gmk 2008-07-26 23:42:08.776002862 +0200 +@@ -215,7 +215,7 @@ + + EXTRA_LIBS += -lc + +-LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs ++LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs -Wl,-Bsymbolic-functions + LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) + + # --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-jdk-opt-O0.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-jdk-opt-O0.diff @@ -0,0 +1,15 @@ +--- openjdk/jdk/make/common/Defs-linux.gmk.orig 2009-01-08 23:40:48.000000000 +0000 ++++ openjdk/jdk/make/common/Defs-linux.gmk 2009-01-08 23:41:03.000000000 +0000 +@@ -86,9 +86,9 @@ + # + # Default optimization + # +-CC_HIGHEST_OPT = -O3 +-CC_HIGHER_OPT = -O3 +-CC_LOWER_OPT = -O2 ++CC_HIGHEST_OPT = -O0 ++CC_HIGHER_OPT = -O0 ++CC_LOWER_OPT = -O0 + CC_NO_OPT = + + ifeq ($(PRODUCT), java) --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-hotspot-no-stack-protector-original.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-hotspot-no-stack-protector-original.diff @@ -0,0 +1,11 @@ +--- openjdk/hotspot/build/linux/makefiles/gcc.make~ 2007-11-29 12:38:22.578339247 +0100 ++++ openjdk/hotspot/build/linux/makefiles/gcc.make 2007-11-29 12:42:28.742052571 +0100 +@@ -103,7 +103,7 @@ + CFLAGS_WARN/BYFILE = $(CFLAGS_WARN/$@)$(CFLAGS_WARN/DEFAULT$(CFLAGS_WARN/$@)) + + # The flags to use for an Optimized g++ build +-OPT_CFLAGS += -O3 ++OPT_CFLAGS += -O3 -fno-stack-protector -U_FORTIFY_SOURCE + + # Hotspot uses very unstrict aliasing turn this optimization off + OPT_CFLAGS += -fno-strict-aliasing --- openjdk-6-6b16~pre5.orig/debian/patches/icedtea-pretend-memory.diff +++ openjdk-6-6b16~pre5/debian/patches/icedtea-pretend-memory.diff @@ -0,0 +1,22 @@ +--- openjdk/jdk/make/common/shared/Platform.gmk.orig 2008-10-19 11:42:03.000000000 +0200 ++++ openjdk/jdk/make/common/shared/Platform.gmk 2008-10-19 11:43:25.000000000 +0200 +@@ -315,7 +315,7 @@ + REQUIRED_ALSA_VERSION = ^((0[.]9[.][1-9])|(1[.]0[.][0-9]))[0-9]* + endif + # How much RAM does this machine have: +- MB_OF_MEMORY := $(shell free -m | fgrep Mem: | sed -e 's@\ \ *@ @g' | cut -d' ' -f2) ++ MB_OF_MEMORY := $(shell m=`free -m | fgrep Mem: | sed -e 's@\ \ *@ @g' | cut -d' ' -f2`; if [ "$$m" -lt 384 ]; then echo 384; else echo $$m; fi) + endif + + # Windows with and without CYGWIN will be slightly different +--- openjdk/corba/make/common/shared/Platform.gmk.orig 2008-10-19 11:42:03.000000000 +0200 ++++ openjdk/corba/make/common/shared/Platform.gmk 2008-10-19 11:43:25.000000000 +0200 +@@ -301,7 +301,7 @@ + endif + endif + # How much RAM does this machine have: +- MB_OF_MEMORY := $(shell free -m | fgrep Mem: | sed -e 's@\ \ *@ @g' | cut -d' ' -f2) ++ MB_OF_MEMORY := $(shell m=`free -m | fgrep Mem: | sed -e 's@\ \ *@ @g' | cut -d' ' -f2`; if [ "$$m" -lt 384 ]; then echo 384; else echo $$m; fi) + endif + + # Windows with and without CYGWIN will be slightly different --- openjdk-6-6b16~pre5.orig/debian/patches/jexec.diff +++ openjdk-6-6b16~pre5/debian/patches/jexec.diff @@ -0,0 +1,15 @@ +diff -ru openjdk-6-6b08.bak/jdk/src/solaris/bin/jexec.c openjdk-6-6b08.orig/jdk/src/solaris/bin/jexec.c +--- openjdk/jdk/src/solaris/bin/jexec.c 2008-03-26 09:59:57.000000000 +0100 ++++ openjdk/jdk/src/solaris/bin/jexec.c 2008-04-03 17:14:10.000000000 +0200 +@@ -164,9 +164,10 @@ + + /* Get the path to the java binary, which is in a known position relative + * to our current position, which is in argv[0]. */ +- if (getJavaPath(argv[argi++], java, RELATIVE_DEPTH) != 0) { ++ if (getJavaPath("/usr/lib/jvm/java-6-openjdk/jre/lib/jexec", java, RELATIVE_DEPTH) != 0) { + errorExit(errno, MISSING_JAVA_MSG); + } ++ argi++; + + nargv = (const char **) malloc((argc + 2) * (sizeof (const char *))); + nargv[nargc++] = java; --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-jdk-opt-O2.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-jdk-opt-O2.diff @@ -0,0 +1,13 @@ +--- openjdk/jdk/make/common/Defs-linux.gmk~ 2007-11-29 12:38:22.578339247 +0100 ++++ openjdk/jdk/make/common/Defs-linux.gmk 2007-11-29 12:43:13.992735167 +0100 +@@ -86,8 +86,8 @@ + # + # Default optimization + # +-CC_HIGHEST_OPT = -O3 +-CC_HIGHER_OPT = -O3 ++CC_HIGHEST_OPT = -O2 ++CC_HIGHER_OPT = -O2 + CC_LOWER_OPT = -O2 + CC_NO_OPT = + --- openjdk-6-6b16~pre5.orig/debian/patches/jdk-freetypeScaler-crash.diff +++ openjdk-6-6b16~pre5/debian/patches/jdk-freetypeScaler-crash.diff @@ -0,0 +1,142 @@ +Description: + + Fixing the bad JNI code in the font manager code. Two issues: + + o The JNIEnv is unique to the thread. It cannot be saved by one thread and + reused by another. Use GetEnv instead. + + o The 'font2D' jobject needs to be converted into a global reference because + its lifetime exceeds the lifetime of a native method call. + +Evaluation: + +Appropriately register/free everything with the garbage collector. + +Fix: + +# HG changeset patch +# User martin +# Date 1224202830 25200 +# Node ID 3c9d6001d8a90698a3540a2a483717f26a98db78 +# Parent 68730f05449cd4f39ce1cb82adc6c4e57f87554f +Crash in freetypeScaler.c due to insufficient GC protection +Summary: NewGlobalRef/DeleteGlobalRef as needed. +Reviewed-by: +Contributed-by: yamauchi@google.com + +diff --git a/make/sun/font/mapfile-vers.openjdk b/jdk/make/sun/font/mapfile-vers.openjdk +--- openjdk/jdk/make/sun/font/mapfile-vers.openjdk ++++ openjdk/jdk/make/sun/font/mapfile-vers.openjdk +@@ -29,6 +29,7 @@ + + SUNWprivate_1.1 { + global: ++ JNI_OnLoad; + getSunFontIDs; + newLayoutTableCache; + freeLayoutTableCache; +diff --git a/src/share/native/sun/font/freetypeScaler.c b/src/share/native/sun/font/freetypeScaler.c +--- openjdk/jdk/src/share/native/sun/font/freetypeScaler.c ++++ openjdk/jdk/src/share/native/sun/font/freetypeScaler.c +@@ -48,16 +48,6 @@ + #define ROUND(x) ((int) (x+0.5)) + + typedef struct { +- /* Important note: +- JNI forbids sharing same env between different threads. +- We are safe, because pointer is overwritten every time we get into +- JNI call (see setupFTContext). +- +- Pointer is used by font data reading callbacks +- such as ReadTTFontFileFunc. +- +- NB: We may consider switching to JNI_GetEnv. */ +- JNIEnv* env; + FT_Library library; + FT_Face face; + jobject font2D; +@@ -90,6 +80,13 @@ + void z_error(char *s) {} + #endif + ++static JavaVM* jvm = NULL; ++ ++JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { ++ jvm = vm; ++ return JNI_VERSION_1_2; ++} ++ + /**************** Error handling utilities *****************/ + + static jmethodID invalidateScalerMID; +@@ -107,6 +104,10 @@ + + FT_Done_Face(scalerInfo->face); + FT_Done_FreeType(scalerInfo->library); ++ ++ if (scalerInfo->font2D != NULL) { ++ (*env)->DeleteGlobalRef(env, scalerInfo->font2D); ++ } + + if (scalerInfo->directBuffer != NULL) { + (*env)->DeleteGlobalRef(env, scalerInfo->directBuffer); +@@ -131,10 +132,9 @@ + + #define FILEDATACACHESIZE 1024 + +-/* NB: is it ever called? */ + static void CloseTTFontFileFunc(FT_Stream stream) { ++ JNIEnv* env = (JNIEnv*) JNU_GetEnv(jvm, JNI_VERSION_1_2); + FTScalerInfo *scalerInfo = (FTScalerInfo *) stream->pathname.pointer; +- JNIEnv* env = scalerInfo->env; + jclass tmpClass = (*env)->FindClass(env, "sun/font/TrueTypeFont"); + jfieldID platNameField = + (*env)->GetFieldID(env, tmpClass, "platName", "Ljava/lang/String;"); +@@ -150,8 +150,8 @@ + unsigned char* destBuffer, + unsigned long numBytes) + { ++ JNIEnv* env = (JNIEnv*) JNU_GetEnv(jvm, JNI_VERSION_1_2); + FTScalerInfo *scalerInfo = (FTScalerInfo *) stream->pathname.pointer; +- JNIEnv* env = scalerInfo->env; + jobject bBuffer; + int bread = 0; + +@@ -245,8 +245,7 @@ + if (scalerInfo == NULL) + return 0; + +- scalerInfo->env = env; +- scalerInfo->font2D = font2D; ++ scalerInfo->font2D = (*env)->NewGlobalRef(env, font2D); + scalerInfo->fontDataOffset = 0; + scalerInfo->fontDataLength = 0; + scalerInfo->fileSize = filesize; +@@ -263,6 +262,7 @@ + */ + error = FT_Init_FreeType(&scalerInfo->library); + if (error) { ++ (*env)->DeleteGlobalRef(env, scalerInfo->font2D); + free(scalerInfo); + return 0; + } +@@ -331,6 +331,7 @@ + } + if (scalerInfo->fontData != NULL) + free(scalerInfo->fontData); ++ (*env)->DeleteGlobalRef(env, scalerInfo->font2D); + free(scalerInfo); + return 0; + } +@@ -391,8 +392,10 @@ + FTScalerContext *context) { + int errCode = 0; + +- scalerInfo->env = env; +- scalerInfo->font2D = font2D; ++ if (scalerInfo->font2D != NULL) { ++ (*env)->DeleteGlobalRef(env, scalerInfo->font2D); ++ } ++ scalerInfo->font2D = (*env)->NewGlobalRef(env, font2D); + + FT_Set_Transform(scalerInfo->face, &context->transform, NULL); --- openjdk-6-6b16~pre5.orig/debian/patches/java-access-bridge-security.patch +++ openjdk-6-6b16~pre5/debian/patches/java-access-bridge-security.patch @@ -0,0 +1,11 @@ +--- openjdk/jdk/src/share/lib/security/java.security~ 2009-08-05 18:50:24.000000000 +0200 ++++ openjdk/jdk/src/share/lib/security/java.security 2009-08-05 18:53:51.000000000 +0200 +@@ -127,7 +127,7 @@ + # passed to checkPackageAccess unless the + # corresponding RuntimePermission ("accessClassInPackage."+package) has + # been granted. +-package.access=sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio. ++package.access=sun.,com.sun.xml.internal.ws.,com.sun.xml.internal.bind.,com.sun.imageio.,org.GNOME.Accessibility.,org.GNOME.Bonobo. + + # + # List of comma-separated packages that start with or equal this string --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-hotspot-opt-O2.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-hotspot-opt-O2.diff @@ -0,0 +1,11 @@ +--- openjdk/hotspot/build/linux/makefiles/gcc.make~ 2007-11-29 12:38:22.578339247 +0100 ++++ openjdk/hotspot/build/linux/makefiles/gcc.make 2007-11-29 12:42:28.742052571 +0100 +@@ -103,7 +103,7 @@ + CFLAGS_WARN/BYFILE = $(CFLAGS_WARN/$@)$(CFLAGS_WARN/DEFAULT$(CFLAGS_WARN/$@)) + + # The flags to use for an Optimized g++ build +-OPT_CFLAGS += -O3 ++OPT_CFLAGS += -O2 + + # Hotspot uses very unstrict aliasing turn this optimization off + OPT_CFLAGS += -fno-strict-aliasing --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-jdk-no-stack-protector.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-jdk-no-stack-protector.diff @@ -0,0 +1,15 @@ +--- openjdk/jdk/make/common/Defs-linux.gmk~ 2009-01-15 21:41:19.000000000 +0100 ++++ openjdk/jdk/make/common/Defs-linux.gmk 2009-01-17 14:32:08.000000000 +0100 +@@ -86,9 +86,9 @@ + # + # Default optimization + # +-CC_HIGHEST_OPT = -O3 +-CC_HIGHER_OPT = -O3 +-CC_LOWER_OPT = -O2 ++CC_HIGHEST_OPT = -O3 -fno-stack-protector -U_FORTIFY_SOURCE ++CC_HIGHER_OPT = -O3 -fno-stack-protector -U_FORTIFY_SOURCE ++CC_LOWER_OPT = -O2 -fno-stack-protector -U_FORTIFY_SOURCE + CC_NO_OPT = + + ifeq ($(PRODUCT), java) --- openjdk-6-6b16~pre5.orig/debian/patches/cacao-no-mmap-first-page.diff +++ openjdk-6-6b16~pre5/debian/patches/cacao-no-mmap-first-page.diff @@ -0,0 +1,23 @@ +--- cacao/cacao/src/vm/jit/trap.c.orig 2008-07-07 13:36:19.000000000 +0200 ++++ cacao/cacao/src/vm/jit/trap.c 2008-07-23 10:45:30.480113152 +0200 +@@ -59,20 +59,6 @@ + */ + void trap_init(void) + { +-#if !(defined(__ARM__) && defined(__LINUX__)) +- /* On arm-linux the first memory page can't be mmap'ed, as it +- contains the exception vectors. */ +- +- int pagesize; +- +- /* mmap a memory page at address 0x0, so our hardware-exceptions +- work. */ +- +- pagesize = system_getpagesize(); +- +- (void) system_mmap_anonymous(NULL, pagesize, PROT_NONE, MAP_PRIVATE | MAP_FIXED); +-#endif +- + TRACESUBSYSTEMINITIALIZATION("trap_init"); + + #if !defined(TRAP_INSTRUCTION_IS_LOAD) --- openjdk-6-6b16~pre5.orig/debian/patches/gcc-no-stack-protector.diff +++ openjdk-6-6b16~pre5/debian/patches/gcc-no-stack-protector.diff @@ -0,0 +1,32 @@ +--- openjdk/hotspot/make/linux/makefiles/gcc.make.orig 2008-12-02 14:56:38.000000000 +0100 ++++ openjdk/hotspot/make/linux/makefiles/gcc.make 2008-12-02 14:58:56.000000000 +0100 +@@ -67,6 +67,7 @@ + CFLAGS += -fno-exceptions + CFLAGS += -D_REENTRANT + CFLAGS += -fcheck-new ++CFLAGS += -fno-stack-protector -U_FORTIFY_SOURCE + + # Always generate full debuginfo on Linux. It'll be in a separate + # debuginfo package when building RPMs. +--- openjdk/corba/make/common/Defs-linux.gmk~ 2008-03-28 20:11:54.075568406 +0100 ++++ openjdk/corba/make/common/Defs-linux.gmk 2008-03-28 20:13:51.537340290 +0100 +@@ -107,6 +107,8 @@ + LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) + endif + ++CFLAGS_REQUIRED += -fno-stack-protector -U_FORTIFY_SOURCE ++ + # Add in platform specific optimizations for all opt levels + CC_HIGHEST_OPT += $(_OPT_$(ARCH)) + CC_HIGHER_OPT += $(_OPT_$(ARCH)) +--- openjdk/jdk/make/common/Defs-linux.gmk~ 2008-03-28 20:11:54.095568707 +0100 ++++ openjdk/jdk/make/common/Defs-linux.gmk 2008-03-28 20:14:15.037694787 +0100 +@@ -117,6 +117,8 @@ + LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) + endif + ++CFLAGS_REQUIRED += -fno-stack-protector -U_FORTIFY_SOURCE ++ + # Add in platform specific optimizations for all opt levels + CC_HIGHEST_OPT += $(_OPT_$(ARCH)) + CC_HIGHER_OPT += $(_OPT_$(ARCH)) --- openjdk-6-6b16~pre5.orig/debian/patches/zero-asm-armv4.diff +++ openjdk-6-6b16~pre5/debian/patches/zero-asm-armv4.diff @@ -0,0 +1,114 @@ +--- ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S 2009-07-13 08:00:23.000000000 +0000 ++++ ports/hotspot/src/cpu/zero/vm/cppInterpreter_arm.S 2009-07-13 08:30:13.000000000 +0000 +@@ -3,6 +3,8 @@ + //#define UNALIGNED_ACCESS + //#define B14 + ++#define ARMv4 ++ + #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) + + // ECN: DOH!!! gcc 4.4 has changed the name mangling scheme!!! +@@ -343,7 +345,48 @@ + #define FFI_TYPE_SINT64 12 + #define FFI_TYPE_POINTER 14 + ++ .macro _BLX reg ++#ifdef ARMv4 ++ mov lr, pc ++ mov pc, \reg ++#else ++ blx \reg ++#endif ++ .endm ++#define blx _BLX ++ ++ .macro _BX reg ++#ifdef ARMv4 ++ mov pc, \reg ++#else ++ bx \reg ++#endif ++ .endm ++#define bx _BX ++ ++ .macro _BXEQ reg ++#ifdef ARMv4 ++ moveq pc, \reg ++#else ++ bxeq \reg ++#endif ++ .endm ++#define bxeq _BXEQ ++ ++ .macro _BXNE reg ++#ifdef ARMv4 ++ movne pc, \reg ++#else ++ bxne \reg ++#endif ++ .endm ++#define bxne _BXNE ++ ++#ifdef ARMv4 ++ .arch armv4 ++#else + .arch armv7-a ++#endif + .fpu softvfp + .eabi_attribute 20, 1 + .eabi_attribute 21, 1 +@@ -3236,7 +3279,7 @@ + adrl ip, dispatch_init_adcon + rsb r3, r0, r3 + rsb r2, r1, r2 +- ldrd r0, [ip] ++ ldmia ip, {r0, r1} + rsb r3, r3, sp + cmp r2, #4096 + cmpge r3, #32768 +@@ -3578,7 +3621,7 @@ + adrl ip, dispatch_init_adcon + stmfd sp!, {regset, lr} + mov tmp2, r0 +- ldrd r0, [ip] ++ ldmia ip, {r0, r1} + sub sp, sp, #220 + + mov istate, #ISTATE_THREAD +@@ -3668,7 +3711,7 @@ + adrl ip, dispatch_init_adcon + stmfd sp!, {r3, r4, r5, r7, r9, r10, r11, lr} + @--- +- ldrd dispatch, [ip] ++ ldmia ip, {dispatch, r7} + mov r11, r0 + ldrh r1, [r11, #42] + add dispatch, dispatch, ip +@@ -5391,7 +5434,7 @@ + .type _ZN14CppInterpreter17ignore_safepointsEv, %function + _ZN14CppInterpreter17ignore_safepointsEv: + adrl ip, dispatch_init_adcon +- ldrd r2, [ip] ++ ldmia ip, {r2, r3} + add r2, r2, ip + add ip, r3, r2 + ldr r2, [ip, #AbstractInterpreter_notice_safepoints-XXX] +@@ -5415,7 +5458,7 @@ + .type _ZN14CppInterpreter17notice_safepointsEv, %function + _ZN14CppInterpreter17notice_safepointsEv: + adrl ip, dispatch_init_adcon +- ldrd r2, [ip] ++ ldmia ip, {r2, r3} + add r2, r2, ip + add ip, r3, r2 + ldr r2, [ip, #AbstractInterpreter_notice_safepoints-XXX] +@@ -5438,7 +5481,7 @@ + + bci_init: + adr r3, dispatch_init_adcon +- ldrd r0, [r3] ++ ldmia r3, {r0, r1} + add r0, r0, r3 + add r1, r1, r0 + adr r2, adcon_init_table --- openjdk-6-6b16~pre5.orig/debian/patches/cacao-alternate-jvm.diff +++ openjdk-6-6b16~pre5/debian/patches/cacao-alternate-jvm.diff @@ -0,0 +1,39 @@ +--- openjdk/jdk/src/share/bin/java.c.orig 2009-03-02 23:21:31.000000000 +0000 ++++ openjdk/jdk/src/share/bin/java.c 2009-03-02 23:23:53.000000000 +0000 +@@ -199,6 +199,8 @@ + InvocationFunctions ifn; + }; + ++#define JNI_VERSION_CACAO 0xcaca0000 ++ + /* + * Entry point. + */ +@@ -360,6 +389,8 @@ + + { /* Create a new thread to create JVM and invoke main method */ + struct JavaMainArgs args; ++ struct JDK1_1InitArgs cacao_args; ++ int jvm_init_rv; + + args.argc = argc; + args.argv = argv; +@@ -367,7 +398,17 @@ + args.classname = classname; + args.ifn = ifn; + +- return ContinueInNewThread(JavaMain, threadStackSize, (void*)&args, ret); ++ memset((void*)&cacao_args, 0, sizeof(cacao_args)); ++ cacao_args.version = JNI_VERSION_CACAO; ++ ++ jvm_init_rv = ifn.GetDefaultJavaVMInitArgs(&cacao_args); ++ if (_launcher_debug) ++ printf("using cacao as VM: %s\n", (jvm_init_rv == 0) ? "yes" : "no"); ++ ++ if (jvm_init_rv == 0) ++ return JavaMain((void*)&args); ++ else ++ return ContinueInNewThread(JavaMain, threadStackSize, (void*)&args, ret); + } + } + --- openjdk-6-6b16~pre5.orig/debian/patches/shebang.diff +++ openjdk-6-6b16~pre5/debian/patches/shebang.diff @@ -0,0 +1,8 @@ +diff -ru openjdk-6-6b08.bak/jdk/src/share/sample/scripting/scriptpad/src/scripts/memory.sh openjdk-6-6b08/jdk/src/share/sample/scripting/scriptpad/src/scripts/memory.sh +--- openjdk/jdk/src/share/sample/scripting/scriptpad/src/scripts/memory.sh 2008-03-26 09:59:56.000000000 +0100 ++++ openjdk/jdk/src/share/sample/scripting/scriptpad/src/scripts/memory.sh 2008-04-02 11:10:52.000000000 +0200 +@@ -1,3 +1,4 @@ ++#!/bin/sh + # + # Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. + # --- openjdk-6-6b16~pre5.orig/debian/patches/accessible-toolkit.patch +++ openjdk-6-6b16~pre5/debian/patches/accessible-toolkit.patch @@ -0,0 +1,16 @@ +diff -uNr openjdk-orig/jdk/src/share/classes/java/awt/Toolkit.java openjdk/jdk/src/share/classes/java/awt/Toolkit.java +--- openjdk-orig/jdk/src/share/classes/java/awt/Toolkit.java 2009-01-23 11:59:47.000000000 -0500 ++++ openjdk/jdk/src/share/classes/java/awt/Toolkit.java 2009-01-23 12:05:20.000000000 -0500 +@@ -871,7 +871,11 @@ + return null; + } + }); +- loadAssistiveTechnologies(); ++ try { ++ loadAssistiveTechnologies(); ++ } catch ( AWTError error) { ++ // ignore silently ++ } + } finally { + // Make sure to always re-enable the JIT. + java.lang.Compiler.enable();