<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:old.nabble.com,2006:forum-27642</id>
	<title>Nabble - OpenJDK</title>
	<updated>2009-11-11T17:17:58Z</updated>
	<link rel="self" type="application/atom+xml" href="http://old.nabble.com/OpenJDK-f27642.xml" />
	<link rel="alternate" type="text/html" href="http://old.nabble.com/OpenJDK-f27642.html" />
	<subtitle type="html">&lt;img src=&quot;http://old.nabble.com/file/f27642/openjdk.png&quot; border=&quot;0&quot; /&gt;&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://openjdk.java.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Open-Source JDK Community&lt;/a&gt;&amp;nbsp;is the place to collaborate on the open-source JDK, an implementation of the Java Platform, Standard Edition specification defined in the Java &lt;a href=&quot;http://jcp.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Community Process&lt;/a&gt;.</subtitle>
	
<entry>
	<id>tag:old.nabble.com,2006:post-26311855</id>
	<title>Re: Mercurial server down?</title>
	<published>2009-11-11T17:17:58Z</published>
	<updated>2009-11-11T17:17:58Z</updated>
	<author>
		<name>gnu_andrew</name>
	</author>
	<content type="html">2009/11/12 Tim Bell &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26311855&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Tim.Bell@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; Kelly-
&lt;br&gt;&amp;gt;&amp;gt; Cannot access  &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/jdk7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/jdk7&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Checking...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Tim
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;Can't access it here either.
&lt;br&gt;-- 
&lt;br&gt;Andrew :-)
&lt;br&gt;&lt;br&gt;Free Java Software Engineer
&lt;br&gt;Red Hat, Inc. (&lt;a href=&quot;http://www.redhat.com&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.redhat.com&lt;/a&gt;)
&lt;br&gt;&lt;br&gt;Support Free Java!
&lt;br&gt;Contribute to GNU Classpath and the OpenJDK
&lt;br&gt;&lt;a href=&quot;http://www.gnu.org/software/classpath&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.gnu.org/software/classpath&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://openjdk.java.net&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://openjdk.java.net&lt;/a&gt;&lt;br&gt;&lt;br&gt;PGP Key: 94EFD9D8 (&lt;a href=&quot;http://subkeys.pgp.net&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://subkeys.pgp.net&lt;/a&gt;)
&lt;br&gt;Fingerprint: F8EF F1EA 401E 2E60 15FA &amp;nbsp;7927 142C 2591 94EF D9D8
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Site-Infrastructure-f27710.html&quot; embed=&quot;fixTarget[27710]&quot; target=&quot;_top&quot; &gt;OpenJDK Site Infrastructure&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Mercurial-server-down--tp26311722p26311855.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26311808</id>
	<title>Re: Mercurial server down?</title>
	<published>2009-11-11T17:12:01Z</published>
	<updated>2009-11-11T17:12:01Z</updated>
	<author>
		<name>tim.bell</name>
	</author>
	<content type="html">Kelly-
&lt;br&gt;&amp;gt; Cannot access &amp;nbsp;&lt;a href=&quot;http://hg.openjdk.java.net/jdk7/jdk7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/jdk7&lt;/a&gt;&lt;br&gt;&lt;br&gt;Checking...
&lt;br&gt;&lt;br&gt;Tim
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Site-Infrastructure-f27710.html&quot; embed=&quot;fixTarget[27710]&quot; target=&quot;_top&quot; &gt;OpenJDK Site Infrastructure&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Mercurial-server-down--tp26311722p26311808.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26311722</id>
	<title>Mercurial server down?</title>
	<published>2009-11-11T17:02:56Z</published>
	<updated>2009-11-11T17:02:56Z</updated>
	<author>
		<name>Kelly O'Hair</name>
	</author>
	<content type="html">&lt;br&gt;FYI...
&lt;br&gt;&lt;br&gt;Cannot access &amp;nbsp;&lt;a href=&quot;http://hg.openjdk.java.net/jdk7/jdk7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/jdk7&lt;/a&gt;&lt;br&gt;&lt;br&gt;-kto
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Site-Infrastructure-f27710.html&quot; embed=&quot;fixTarget[27710]&quot; target=&quot;_top&quot; &gt;OpenJDK Site Infrastructure&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Mercurial-server-down--tp26311722p26311722.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26311136</id>
	<title>Re: Anyway in java to way for the child process to wait for parent process to die</title>
	<published>2009-11-11T16:04:05Z</published>
	<updated>2009-11-11T16:04:05Z</updated>
	<author>
		<name>Christos Zoulas</name>
	</author>
	<content type="html">On Nov 12, &amp;nbsp;8:29am, &lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26311136&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;David.Holmes@...&lt;/a&gt; (David Holmes - Sun Microsystems) wrote:
&lt;br&gt;-- Subject: Re: Anyway in java to way for the child process to wait for paren
&lt;br&gt;&lt;br&gt;| Paulo Levi said the following on 11/12/09 05:31:
&lt;br&gt;| &amp;gt; In process builder.
&lt;br&gt;| 
&lt;br&gt;| No.
&lt;br&gt;| 
&lt;br&gt;| I'm not aware of any OS support for waiting for a parent process to die.
&lt;br&gt;| 
&lt;br&gt;| David Holmes
&lt;br&gt;&lt;br&gt;All the BSD's have it.
&lt;br&gt;&lt;br&gt;christos
&lt;br&gt;&lt;br&gt;#include &amp;lt;sys/types.h&amp;gt;
&lt;br&gt;#include &amp;lt;sys/event.h&amp;gt;
&lt;br&gt;#include &amp;lt;sys/time.h&amp;gt;
&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;
&lt;br&gt;#include &amp;lt;unistd.h&amp;gt;
&lt;br&gt;#include &amp;lt;err.h&amp;gt;
&lt;br&gt;&lt;br&gt;int
&lt;br&gt;main(int argc, char *argv[])
&lt;br&gt;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int kq, nev;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; struct kevent ev, ch;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((kq = kqueue()) == -1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; err(1, &amp;quot;Cannot create kqueue&amp;quot;);
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EV_SET(&amp;ch, getppid(), EVFILT_PROC, EV_ADD | EV_ENABLE | EV_CLEAR, 
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NOTE_EXIT, 0, 0);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; nev = kevent(kq, &amp;ch, 1, &amp;ev, 1, NULL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (nev == -1)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; err(1, &amp;quot;kevent&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (nev == 0)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; errx(&amp;quot;no event&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (ev.fflags &amp; NOTE_EXIT)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; printf(&amp;quot;my parent is now %u\n&amp;quot;, (unsigned)getppid());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; errx(&amp;quot;unknown flags %x&amp;quot;, ev.fflags);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;
&lt;br&gt;}
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Anyway-in-java-to-way-for-the-child-process-to-wait-for-parent--process-to-die-tp26307139p26311136.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26311101</id>
	<title>Re: Anyway in java to way for the child process to wait for parent  process to die</title>
	<published>2009-11-11T15:58:27Z</published>
	<updated>2009-11-11T15:58:27Z</updated>
	<author>
		<name>i30817</name>
	</author>
	<content type="html">It's ok. I think i worked around it by marking shutdownhooks with a
&lt;br&gt;specific name and join()-ing them in another shutdown hook. Then i can
&lt;br&gt;restart the application safely.
&lt;br&gt;It's not very obvious though.
&lt;br&gt;&lt;br&gt;On Wed, Nov 11, 2009 at 10:29 PM, David Holmes - Sun Microsystems
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26311101&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;David.Holmes@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Paulo Levi said the following on 11/12/09 05:31:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; In process builder.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; No.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm not aware of any OS support for waiting for a parent process to die.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; David Holmes
&lt;br&gt;&amp;gt;
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Anyway-in-java-to-way-for-the-child-process-to-wait-for-parent--process-to-die-tp26307139p26311101.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26310381</id>
	<title>Re: Adding constant for line.separator and friends</title>
	<published>2009-11-11T14:57:54Z</published>
	<updated>2009-11-11T14:57:54Z</updated>
	<author>
		<name>Ulf Zibis-2</name>
	</author>
	<content type="html">Am 11.11.2009 22:48, Martin Buchholz schrieb:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Wed, Nov 11, 2009 at 12:46, Stephen Colebourne 
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26310381&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;scolebourne@...&lt;/a&gt; &amp;lt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26310381&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;scolebourne@...&lt;/a&gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Martin Buchholz wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; On Wed, Nov 11, 2009 at 10:10, Ulf Zibis &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26310381&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Ulf.Zibis@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26310381&amp;i=3&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Ulf.Zibis@...&lt;/a&gt;&amp;gt; &amp;lt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26310381&amp;i=4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Ulf.Zibis@...&lt;/a&gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26310381&amp;i=5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Ulf.Zibis@...&lt;/a&gt;&amp;gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;At least, IMO, fileSeparator() and pathSeparator() would
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; belong to
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;java.io.File or java.nio.file.FileSystem.
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Those would have been better names,
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; but at this point they are not worth adding.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; I don't follow - why are they not worth adding now? 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Because java.io.File already provides the functionality users need.
&lt;br&gt;&amp;gt; Not in the best way - as fields instead of methods, and
&lt;br&gt;&amp;gt; only the first char of the system property. &amp;nbsp;But it's not broken enough
&lt;br&gt;&amp;gt; to be worth fixing by providing a slightly better API.
&lt;/div&gt;&lt;br&gt;Sorry for not have checked that (misleaded by request from 
&lt;br&gt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26310381&amp;i=6&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Weijun.Wang@...&lt;/a&gt; 46 hours ago)
&lt;br&gt;&lt;br&gt;&amp;gt; IMO, of course.
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; Becuase they should have been in JDK 1.0? Because JDK 7 is about
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; to release? Some other reason? How and who is deciding?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; it's a hard problem, and one that Sun/JCP/OpenJDK still needs to address.
&lt;br&gt;&lt;br&gt;I know this problem, see:
&lt;br&gt;&lt;a href=&quot;https://bugs.openjdk.java.net/show_bug.cgi?id=100091&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://bugs.openjdk.java.net/show_bug.cgi?id=100091&lt;/a&gt;, 100092, 100095, 
&lt;br&gt;100098, 1000104, 1000105, 1000107 and plenty patches from others.
&lt;br&gt;Most of them not even just have sponsors :-(
&lt;br&gt;Seems to be work for garbage. Only few externals have chance for 
&lt;br&gt;contribution, mostly ex-employees from Sun.
&lt;br&gt;&lt;br&gt;&amp;gt; I guess right now folks are waiting for the Oracle acquisition.
&lt;br&gt;&lt;br&gt;Hopefully!
&lt;br&gt;&lt;br&gt;-Ulf
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-constant-for-line.separator-and-friends-tp26276324p26310381.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26309906</id>
	<title>Re: &lt;Swing Dev&gt; [PATCH] 6179357: Generics: JList</title>
	<published>2009-11-11T14:29:58Z</published>
	<updated>2009-11-11T14:29:58Z</updated>
	<author>
		<name>Florian Brunner</name>
	</author>
	<content type="html">Hi Pavel,
&lt;br&gt;&lt;br&gt;just my monthly status request: any news?
&lt;br&gt;&lt;br&gt;-Florian
&lt;br&gt;&lt;br&gt;Am Montag, 28. September 2009 schrieb Pavel Porvatov:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi Florian,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Hi Pavel,
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; did you have time to look at the patch already? What's the status?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Yes, I combined your tests into one and it works. Unfortunately the fix
&lt;br&gt;&amp;gt; will be delayed because internal approve of the fix is not finished yet
&lt;br&gt;&amp;gt; (I was wrong when I wrote about approve completion, sorry)... I'll let
&lt;br&gt;&amp;gt; you know when I commit your fix.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Regards, Pavel
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; -Florian
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Am Montag, 14. September 2009 schrieb Pavel Porvatov:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Hi Florian,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Thanks! I will continue work with your fix tomorrow.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Hi Pavel,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; here are some jtreg tests, which test the signatures of the changed API
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; (raw &amp; generic calls).
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Note that, of course, the generic tests won't even compile before the
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; generic JList patch is applied. So, if you care, you could:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; - remove the generic tests (should be simple)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; - run the test with the unpatched version
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; - check them in
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; - upgrade the test along with the JList patch
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; - run them again
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; - check them both in
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Please also &amp;nbsp;check the license header and the test annotations.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Ok, I'll do it.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; Regards, Pavel.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; -Florian
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; Am Donnerstag, 3. September 2009 schrieb Florian Brunner:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi Pavel,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; great news! :-)
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I will have a look at jtreg.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; -Florian
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; Pavel Porvatov schrieb:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi Florian,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; any news about my patch? What is the status? I understand that
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; approving of the API is not a quick step, but then it's already 2-3
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; months. And we need to do the same for all the other planed API-
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; changes to &amp;quot;generify&amp;quot; Swing. It would be great if we could speed
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; things up a bit again.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The good news: the patch was approved on last Friday! So I can push
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; it. But many people asked about regression tests. Could you please
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; write such automatic tests for the fix. E.g.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -----
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String[] strings = new String[] {&amp;quot;A string&amp;quot;};
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new JList(strings);
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Vector v1 = new Vector();
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new JList(v1);
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Vector&amp;lt;String&amp;gt; v2 = new Vector&amp;lt;String&amp;gt;();
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new JList(v2);
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -----
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; etc.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Here you can find some info about test framework:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://openjdk.java.net/jtreg/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://openjdk.java.net/jtreg/&lt;/a&gt;&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks, Pavel.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; What do you estimate, how much more time this step takes?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Thanks.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -Florian
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Am Mittwoch, 22. Juli 2009 schrieben Sie:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi Florian,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi Pavel,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I hope you had nice holidays.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Do you have any news about the patch?
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I'm awaiting approve of API changes. It's not a very quick step
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; because a lot of people should take a look at your changes and give
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; approve for it...
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Regards, Pavel
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -Florian
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Am Freitag, 19. Juni 2009 schrieb Florian Brunner:
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hi Pavel,
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; enjoy your holidays! My holidays start from 27th June till 8th
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; July, so
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; we can continue the work on generics afterwards again.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; -Florian
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Am Donnerstag, 11. Juni 2009 schrieb Pavel Porvatov:
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Swing-Development-f27711.html&quot; embed=&quot;fixTarget[27711]&quot; target=&quot;_top&quot; &gt;OpenJDK Swing Development&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/%3CSwing-Dev%3E--%C2%A0-PATCH--6179357%3A-Generics%3A-JList-tp22649319p26309906.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26309915</id>
	<title>Re: Anyway in java to way for the child process to wait for parent process to die</title>
	<published>2009-11-11T14:29:52Z</published>
	<updated>2009-11-11T14:29:52Z</updated>
	<author>
		<name>David Holmes - Sun Microsystems</name>
	</author>
	<content type="html">Paulo Levi said the following on 11/12/09 05:31:
&lt;br&gt;&amp;gt; In process builder.
&lt;br&gt;&lt;br&gt;No.
&lt;br&gt;&lt;br&gt;I'm not aware of any OS support for waiting for a parent process to die.
&lt;br&gt;&lt;br&gt;David Holmes
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Anyway-in-java-to-way-for-the-child-process-to-wait-for-parent--process-to-die-tp26307139p26309915.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26309659</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T14:13:39Z</published>
	<updated>2009-11-11T14:13:39Z</updated>
	<author>
		<name>Vladimir Kozlov-5</name>
	</author>
	<content type="html">Yes, enum is fine.
&lt;br&gt;&lt;br&gt;Vladimir
&lt;br&gt;&lt;br&gt;Tom Rodriguez wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Why 6 is limit for constant strings? Add some comments.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Ok. It's just a number. &amp;nbsp;6 seems like an ok code space vs. speed tradeoff.
&lt;br&gt;&amp;gt;&amp;gt; May be we should have it as flag or definition to be more visible?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; A flag seems excessive. &amp;nbsp;It's not like this is a critical tunable. &amp;nbsp;I can move it into an enum in PhaseStringOpts if you like.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; enum {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; // max length of constant string copy unrolling in copy_string &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; unroll_string_copy_length = 6
&lt;br&gt;&amp;gt; &amp;nbsp; };
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; tom
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://cr.openjdk.java.net/~never/6892658/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cr.openjdk.java.net/~never/6892658/&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26309659.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26309564</id>
	<title>Re: What is the status of Zero on OpenJDK 7</title>
	<published>2009-11-11T14:07:04Z</published>
	<updated>2009-11-11T14:07:04Z</updated>
	<author>
		<name>mvfranz</name>
	</author>
	<content type="html">&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Wed, Nov 11, 2009 at 9:09 AM, Gary Benson &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26309564&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gbenson@...&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;
&lt;div class=&quot;im&quot;&gt;Michael Franz wrote:&lt;br&gt;
&amp;gt; On Wed, Nov 11, 2009 at 8:55 AM, Gary Benson &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26309564&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gbenson@...&lt;/a&gt;&amp;gt; wrote:&lt;br&gt;
&amp;gt; &amp;gt; Michael Franz wrote:&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; On Wed, Nov 11, 2009 at 4:46 AM, Gary Benson &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26309564&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gbenson@...&lt;/a&gt;&amp;gt; wrote:&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &amp;gt; Michael Franz wrote:&lt;br&gt;
&lt;/div&gt;&lt;div class=&quot;im&quot;&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; I am building on a G4 which is 32 bits, but _LP64=1 is being&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; defined.  This is causing problems as jlong is being defined&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; incorrectly (long instead of long long).  How do I unset&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; _LP64?&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &amp;gt; What does &amp;#39;uname -m&amp;#39; say on your machine?&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; &amp;gt; uname -m&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; ppc&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; I was able to get the build to progress by setting&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; ARCH_DATA_MODEL=32 before calling make.  I did this since there&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; didn&amp;#39;t seem to be a case where the ARCH was equal to ppc and it&lt;br&gt;
&amp;gt; &amp;gt; &amp;gt; then defaults to 64.&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Interesting.  Is this with IcedTea7?&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Yes,  It is current TIP as of a few days ago.&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;Ah, it looks like it hasn&amp;#39;t been updated with the different&lt;br&gt;
environment variables that the upstreamed Zero requires.&lt;br&gt;
I&amp;#39;ll fix it...&lt;br&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br&gt;My build finished successfully when I set arch before make.  That seems to be the only thing missing.  I am going to try with the latest TIP. &lt;br&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Distribution-specific-Packaging-f27646.html&quot; embed=&quot;fixTarget[27646]&quot; target=&quot;_top&quot; &gt;OpenJDK Distribution-specific Packaging&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/What-is-the-status-of-Zero-on-OpenJDK-7-tp26259327p26309564.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26309506</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T14:03:21Z</published>
	<updated>2009-11-11T14:03:21Z</updated>
	<author>
		<name>Tom Rodriguez</name>
	</author>
	<content type="html">&lt;br&gt;On Nov 11, 2009, at 1:59 PM, Vladimir Kozlov wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; You use fetch_static_field() only to read Integer.sizeTable. Does it need
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; to be so generalized? But you can keep it as it is.
&lt;br&gt;&amp;gt;&amp;gt; Originally I was going to read some other fields so I needed something general. &amp;nbsp;It's based on do_get_xxx and I don't see any reason to simplify it. &amp;nbsp;I could move it over into GraphKit.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; OK.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; In int_stringSize(), I think, TypeAryPtr::INTS memory should be used instead of
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; TypeAryPtr::CHARS (for final_mem) and int_adr_idx (needs to add it) instead
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; of char_adr_idx.
&lt;br&gt;&amp;gt;&amp;gt; Actually there are no stores so it's not needed at all. &amp;nbsp;I'd added some debugging code that did a runtime call and needed the phi but I think I can remove it completely now.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; OK.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Why 6 is limit for constant strings? Add some comments.
&lt;br&gt;&amp;gt;&amp;gt; Ok. It's just a number. &amp;nbsp;6 seems like an ok code space vs. speed tradeoff.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; May be we should have it as flag or definition to be more visible?
&lt;/div&gt;&lt;br&gt;A flag seems excessive. &amp;nbsp;It's not like this is a critical tunable. &amp;nbsp;I can move it into an enum in PhaseStringOpts if you like.
&lt;br&gt;&lt;br&gt;&amp;nbsp; enum {
&lt;br&gt;&amp;nbsp; &amp;nbsp; // max length of constant string copy unrolling in copy_string &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; unroll_string_copy_length = 6
&lt;br&gt;&amp;nbsp; };
&lt;br&gt;&lt;br&gt;tom
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; tom
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://cr.openjdk.java.net/~never/6892658/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cr.openjdk.java.net/~never/6892658/&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26309506.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26309422</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T13:59:42Z</published>
	<updated>2009-11-11T13:59:42Z</updated>
	<author>
		<name>Vladimir Kozlov-5</name>
	</author>
	<content type="html">Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt; You use fetch_static_field() only to read Integer.sizeTable. Does it need
&lt;br&gt;&amp;gt;&amp;gt; to be so generalized? But you can keep it as it is.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Originally I was going to read some other fields so I needed something general. &amp;nbsp;It's based on do_get_xxx and I don't see any reason to simplify it. &amp;nbsp;I could move it over into GraphKit.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;OK.
&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt; In int_stringSize(), I think, TypeAryPtr::INTS memory should be used instead of
&lt;br&gt;&amp;gt;&amp;gt; TypeAryPtr::CHARS (for final_mem) and int_adr_idx (needs to add it) instead
&lt;br&gt;&amp;gt;&amp;gt; of char_adr_idx.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Actually there are no stores so it's not needed at all. &amp;nbsp;I'd added some debugging code that did a runtime call and needed the phi but I think I can remove it completely now.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;OK.
&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt; Why 6 is limit for constant strings? Add some comments.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Ok. It's just a number. &amp;nbsp;6 seems like an ok code space vs. speed tradeoff.
&lt;br&gt;&lt;br&gt;May be we should have it as flag or definition to be more visible?
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;Vladimir
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; tom
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://cr.openjdk.java.net/~never/6892658/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cr.openjdk.java.net/~never/6892658/&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26309422.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26309421</id>
	<title>hg: jdk7/build/hotspot: 19 new changesets</title>
	<published>2009-11-11T13:56:50Z</published>
	<updated>2009-11-11T13:56:50Z</updated>
	<author>
		<name>Kelly O'Hair</name>
	</author>
	<content type="html">Changeset: 08780c8a9f04
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;kamg
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-20 16:34 -0400
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/08780c8a9f04&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/08780c8a9f04&lt;/a&gt;&lt;br&gt;&lt;br&gt;6893483: DTrace probe return values for a couple JNI methods are wrong
&lt;br&gt;Summary: Fix the shadowing and incorrect macro usages
&lt;br&gt;Reviewed-by: coleenp
&lt;br&gt;&lt;br&gt;! src/share/vm/prims/jni.cpp
&lt;br&gt;&lt;br&gt;Changeset: a3b9e96881fe
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;xlu
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-23 18:44 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/a3b9e96881fe&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/a3b9e96881fe&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;&lt;br&gt;Changeset: d912f17c1ae4
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;xlu
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-28 10:37 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/d912f17c1ae4&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/d912f17c1ae4&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;&lt;br&gt;Changeset: 0a46d0c5dccb
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;never
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-15 11:47 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/0a46d0c5dccb&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/0a46d0c5dccb&lt;/a&gt;&lt;br&gt;&lt;br&gt;6891750: deopt blob kills values in O5
&lt;br&gt;Reviewed-by: kvn, twisti
&lt;br&gt;&lt;br&gt;! src/cpu/sparc/vm/sharedRuntime_sparc.cpp
&lt;br&gt;+ test/compiler/6891750/Test6891750.java
&lt;br&gt;&lt;br&gt;Changeset: 71fdc5052e49
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;cfang
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-16 16:14 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/71fdc5052e49&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/71fdc5052e49&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;&lt;br&gt;Changeset: 987e948ebbc8
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;jrose
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-17 19:51 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/987e948ebbc8&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/987e948ebbc8&lt;/a&gt;&lt;br&gt;&lt;br&gt;6815692: method handle code needs some cleanup (post-6655638)
&lt;br&gt;Summary: correctly raise exceptions, support safe bitwise &amp;quot;raw&amp;quot; conversions, fix bugs revealed by VerifyMethodHandles, remove dead code, improve debugging support
&lt;br&gt;Reviewed-by: never, twisti
&lt;br&gt;&lt;br&gt;! src/cpu/x86/vm/methodHandles_x86.cpp
&lt;br&gt;! src/cpu/x86/vm/templateInterpreter_x86_32.cpp
&lt;br&gt;! src/share/vm/classfile/javaClasses.hpp
&lt;br&gt;! src/share/vm/classfile/systemDictionary.cpp
&lt;br&gt;! src/share/vm/oops/instanceKlass.cpp
&lt;br&gt;! src/share/vm/oops/instanceKlass.hpp
&lt;br&gt;! src/share/vm/oops/klass.cpp
&lt;br&gt;! src/share/vm/oops/klass.hpp
&lt;br&gt;! src/share/vm/oops/markOop.cpp
&lt;br&gt;! src/share/vm/oops/methodOop.cpp
&lt;br&gt;! src/share/vm/prims/methodHandles.cpp
&lt;br&gt;! src/share/vm/prims/methodHandles.hpp
&lt;br&gt;&lt;br&gt;Changeset: 873ec3787992
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;kvn
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-21 09:15 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/873ec3787992&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/873ec3787992&lt;/a&gt;&lt;br&gt;&lt;br&gt;6892186: SA does not dump debug info for scalar replaced objects
&lt;br&gt;Summary: Implement scalar replaced objects debug info dump in SA.
&lt;br&gt;Reviewed-by: twisti
&lt;br&gt;&lt;br&gt;! agent/make/saenv.sh
&lt;br&gt;! agent/make/saenv64.sh
&lt;br&gt;! agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java
&lt;br&gt;! agent/src/share/classes/sun/jvm/hotspot/code/CodeCache.java
&lt;br&gt;! agent/src/share/classes/sun/jvm/hotspot/code/NMethod.java
&lt;br&gt;! agent/src/share/classes/sun/jvm/hotspot/code/PCDesc.java
&lt;br&gt;! agent/src/share/classes/sun/jvm/hotspot/code/ScopeDesc.java
&lt;br&gt;! agent/src/share/classes/sun/jvm/hotspot/ui/classbrowser/HTMLGenerator.java
&lt;br&gt;! agent/src/share/classes/sun/jvm/hotspot/utilities/soql/sa.js
&lt;br&gt;! src/share/vm/opto/callnode.cpp
&lt;br&gt;! src/share/vm/runtime/vmStructs.cpp
&lt;br&gt;&lt;br&gt;Changeset: f875b4f472f7
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;twisti
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-27 03:00 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/f875b4f472f7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/f875b4f472f7&lt;/a&gt;&lt;br&gt;&lt;br&gt;6893554: SPECjvm2008 mpegaudio fails with SecurityException
&lt;br&gt;Summary: The problem occurs with negative numbers, as the 32-bit input values are sign extended into the 64-bit registers.
&lt;br&gt;Reviewed-by: kvn
&lt;br&gt;&lt;br&gt;! src/cpu/sparc/vm/sparc.ad
&lt;br&gt;&lt;br&gt;Changeset: 4926bf2d292f
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;cfang
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-29 08:49 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/4926bf2d292f&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/4926bf2d292f&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;&lt;br&gt;Changeset: fc06cd9b42c7
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;tonyp
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-23 14:34 -0400
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/fc06cd9b42c7&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/fc06cd9b42c7&lt;/a&gt;&lt;br&gt;&lt;br&gt;6886024: G1: assert(recent_avg_pause_time_ratio() &amp;lt; 1.00,&amp;quot;All GC?&amp;quot;)
&lt;br&gt;Summary: the assert is incorrect and can fire incorrectly due to floating point inaccuracy.
&lt;br&gt;Reviewed-by: apetrusenko, ysr, jcoomes
&lt;br&gt;&lt;br&gt;! src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp
&lt;br&gt;&lt;br&gt;Changeset: 6270f80a7331
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;tonyp
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-09-30 14:50 -0400
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/6270f80a7331&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/6270f80a7331&lt;/a&gt;&lt;br&gt;&lt;br&gt;6890137: G1: revamp reachable object dump
&lt;br&gt;Summary: Revamp the reachable object dump debugging facility.
&lt;br&gt;Reviewed-by: jmasa, apetrusenko
&lt;br&gt;&lt;br&gt;! src/share/vm/gc_implementation/g1/concurrentMark.cpp
&lt;br&gt;! src/share/vm/gc_implementation/g1/concurrentMark.hpp
&lt;br&gt;! src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
&lt;br&gt;! src/share/vm/gc_implementation/g1/g1_globals.hpp
&lt;br&gt;&lt;br&gt;Changeset: fa2f65ebeb08
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;apetrusenko
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-27 02:42 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/fa2f65ebeb08&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/fa2f65ebeb08&lt;/a&gt;&lt;br&gt;&lt;br&gt;6870843: G1: G1 GC memory leak
&lt;br&gt;Summary: The fix addresses two memory leaks in G1 code: (1) _evac_failure_scan_stack - a resource object allocated on the C heap was not freed; (2) RSHashTable were linked into deleted list which was only cleared at full GC.
&lt;br&gt;Reviewed-by: tonyp, iveresov
&lt;br&gt;&lt;br&gt;! src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
&lt;br&gt;! src/share/vm/gc_implementation/g1/sparsePRT.cpp
&lt;br&gt;! src/share/vm/gc_implementation/g1/sparsePRT.hpp
&lt;br&gt;&lt;br&gt;Changeset: 72a6752ac432
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;ysr
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-28 11:16 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/72a6752ac432&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/72a6752ac432&lt;/a&gt;&lt;br&gt;&lt;br&gt;6818264: Heap dumper unexpectedly adds .hprof suffix
&lt;br&gt;Summary: Restore old behaviour wrt HeapDumpPath; first dump goes to &amp;lt;file&amp;gt;, &amp;lt;n&amp;gt;th dump goes to &amp;lt;file&amp;gt;.&amp;lt;n-1&amp;gt;, with default value of &amp;lt;file&amp;gt; the same as before.
&lt;br&gt;Reviewed-by: alanb, jcoomes, tonyp
&lt;br&gt;&lt;br&gt;! src/share/vm/services/heapDumper.cpp
&lt;br&gt;&lt;br&gt;Changeset: beb8f45ee9f0
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;johnc
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-29 09:42 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/beb8f45ee9f0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/beb8f45ee9f0&lt;/a&gt;&lt;br&gt;&lt;br&gt;6889740: G1: OpenDS fails with &amp;quot;unhandled exception in compiled code&amp;quot;
&lt;br&gt;Summary: Incorrect code was being generated for the store operation in the null case of the aastore bytecode template. The bad code was generated by the store_heap_oop routine which takes a Register as its second argument. Passing NULL_WORD (0) as the second argument causes the value to be converted to Register(0), which is rax. Thus the generated store was &amp;quot;mov (dst), $rax&amp;quot; instead of &amp;quot;mov (dst), $0x0&amp;quot;. Changed calls to store_heap_oop that pass NULL_WORD as the second argument to a new routine store_heap_oop_null.
&lt;br&gt;Reviewed-by: kvn, twisti
&lt;br&gt;&lt;br&gt;! src/cpu/x86/vm/assembler_x86.cpp
&lt;br&gt;! src/cpu/x86/vm/assembler_x86.hpp
&lt;br&gt;! src/cpu/x86/vm/templateTable_x86_64.cpp
&lt;br&gt;&lt;br&gt;Changeset: 29adffcb6a61
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;tonyp
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-30 13:31 -0400
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/29adffcb6a61&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/29adffcb6a61&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;&lt;br&gt;Changeset: a6280c71758e
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;trims
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-11-05 15:44 -0800
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/a6280c71758e&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/a6280c71758e&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;&lt;br&gt;Changeset: 50c16f09ddf5
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;trims
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-11-05 15:58 -0800
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/50c16f09ddf5&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/50c16f09ddf5&lt;/a&gt;&lt;br&gt;&lt;br&gt;6898707: Bump the HS17 build number to 05
&lt;br&gt;Summary: Update the HS17 build number to 05
&lt;br&gt;Reviewed-by: jcoomes
&lt;br&gt;&lt;br&gt;! make/hotspot_version
&lt;br&gt;&lt;br&gt;Changeset: 26f1542097f1
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;ysr
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-11-03 16:43 -0800
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/26f1542097f1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/26f1542097f1&lt;/a&gt;&lt;br&gt;&lt;br&gt;6801625: CDS: HeapDump tests crash with internal error in compactingPermGenGen.cpp
&lt;br&gt;Summary: Allow iteration over the shared spaces when using CDS, repealing previous proscription. Deferred further required CDS-related cleanups of perm gen to CR 6897789.
&lt;br&gt;Reviewed-by: phh, jmasa
&lt;br&gt;&lt;br&gt;! src/share/vm/memory/compactingPermGenGen.cpp
&lt;br&gt;! src/share/vm/memory/compactingPermGenGen.hpp
&lt;br&gt;! src/share/vm/memory/generation.cpp
&lt;br&gt;&lt;br&gt;Changeset: 9174bb32e934
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;trims
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-11-06 00:41 -0800
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/9174bb32e934&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/build/hotspot/rev/9174bb32e934&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Build-Infrastructure-f27648.html&quot; embed=&quot;fixTarget[27648]&quot; target=&quot;_top&quot; &gt;OpenJDK Build Infrastructure&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/hg%3A-jdk7-build-hotspot%3A-19-new-changesets-tp26309421p26309421.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26309251</id>
	<title>Re: Adding constant for line.separator and friends</title>
	<published>2009-11-11T13:48:59Z</published>
	<updated>2009-11-11T13:48:59Z</updated>
	<author>
		<name>Martin Buchholz-3</name>
	</author>
	<content type="html">&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Wed, Nov 11, 2009 at 12:46, Stephen Colebourne &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26309251&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;scolebourne@...&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;
Martin Buchholz wrote:&lt;div class=&quot;im&quot;&gt;&lt;br&gt;
&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;
On Wed, Nov 11, 2009 at 10:10, Ulf Zibis &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26309251&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Ulf.Zibis@...&lt;/a&gt; &amp;lt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26309251&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Ulf.Zibis@...&lt;/a&gt;&amp;gt;&amp;gt; wrote:&lt;br&gt;
    At least, IMO, fileSeparator() and pathSeparator() would belong to&lt;br&gt;
    java.io.File or java.nio.file.FileSystem.&lt;br&gt;
Those would have been better names,&lt;br&gt;
but at this point they are not worth adding.&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;&lt;/div&gt;
I don&amp;#39;t follow - why are they not worth adding now? &lt;/blockquote&gt;&lt;div&gt;&lt;br&gt;Because java.io.File already provides the functionality users need.&lt;br&gt;Not in the best way - as fields instead of methods, and&lt;br&gt;only the first char of the system property.  But it&amp;#39;s not broken enough&lt;br&gt;
to be worth fixing by providing a slightly better API.&lt;br&gt;IMO, of course.&lt;br&gt; &lt;/div&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;Becuase they should have been in JDK 1.0? Because JDK 7 is about to release? Some other reason? How and who is deciding?&lt;br&gt;

&lt;br&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br&gt;it&amp;#39;s a hard problem, and one that Sun/JCP/OpenJDK still needs to address.&lt;br&gt;I guess right now folks are waiting for the Oracle acquisition.&lt;br&gt;&lt;br&gt;Martin&lt;br&gt; &lt;/div&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;

Over the past few weeks I&amp;#39;ve been tempted to ask for sponsorship of more than one idea, change, or useful method (there are lots we could add). But the process for what is accepted and what isn&amp;#39;t seems very arbitrary. As such, I&amp;#39;m just not bothering right now (nor am I working on JSR-310, as the same arbitrary rejection could apply to that to).&lt;br&gt;
&lt;font color=&quot;#888888&quot;&gt;
&lt;br&gt;
Stephen&lt;br&gt;
&lt;/font&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-constant-for-line.separator-and-friends-tp26276324p26309251.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26309197</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T13:41:30Z</published>
	<updated>2009-11-11T13:41:30Z</updated>
	<author>
		<name>Tom Rodriguez</name>
	</author>
	<content type="html">&lt;br&gt;On Nov 11, 2009, at 12:08 PM, Vladimir Kozlov wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; Final part.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; You use kit.gvn(). instead of _gvn-&amp;gt; in several places.
&lt;br&gt;&amp;gt; Also I think you can use __ instead of kit. for intcon, makecon, loads
&lt;br&gt;&amp;gt; and others and leave it for control, memory operations only.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; You use fetch_static_field() only to read Integer.sizeTable. Does it need
&lt;br&gt;&amp;gt; to be so generalized? But you can keep it as it is.
&lt;br&gt;&lt;br&gt;Originally I was going to read some other fields so I needed something general. &amp;nbsp;It's based on do_get_xxx and I don't see any reason to simplify it. &amp;nbsp;I could move it over into GraphKit.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Can you separate inlined comments from code by empty lines in int_stringSize()?
&lt;br&gt;&lt;br&gt;Ok.
&lt;br&gt;&lt;br&gt;&amp;gt; In int_stringSize(), I think, TypeAryPtr::INTS memory should be used instead of
&lt;br&gt;&amp;gt; TypeAryPtr::CHARS (for final_mem) and int_adr_idx (needs to add it) instead
&lt;br&gt;&amp;gt; of char_adr_idx.
&lt;br&gt;&lt;br&gt;Actually there are no stores so it's not needed at all. &amp;nbsp;I'd added some debugging code that did a runtime call and needed the phi but I think I can remove it completely now.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; In int_getChars() should the sign store to have IfTrue(iff) control?:
&lt;br&gt;&lt;br&gt;Ah yes. &amp;nbsp;It should. &amp;nbsp;The store in the loop above has a similar problem.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 1124 &amp;nbsp; &amp;nbsp; Node* st = __ store_to_memory(kit.control(), kit.array_element_address(char_array, m1, T_CHAR),
&lt;br&gt;&amp;gt; 1125 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign, T_CHAR, char_adr_idx);
&lt;br&gt;&amp;gt; 1126
&lt;br&gt;&amp;gt; 1127 &amp;nbsp; &amp;nbsp; final_merge-&amp;gt;init_req(1, __ IfTrue(iff));
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; copy_string(), so you not supporting byte array strings for now?
&lt;br&gt;&lt;br&gt;We don't have byte strings.
&lt;br&gt;&lt;br&gt;&amp;gt; Why 6 is limit for constant strings? Add some comments.
&lt;br&gt;&lt;br&gt;Ok. It's just a number. &amp;nbsp;6 seems like an ok code space vs. speed tradeoff.
&lt;br&gt;&lt;br&gt;tom
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://cr.openjdk.java.net/~never/6892658/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cr.openjdk.java.net/~never/6892658/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26309197.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26308843</id>
	<title>hg: jdk7/hotspot/hotspot: 6 new changesets</title>
	<published>2009-11-11T13:19:37Z</published>
	<updated>2009-11-11T13:19:37Z</updated>
	<author>
		<name>keith.mcguigan</name>
	</author>
	<content type="html">Changeset: 473cce303f13
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;phh
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-28 16:25 -0400
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/473cce303f13&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/473cce303f13&lt;/a&gt;&lt;br&gt;&lt;br&gt;6887571: Increase default heap config sizes
&lt;br&gt;Summary: Apply modification of existing server heap size ergo to all collectors except CMS.
&lt;br&gt;Reviewed-by: jmasa, ysr, xlu
&lt;br&gt;&lt;br&gt;! src/cpu/sparc/vm/c1_globals_sparc.hpp
&lt;br&gt;! src/cpu/sparc/vm/c2_globals_sparc.hpp
&lt;br&gt;! src/cpu/sparc/vm/globals_sparc.hpp
&lt;br&gt;! src/cpu/x86/vm/c1_globals_x86.hpp
&lt;br&gt;! src/cpu/x86/vm/c2_globals_x86.hpp
&lt;br&gt;! src/cpu/x86/vm/globals_x86.hpp
&lt;br&gt;! src/cpu/zero/vm/globals_zero.hpp
&lt;br&gt;! src/os_cpu/linux_x86/vm/globals_linux_x86.hpp
&lt;br&gt;! src/os_cpu/solaris_x86/vm/globals_solaris_x86.hpp
&lt;br&gt;! src/os_cpu/windows_x86/vm/globals_windows_x86.hpp
&lt;br&gt;! src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.cpp
&lt;br&gt;! src/share/vm/memory/collectorPolicy.cpp
&lt;br&gt;! src/share/vm/runtime/arguments.cpp
&lt;br&gt;! src/share/vm/runtime/arguments.hpp
&lt;br&gt;! src/share/vm/runtime/globals.cpp
&lt;br&gt;! src/share/vm/runtime/globals.hpp
&lt;br&gt;! src/share/vm/runtime/globals_extension.hpp
&lt;br&gt;! src/share/vm/services/management.cpp
&lt;br&gt;&lt;br&gt;Changeset: c4ecde2f6b3c
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;xlu
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-10-30 17:24 -0700
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/c4ecde2f6b3c&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/c4ecde2f6b3c&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;&lt;br&gt;Changeset: 97b36138b494
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;kamg
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-11-06 15:04 -0500
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/97b36138b494&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/97b36138b494&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;&lt;br&gt;Changeset: ba7ea42fc66e
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;phh
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-11-04 16:49 -0500
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/ba7ea42fc66e&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/ba7ea42fc66e&lt;/a&gt;&lt;br&gt;&lt;br&gt;6898160: Need serviceability support for new vm argument type 'uint64_t'
&lt;br&gt;Summary: Add serviceability support for uint64_t. Flags of unknown type assert in debug builds and are ignored in product builds.
&lt;br&gt;Reviewed-by: never, xlu, mchung, dcubed
&lt;br&gt;&lt;br&gt;! src/share/vm/runtime/globals.cpp
&lt;br&gt;! src/share/vm/services/attachListener.cpp
&lt;br&gt;! src/share/vm/services/management.cpp
&lt;br&gt;&lt;br&gt;Changeset: db0d21039f34
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;kamg
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-11-06 16:05 -0500
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/db0d21039f34&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/db0d21039f34&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;&lt;br&gt;Changeset: fb4c00faa9da
&lt;br&gt;Author: &amp;nbsp; &amp;nbsp;kamg
&lt;br&gt;Date: &amp;nbsp; &amp;nbsp; &amp;nbsp;2009-11-11 09:13 -0500
&lt;br&gt;URL: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/fb4c00faa9da&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/fb4c00faa9da&lt;/a&gt;&lt;br&gt;&lt;br&gt;Merge
&lt;br&gt;&lt;br&gt;! src/share/vm/runtime/arguments.cpp
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Virtual-Machine-f27706.html&quot; embed=&quot;fixTarget[27706]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Virtual Machine&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/hg%3A-jdk7-hotspot-hotspot%3A-6-new-changesets-tp26308843p26308843.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26308289</id>
	<title>Re: Adding constant for line.separator and friends</title>
	<published>2009-11-11T12:46:31Z</published>
	<updated>2009-11-11T12:46:31Z</updated>
	<author>
		<name>Stephen Colebourne-2</name>
	</author>
	<content type="html">Martin Buchholz wrote:
&lt;br&gt;&amp;gt; On Wed, Nov 11, 2009 at 10:10, Ulf Zibis &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26308289&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Ulf.Zibis@...&lt;/a&gt; 
&lt;br&gt;&amp;gt; &amp;lt;mailto:&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26308289&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Ulf.Zibis@...&lt;/a&gt;&amp;gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; At least, IMO, fileSeparator() and pathSeparator() would belong to
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; java.io.File or java.nio.file.FileSystem.
&lt;br&gt;&amp;gt; Those would have been better names,
&lt;br&gt;&amp;gt; but at this point they are not worth adding.
&lt;br&gt;&lt;br&gt;I don't follow - why are they not worth adding now? Becuase they should 
&lt;br&gt;have been in JDK 1.0? Because JDK 7 is about to release? Some other 
&lt;br&gt;reason? How and who is deciding?
&lt;br&gt;&lt;br&gt;Over the past few weeks I've been tempted to ask for sponsorship of more 
&lt;br&gt;than one idea, change, or useful method (there are lots we could add). 
&lt;br&gt;But the process for what is accepted and what isn't seems very 
&lt;br&gt;arbitrary. As such, I'm just not bothering right now (nor am I working 
&lt;br&gt;on JSR-310, as the same arbitrary rejection could apply to that to).
&lt;br&gt;&lt;br&gt;Stephen
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-constant-for-line.separator-and-friends-tp26276324p26308289.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26307965</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T12:26:26Z</published>
	<updated>2009-11-11T12:26:26Z</updated>
	<author>
		<name>Vladimir Kozlov-5</name>
	</author>
	<content type="html">&lt;br&gt;&lt;br&gt;Tom Rodriguez wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Nov 11, 2009, at 10:36 AM, Vladimir Kozlov wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Also _begin instead of other-&amp;gt;_begin
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; in result-&amp;gt;set_allocation(other-&amp;gt;_begin)
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; _begin is must be the earliest JVMState of the pattern and other-&amp;gt;_begin has to be earlier than _begin otherwise the couldn't be merged so I can't just swap them around.
&lt;br&gt;&amp;gt;&amp;gt; Then I don't get how you optimize next code:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; SB.append((new SB()).append(s).toString()).toString()
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; It won't handle that as it's currently constructed but it handles
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; String s = new SB().append().append().toString();
&lt;br&gt;&amp;gt; String s2 = new SB().append().append(s).toString();
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; which is a case we actually care about. &amp;nbsp;Handling the case you illustrate would require extending the logic in build_candidate quite a bit I think. &amp;nbsp;I think there are more complex SB pattern that we might like to get but this is currently targeting basic ones. &amp;nbsp;We can add more later.
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;My case could be also frequent since javac will
&lt;br&gt;generate SB for the next case: &amp;nbsp;SB.append(&amp;quot;size=&amp;quot;+x).toString()
&lt;br&gt;&lt;br&gt;But, I agree, you don't need to implement it now.
&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt; and I don't see any checks that other-&amp;gt;_begin dominates _begin.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; It's by construction. &amp;nbsp;Each string concat is a linear piece of control flow from the toString back to the allocation with nothing unknown in between. &amp;nbsp;We identify a stacking opportunity by detecting that one StringConcat is an argument to another. &amp;nbsp;Then we merge them together and verify that they still form a closed graph. &amp;nbsp;That will only be true if they form another linear sequence so other-&amp;gt;_begin must dominate _begin.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;I see, the next check will fail for my case. And verification code also.
&lt;br&gt;&lt;br&gt;&amp;nbsp; 447 &amp;nbsp; &amp;nbsp; } else if (cnode-&amp;gt;method()-&amp;gt;holder() == m-&amp;gt;holder() &amp;&amp;
&lt;br&gt;&amp;nbsp; 448 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cnode-&amp;gt;method()-&amp;gt;name() == ciSymbol::append_name() &amp;&amp;
&lt;br&gt;&lt;br&gt;OK.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;Vladimir
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; tom
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; There are several places where you do next check,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; may be you can factor it in a separate function:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; method-&amp;gt;holder() == C-&amp;gt;env()-&amp;gt;StringBuilder_klass() ||
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; method-&amp;gt;holder() == C-&amp;gt;env()-&amp;gt;StringBuffer_klass()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I'm not sure factoring it out would be better.
&lt;br&gt;&amp;gt;&amp;gt; OK.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; May be also verify has_stringbuilder() in PhaseStringOpts().
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Why?
&lt;br&gt;&amp;gt;&amp;gt; OK, I see that caller code of PhaseStringOpts() has has_stringbuilder()
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Also this coalesce code will not work if &amp;quot;other&amp;quot; is used by
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; several sc/arguments since you removed it from the list after
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; first match and merge. For example:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; String s0 = new SB().append(1)...toString();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; String s1 = new SB().append(s0).append(s0).toString();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I would keep it and always replace &amp;quot;c&amp;quot; with merged
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; (you need to modify StringConcat::merge() as I pointed above).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The &amp;quot;o&amp;quot; will be removed automatically if there are no other uses.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I don't want to support that. &amp;nbsp;I don't think that's an interesting pattern. &amp;nbsp;It would also require rewriting the management of the control and trap lists and I don't want to get into that.
&lt;br&gt;&amp;gt;&amp;gt; OK.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I will look on copy_string() and related methods tomorrow.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Thanks.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tom
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26307965.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26307684</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T12:07:33Z</published>
	<updated>2009-11-11T12:07:33Z</updated>
	<author>
		<name>Vladimir Kozlov-5</name>
	</author>
	<content type="html">Final part.
&lt;br&gt;&lt;br&gt;You use kit.gvn(). instead of _gvn-&amp;gt; in several places.
&lt;br&gt;Also I think you can use __ instead of kit. for intcon, makecon, loads
&lt;br&gt;and others and leave it for control, memory operations only.
&lt;br&gt;&lt;br&gt;You use fetch_static_field() only to read Integer.sizeTable. Does it need
&lt;br&gt;to be so generalized? But you can keep it as it is.
&lt;br&gt;&lt;br&gt;Can you separate inlined comments from code by empty lines in int_stringSize()?
&lt;br&gt;&lt;br&gt;In int_stringSize(), I think, TypeAryPtr::INTS memory should be used instead of
&lt;br&gt;TypeAryPtr::CHARS (for final_mem) and int_adr_idx (needs to add it) instead
&lt;br&gt;of char_adr_idx.
&lt;br&gt;&lt;br&gt;In int_getChars() should the sign store to have IfTrue(iff) control?:
&lt;br&gt;&lt;br&gt;1124 &amp;nbsp; &amp;nbsp; Node* st = __ store_to_memory(kit.control(), kit.array_element_address(char_array, m1, T_CHAR),
&lt;br&gt;1125 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sign, T_CHAR, char_adr_idx);
&lt;br&gt;1126
&lt;br&gt;1127 &amp;nbsp; &amp;nbsp; final_merge-&amp;gt;init_req(1, __ IfTrue(iff));
&lt;br&gt;&lt;br&gt;&lt;br&gt;copy_string(), so you not supporting byte array strings for now?
&lt;br&gt;Why 6 is limit for constant strings? Add some comments.
&lt;br&gt;&lt;br&gt;&lt;br&gt;Vladimir
&lt;br&gt;&lt;br&gt;Tom Rodriguez wrote:
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://cr.openjdk.java.net/~never/6892658/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cr.openjdk.java.net/~never/6892658/&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26307684.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26307139</id>
	<title>Anyway in java to way for the child process to wait for parent  process to die</title>
	<published>2009-11-11T11:31:09Z</published>
	<updated>2009-11-11T11:31:09Z</updated>
	<author>
		<name>i30817</name>
	</author>
	<content type="html">In process builder.
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Anyway-in-java-to-way-for-the-child-process-to-wait-for-parent--process-to-die-tp26307139p26307139.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26306815</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T11:08:20Z</published>
	<updated>2009-11-11T11:08:20Z</updated>
	<author>
		<name>Tom Rodriguez</name>
	</author>
	<content type="html">&lt;br&gt;On Nov 11, 2009, at 10:36 AM, Vladimir Kozlov wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Also _begin instead of other-&amp;gt;_begin
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; in result-&amp;gt;set_allocation(other-&amp;gt;_begin)
&lt;br&gt;&amp;gt;&amp;gt; _begin is must be the earliest JVMState of the pattern and other-&amp;gt;_begin has to be earlier than _begin otherwise the couldn't be merged so I can't just swap them around.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Then I don't get how you optimize next code:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; SB.append((new SB()).append(s).toString()).toString()
&lt;/div&gt;&lt;br&gt;It won't handle that as it's currently constructed but it handles
&lt;br&gt;&lt;br&gt;String s = new SB().append().append().toString();
&lt;br&gt;String s2 = new SB().append().append(s).toString();
&lt;br&gt;&lt;br&gt;which is a case we actually care about. &amp;nbsp;Handling the case you illustrate would require extending the logic in build_candidate quite a bit I think. &amp;nbsp;I think there are more complex SB pattern that we might like to get but this is currently targeting basic ones. &amp;nbsp;We can add more later.
&lt;br&gt;&lt;br&gt;&amp;gt; and I don't see any checks that other-&amp;gt;_begin dominates _begin.
&lt;br&gt;&lt;br&gt;It's by construction. &amp;nbsp;Each string concat is a linear piece of control flow from the toString back to the allocation with nothing unknown in between. &amp;nbsp;We identify a stacking opportunity by detecting that one StringConcat is an argument to another. &amp;nbsp;Then we merge them together and verify that they still form a closed graph. &amp;nbsp;That will only be true if they form another linear sequence so other-&amp;gt;_begin must dominate _begin.
&lt;br&gt;&lt;br&gt;tom
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; There are several places where you do next check,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; may be you can factor it in a separate function:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; method-&amp;gt;holder() == C-&amp;gt;env()-&amp;gt;StringBuilder_klass() ||
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; method-&amp;gt;holder() == C-&amp;gt;env()-&amp;gt;StringBuffer_klass()
&lt;br&gt;&amp;gt;&amp;gt; I'm not sure factoring it out would be better.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; OK.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; May be also verify has_stringbuilder() in PhaseStringOpts().
&lt;br&gt;&amp;gt;&amp;gt; Why?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; OK, I see that caller code of PhaseStringOpts() has has_stringbuilder()
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Also this coalesce code will not work if &amp;quot;other&amp;quot; is used by
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; several sc/arguments since you removed it from the list after
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; first match and merge. For example:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; String s0 = new SB().append(1)...toString();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; String s1 = new SB().append(s0).append(s0).toString();
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I would keep it and always replace &amp;quot;c&amp;quot; with merged
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; (you need to modify StringConcat::merge() as I pointed above).
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; The &amp;quot;o&amp;quot; will be removed automatically if there are no other uses.
&lt;br&gt;&amp;gt;&amp;gt; I don't want to support that. &amp;nbsp;I don't think that's an interesting pattern. &amp;nbsp;It would also require rewriting the management of the control and trap lists and I don't want to get into that.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; OK.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I will look on copy_string() and related methods tomorrow.
&lt;br&gt;&amp;gt;&amp;gt; Thanks.
&lt;br&gt;&amp;gt;&amp;gt; tom
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Vladimir
&lt;/div&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26306815.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26306554</id>
	<title>Re: New convention for static methods ?</title>
	<published>2009-11-11T10:51:24Z</published>
	<updated>2009-11-11T10:51:24Z</updated>
	<author>
		<name>Neal Gafter</name>
	</author>
	<content type="html">That convention has been around a while for interfaces.  Why the convention is being used for the class FileSystem I don&amp;#39;t know.&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Wed, Nov 11, 2009 at 10:13 AM, Ulf Zibis &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26306554&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Ulf.Zibis@...&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;

&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;Hi all,&lt;br&gt;
&lt;br&gt;
is that new JDK convention having *s classes for static methods?&lt;br&gt;
Refer to java.nio.file.FileSystem vs. java.nio.file.FileSystems.&lt;br&gt;&lt;font color=&quot;#888888&quot;&gt;
&lt;br&gt;
-Ulf&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/New-convention-for-static-methods---tp26305966p26306554.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26306293</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T10:35:11Z</published>
	<updated>2009-11-11T10:35:11Z</updated>
	<author>
		<name>Vladimir Kozlov-5</name>
	</author>
	<content type="html">&lt;br&gt;&lt;br&gt;Tom Rodriguez wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Also _begin instead of other-&amp;gt;_begin
&lt;br&gt;&amp;gt;&amp;gt; in result-&amp;gt;set_allocation(other-&amp;gt;_begin)
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; _begin is must be the earliest JVMState of the pattern and other-&amp;gt;_begin has to be earlier than _begin otherwise the couldn't be merged so I can't just swap them around.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;Then I don't get how you optimize next code:
&lt;br&gt;&lt;br&gt;SB.append((new SB()).append(s).toString()).toString()
&lt;br&gt;&lt;br&gt;and I don't see any checks that other-&amp;gt;_begin dominates _begin.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; There are several places where you do next check,
&lt;br&gt;&amp;gt;&amp;gt; may be you can factor it in a separate function:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; method-&amp;gt;holder() == C-&amp;gt;env()-&amp;gt;StringBuilder_klass() ||
&lt;br&gt;&amp;gt;&amp;gt; method-&amp;gt;holder() == C-&amp;gt;env()-&amp;gt;StringBuffer_klass()
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I'm not sure factoring it out would be better.
&lt;br&gt;&lt;br&gt;OK.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; May be also verify has_stringbuilder() in PhaseStringOpts().
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Why?
&lt;br&gt;&lt;br&gt;OK, I see that caller code of PhaseStringOpts() has has_stringbuilder()
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;&amp;gt; Also this coalesce code will not work if &amp;quot;other&amp;quot; is used by
&lt;br&gt;&amp;gt;&amp;gt; several sc/arguments since you removed it from the list after
&lt;br&gt;&amp;gt;&amp;gt; first match and merge. For example:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; String s0 = new SB().append(1)...toString();
&lt;br&gt;&amp;gt;&amp;gt; String s1 = new SB().append(s0).append(s0).toString();
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; I would keep it and always replace &amp;quot;c&amp;quot; with merged
&lt;br&gt;&amp;gt;&amp;gt; (you need to modify StringConcat::merge() as I pointed above).
&lt;br&gt;&amp;gt;&amp;gt; The &amp;quot;o&amp;quot; will be removed automatically if there are no other uses.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I don't want to support that. &amp;nbsp;I don't think that's an interesting pattern. &amp;nbsp;It would also require rewriting the management of the control and trap lists and I don't want to get into that.
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;OK.
&lt;br&gt;&lt;br&gt;Vladimir
&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt; I will look on copy_string() and related methods tomorrow.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Thanks.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; tom
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26306293.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26306061</id>
	<title>Re: Adding constant for line.separator and friends</title>
	<published>2009-11-11T10:20:08Z</published>
	<updated>2009-11-11T10:20:08Z</updated>
	<author>
		<name>Martin Buchholz-3</name>
	</author>
	<content type="html">&lt;br&gt;&lt;br&gt;&lt;div class=&quot;gmail_quote&quot;&gt;On Wed, Nov 11, 2009 at 10:10, Ulf Zibis &lt;span dir=&quot;ltr&quot;&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26306061&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Ulf.Zibis@...&lt;/a&gt;&amp;gt;&lt;/span&gt; wrote:&lt;br&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;
At least, IMO, fileSeparator() and pathSeparator() would belong to java.io.File or java.nio.file.FileSystem.&lt;br&gt;&lt;font color=&quot;#888888&quot;&gt;
&lt;br&gt;&lt;/font&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br&gt;Those would have been better names, &lt;br&gt;but at this point they are not worth adding.&lt;br&gt;&lt;br&gt;Martin&lt;br&gt; &lt;/div&gt;&lt;/div&gt;&lt;br&gt;
&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-constant-for-line.separator-and-friends-tp26276324p26306061.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26305966</id>
	<title>New convention for static methods ?</title>
	<published>2009-11-11T10:13:48Z</published>
	<updated>2009-11-11T10:13:48Z</updated>
	<author>
		<name>Ulf Zibis-2</name>
	</author>
	<content type="html">Hi all,
&lt;br&gt;&lt;br&gt;is that new JDK convention having *s classes for static methods?
&lt;br&gt;Refer to java.nio.file.FileSystem vs. java.nio.file.FileSystems.
&lt;br&gt;&lt;br&gt;-Ulf
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/New-convention-for-static-methods---tp26305966p26305966.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26305887</id>
	<title>Re: Adding constant for line.separator and friends</title>
	<published>2009-11-11T10:10:02Z</published>
	<updated>2009-11-11T10:10:02Z</updated>
	<author>
		<name>Ulf Zibis-2</name>
	</author>
	<content type="html">Am 11.11.2009 01:40, Martin Buchholz schrieb:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Tue, Nov 10, 2009 at 10:06, Joseph D. Darcy &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26305887&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Joe.Darcy@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; Martin,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; If we're settled on a method in System, please send a revised spec and I'll
&lt;br&gt;&amp;gt;&amp;gt; file the ccc paperwork.
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I'm agnostic about whether it belongs in System or File or elsewhere,
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;/div&gt;&lt;br&gt;At least, IMO, fileSeparator() and pathSeparator() would belong to 
&lt;br&gt;java.io.File or java.nio.file.FileSystem.
&lt;br&gt;&lt;br&gt;-Ulf
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Adding-constant-for-line.separator-and-friends-tp26276324p26305887.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26305837</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T10:06:17Z</published>
	<updated>2009-11-11T10:06:17Z</updated>
	<author>
		<name>Tom Rodriguez</name>
	</author>
	<content type="html">Note that using experimental required changes to several globals file because the macro didn't support experimental as is.
&lt;br&gt;&lt;br&gt;tom
&lt;br&gt;&lt;br&gt;On Nov 11, 2009, at 9:11 AM, Tom Rodriguez wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I've updated the webrev with all these changes.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; tom
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On Nov 11, 2009, at 8:36 AM, Vladimir Kozlov wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the_MIN_VALUE_string may be should be the_MIN_INT_VALUE_string
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I was trying to mimic Integer.MIN_VALUE. &amp;nbsp;If you want int in there then how about the_min_jint_string?
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Agree with the_min_jint_string.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; c2_globals.hpp
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I thought we will use experimental for OptimizeStringConcat.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I guess we could. &amp;nbsp;I don't really like experimental much but I'm not completely against it.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; I would prefer experimental.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; doCall.cpp
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I saw cases when append methods were not inlined because they were
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; already compiled into &amp;quot;big&amp;quot; compiled method. You call for_late_inline()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; after ok_to_inline(), so may be we should relax that condition for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; OptimizeStringConcat case.
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; The code doesn't care whether the interesting methods are inlined or not. &amp;nbsp;If the methods would have been inlined then we register a late inline for them. &amp;nbsp;If they wouldn't have been inlined then we tell the DirectCallGenerator to use separate io projs so that we can properly find all the edges if we need to replace it. &amp;nbsp;THe late inlining logic is mainly about giving us the same result if we don't end up performing the optimization.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; You are right. The code delays inlining, not trying to inline.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Should you check that safepoint has &amp;gt; jvms-&amp;gt;argoff() inputs?:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Node* receiver = jvms-&amp;gt;map()-&amp;gt;in(jvms-&amp;gt;argoff() + 1);
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I guess I could but if there aren't enough then the call itself is malformed and we'll die later won't we? &amp;nbsp;Do you think i should?
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Leave it as it is.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; macro.cpp
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Can you print array only when it is array?:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; log-&amp;gt;head(&amp;quot;eliminate_allocation %s type='%d'&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; alloc-&amp;gt;is_AllocateArray() ? &amp;quot;array&amp;quot; : &amp;quot;&amp;quot;, log-&amp;gt;identify(tklass-&amp;gt;klass()));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; the same with &amp;quot;lock&amp;quot;:&amp;quot;unlock&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I could but that's not very good xml. &amp;nbsp;I think I'll just leave that out since arrayness should be discerned from the klass. &amp;nbsp;I'd prefer to leave it as it for lock though.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Leave it as it is since it is better for XML.
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; tom
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://cr.openjdk.java.net/~never/6892658/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cr.openjdk.java.net/~never/6892658/&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26305837.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26305627</id>
	<title>Re: Review please: 6367077 : Purge LD_LIBRARY_PATH from the Unix launchers</title>
	<published>2009-11-11T09:51:53Z</published>
	<updated>2009-11-11T09:51:53Z</updated>
	<author>
		<name>kumar.srinivasan</name>
	</author>
	<content type="html">Thanks Martin, I will take care of that.
&lt;br&gt;&lt;br&gt;Kumar
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Thanks for doing this. &amp;nbsp;10-minute review looks good.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; One minor comment:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; You probably want to die if &amp;quot;sun.arch.data.model&amp;quot; is not either &amp;quot;32&amp;quot; or &amp;quot;64&amp;quot;.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;static final boolean is64Bit =
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.getProperty(&amp;quot;sun.arch.data.model&amp;quot;, &amp;quot;32&amp;quot;).equals(&amp;quot;64&amp;quot;);
&lt;br&gt;&amp;gt; + &amp;nbsp; &amp;nbsp;static final boolean is32Bit = !is64Bit;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Martin
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Tue, Nov 10, 2009 at 14:55, Kumar Srinivasan
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26305627&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Kumar.Srinivasan@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;nbsp; 
&lt;br&gt;&amp;gt;&amp;gt; Hello All,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; This is a long standing issue we have had with the java launcher, please
&lt;br&gt;&amp;gt;&amp;gt; review.
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://cr.openjdk.java.net/~ksrini/6367077/webrev.00/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cr.openjdk.java.net/~ksrini/6367077/webrev.00/&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Thanks
&lt;br&gt;&amp;gt;&amp;gt; Kumar
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp; &amp;nbsp; 
&lt;/div&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Core-Libraries-f27647.html&quot; embed=&quot;fixTarget[27647]&quot; target=&quot;_top&quot; &gt;OpenJDK Core Libraries&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Review-please%3A-6367077-%3A-Purge-LD_LIBRARY_PATH-from-the-Unix-launchers-tp26292913p26305627.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26305355</id>
	<title>Native method wrapper generation</title>
	<published>2009-11-11T09:37:20Z</published>
	<updated>2009-11-11T09:37:20Z</updated>
	<author>
		<name>Gary Benson</name>
	</author>
	<content type="html">Hi all,
&lt;br&gt;&lt;br&gt;This commit adds native wrapper generation to Shark. &amp;nbsp;It also removes
&lt;br&gt;support for LLVM &amp;lt; 2.6, because the new code requires it. &amp;nbsp;I'll write
&lt;br&gt;this up in more detail tomorrow with some benchmarks.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;Gary
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&lt;a href=&quot;http://gbenson.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gbenson.net/&lt;/a&gt;&lt;br&gt;&lt;br /&gt; &lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://old.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;patch.gz&lt;/strong&gt; (32K) &lt;a href=&quot;http://old.nabble.com/attachment/26305355/0/patch.gz&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Distribution-specific-Packaging-f27646.html&quot; embed=&quot;fixTarget[27646]&quot; target=&quot;_top&quot; &gt;OpenJDK Distribution-specific Packaging&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Native-method-wrapper-generation-tp26305355p26305355.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26305296</id>
	<title>Re: Getting PrintAssembly to work ...</title>
	<published>2009-11-11T09:33:31Z</published>
	<updated>2009-11-11T09:33:31Z</updated>
	<author>
		<name>Dennis Byrne</name>
	</author>
	<content type="html">Thanks for your reply Volker. &amp;nbsp;Got it.
&lt;br&gt;&lt;br&gt;&amp;nbsp; byrne@wud-nbyrne01:~$ java -version
&lt;br&gt;&amp;nbsp; java version &amp;quot;1.6.0_0&amp;quot;
&lt;br&gt;&amp;nbsp; OpenJDK Runtime Environment (IcedTea6 1.6.1) (6b16-1.6.1-1ubuntu3)
&lt;br&gt;&amp;nbsp; OpenJDK Client VM (build 14.0-b16, mixed mode, sharing)
&lt;br&gt;&lt;br&gt;I am now trying to build the plugin with the following error. &amp;nbsp;Two
&lt;br&gt;questions, the README reads &amp;quot;BINTUILS&amp;quot; rather than &amp;quot;BINUTILS&amp;quot;. &amp;nbsp;I get
&lt;br&gt;the following error regardless of which flag I use. &amp;nbsp;Also, what should
&lt;br&gt;I be telling make in order to keep it from looking for
&lt;br&gt;/java/re/j2se/1.6.0/latest/binaries/linux-i586/bin/java (which does
&lt;br&gt;not exist) ?
&lt;br&gt;&lt;br&gt;dbyrne@wud-nbyrne01:~/print_assembly/hotspot-2f1ec89b9995/make$ make
&lt;br&gt;BINTUILS=/home/dbyrne/print_assembly/binutils-2.19.1
&lt;br&gt;cd: 1: can't cd to /java/re/j2se/1.6.0/latest/binaries/linux-i586
&lt;br&gt;cd /home/dbyrne/print_assembly/hotspot-2f1ec89b9995/make; \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; make VM_TARGET=product generic_build2
&lt;br&gt;cd: 1: can't cd to /java/re/j2se/1.6.0/latest/binaries/linux-i586
&lt;br&gt;make[1]: Entering directory
&lt;br&gt;`/home/dbyrne/print_assembly/hotspot-2f1ec89b9995/make'
&lt;br&gt;mkdir -p /home/dbyrne/print_assembly/hotspot-2f1ec89b9995/build/linux
&lt;br&gt;cd /home/dbyrne/print_assembly/hotspot-2f1ec89b9995/build/linux; \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; make -f /home/dbyrne/print_assembly/hotspot-2f1ec89b9995/make/linux/Makefile
&lt;br&gt;\
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JAVA_HOME=/home/dbyrne/print_assembly/hotspot-2f1ec89b9995/make
&lt;br&gt;OUTPUTDIR=/home/dbyrne/print_assembly/hotspot-2f1ec89b9995/build/linux
&lt;br&gt;GAMMADIR=/home/dbyrne/print_assembly/hotspot-2f1ec89b9995
&lt;br&gt;MAKE_VERBOSE=y HOTSPOT_RELEASE_VERSION=17.0-b05
&lt;br&gt;JRE_RELEASE_VERSION=&amp;quot;1.7.0&amp;quot; HOTSPOT_BUILD_VERSION=internal product
&lt;br&gt;cd: 1: can't cd to /java/re/j2se/1.6.0/latest/binaries/linux-i586
&lt;br&gt;make[2]: Entering directory
&lt;br&gt;`/home/dbyrne/print_assembly/hotspot-2f1ec89b9995/build/linux'
&lt;br&gt;make -f /home/dbyrne/print_assembly/hotspot-2f1ec89b9995/make/linux/Makefile
&lt;br&gt;checks
&lt;br&gt;cd: 1: can't cd to /java/re/j2se/1.6.0/latest/binaries/linux-i586
&lt;br&gt;make[3]: Entering directory
&lt;br&gt;`/home/dbyrne/print_assembly/hotspot-2f1ec89b9995/build/linux'
&lt;br&gt;/java/re/j2se/1.6.0/latest/binaries/linux-i586/bin/javap
&lt;br&gt;javax.xml.transform.TransformerFactory &amp;gt; /dev/null 2&amp;gt;&amp;1; \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ $? -ne 0 ]; then \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/java/re/j2se/1.6.0/latest/binaries/linux-i586/bin/java -version; \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo &amp;quot;*** An XSLT processor (J2SE 1.4.x or newer) is required&amp;quot; \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;to bootstrap this build&amp;quot; 1&amp;gt;&amp;2; \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exit 1; \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi
&lt;br&gt;/bin/sh: /java/re/j2se/1.6.0/latest/binaries/linux-i586/bin/java: not found
&lt;br&gt;*** An XSLT processor (J2SE 1.4.x or newer) is required to bootstrap this build
&lt;br&gt;make[3]: *** [check_j2se_version] Error 1
&lt;br&gt;make[3]: Leaving directory
&lt;br&gt;`/home/dbyrne/print_assembly/hotspot-2f1ec89b9995/build/linux'
&lt;br&gt;make[2]: *** [linux_i486_compiler2/debug] Error 2
&lt;br&gt;make[2]: Leaving directory
&lt;br&gt;`/home/dbyrne/print_assembly/hotspot-2f1ec89b9995/build/linux'
&lt;br&gt;make[1]: *** [generic_build2] Error 2
&lt;br&gt;make[1]: Leaving directory
&lt;br&gt;`/home/dbyrne/print_assembly/hotspot-2f1ec89b9995/make'
&lt;br&gt;make: *** [product] Error 2
&lt;br&gt;&lt;br&gt;Dennis
&lt;br&gt;&lt;br&gt;On Tue, Nov 10, 2009 at 3:09 AM, Volker Simonis
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26305296&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;volker.simonis@...&lt;/a&gt;&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; The documentation is somewhat outdated. It should read &amp;quot;..require at
&lt;br&gt;&amp;gt; least HotSpot 14&amp;quot;. So JDK 6u14 and higher or the latest OpenJDK6
&lt;br&gt;&amp;gt; release should be ok.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Regards,
&lt;br&gt;&amp;gt; Volker
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On 11/10/09, Dennis Byrne &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26305296&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;dennis@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://wikis.sun.com/display/HotSpotInternals/PrintAssembly&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://wikis.sun.com/display/HotSpotInternals/PrintAssembly&lt;/a&gt;&amp;nbsp;reads &amp;quot;The
&lt;br&gt;&amp;gt;&amp;gt;  following HotSpot options ... require OpenJDK 7&amp;quot;.  If I cannot use
&lt;br&gt;&amp;gt;&amp;gt;  OpenJDK 6, what are my options for obtaining 7?  The install
&lt;br&gt;&amp;gt;&amp;gt;  instructions all appear to be for version 6
&lt;br&gt;&amp;gt;&amp;gt;  &lt;a href=&quot;http://openjdk.java.net/install/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://openjdk.java.net/install/&lt;/a&gt;&amp;nbsp;.  Thanks in advance,
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;  --
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Dennis Byrne
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Dennis Byrne
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-General-discussion-f27655.html&quot; embed=&quot;fixTarget[27655]&quot; target=&quot;_top&quot; &gt;OpenJDK General discussion&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Getting-PrintAssembly-to-work-...-tp26275842p26305296.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26304952</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T09:11:51Z</published>
	<updated>2009-11-11T09:11:51Z</updated>
	<author>
		<name>Tom Rodriguez</name>
	</author>
	<content type="html">I've updated the webrev with all these changes.
&lt;br&gt;&lt;br&gt;tom
&lt;br&gt;&lt;br&gt;On Nov 11, 2009, at 8:36 AM, Vladimir Kozlov wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; the_MIN_VALUE_string may be should be the_MIN_INT_VALUE_string
&lt;br&gt;&amp;gt;&amp;gt; I was trying to mimic Integer.MIN_VALUE. &amp;nbsp;If you want int in there then how about the_min_jint_string?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Agree with the_min_jint_string.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; c2_globals.hpp
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I thought we will use experimental for OptimizeStringConcat.
&lt;br&gt;&amp;gt;&amp;gt; I guess we could. &amp;nbsp;I don't really like experimental much but I'm not completely against it.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I would prefer experimental.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; doCall.cpp
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; I saw cases when append methods were not inlined because they were
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; already compiled into &amp;quot;big&amp;quot; compiled method. You call for_late_inline()
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; after ok_to_inline(), so may be we should relax that condition for
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; OptimizeStringConcat case.
&lt;br&gt;&amp;gt;&amp;gt; The code doesn't care whether the interesting methods are inlined or not. &amp;nbsp;If the methods would have been inlined then we register a late inline for them. &amp;nbsp;If they wouldn't have been inlined then we tell the DirectCallGenerator to use separate io projs so that we can properly find all the edges if we need to replace it. &amp;nbsp;THe late inlining logic is mainly about giving us the same result if we don't end up performing the optimization.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; You are right. The code delays inlining, not trying to inline.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Should you check that safepoint has &amp;gt; jvms-&amp;gt;argoff() inputs?:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Node* receiver = jvms-&amp;gt;map()-&amp;gt;in(jvms-&amp;gt;argoff() + 1);
&lt;br&gt;&amp;gt;&amp;gt; I guess I could but if there aren't enough then the call itself is malformed and we'll die later won't we? &amp;nbsp;Do you think i should?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Leave it as it is.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; macro.cpp
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Can you print array only when it is array?:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; log-&amp;gt;head(&amp;quot;eliminate_allocation %s type='%d'&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; alloc-&amp;gt;is_AllocateArray() ? &amp;quot;array&amp;quot; : &amp;quot;&amp;quot;, log-&amp;gt;identify(tklass-&amp;gt;klass()));
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; the same with &amp;quot;lock&amp;quot;:&amp;quot;unlock&amp;quot;
&lt;br&gt;&amp;gt;&amp;gt; I could but that's not very good xml. &amp;nbsp;I think I'll just leave that out since arrayness should be discerned from the klass. &amp;nbsp;I'd prefer to leave it as it for lock though.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Leave it as it is since it is better for XML.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Thanks,
&lt;br&gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; tom
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://cr.openjdk.java.net/~never/6892658/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cr.openjdk.java.net/~never/6892658/&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26304952.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26304661</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T08:55:18Z</published>
	<updated>2009-11-11T08:55:18Z</updated>
	<author>
		<name>Tom Rodriguez</name>
	</author>
	<content type="html">&lt;br&gt;On Nov 10, 2009, at 6:13 PM, Vladimir Kozlov wrote:
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://cr.openjdk.java.net/~never/6892658/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cr.openjdk.java.net/~never/6892658/&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; stringopts.cpp
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; It would be nice to have all fields description in StringConcat class.
&lt;br&gt;&lt;br&gt;Added.
&lt;br&gt;&lt;br&gt;&amp;gt; In the changes description you said that new String(SB.toString())
&lt;br&gt;&amp;gt; is processed also but the code is under #if 0 (merge_add()).
&lt;br&gt;&lt;br&gt;I decided there were some possible correctness issues with the logic proving that it wasn't used anywhere else so I pulled it out. &amp;nbsp;I'll restore it later. &amp;nbsp;
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Change PrintOptimizeStringConcat to &amp;quot;notproduct&amp;quot; flag since
&lt;br&gt;&amp;gt; it is used only under #ifndef PRODUCT.
&lt;br&gt;&lt;br&gt;Ok.
&lt;br&gt;&lt;br&gt;&amp;gt; In StringConcat::merge()
&lt;br&gt;&amp;gt; _stringopt could be used instead of other-&amp;gt;_stringopts
&lt;br&gt;&amp;gt; in &amp;nbsp;new StringConcat(other-&amp;gt;_stringopts, _end)
&lt;br&gt;&lt;br&gt;Sure.
&lt;br&gt;&lt;br&gt;&amp;gt; Also _begin instead of other-&amp;gt;_begin
&lt;br&gt;&amp;gt; in result-&amp;gt;set_allocation(other-&amp;gt;_begin)
&lt;br&gt;&lt;br&gt;_begin is must be the earliest JVMState of the pattern and other-&amp;gt;_begin has to be earlier than _begin otherwise the couldn't be merged so I can't just swap them around.
&lt;br&gt;&lt;br&gt;&amp;gt; It will allow to merge &amp;quot;other&amp;quot; several times see my comment bellow
&lt;br&gt;&amp;gt; about coalesce concats.
&lt;br&gt;&lt;br&gt;I'm certainly not going to incorporate any extensions in it at this point and I'm a little dubious on the utility of handling that pattern as well.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; In StringConcat::eliminate_initialize() would be nice
&lt;br&gt;&amp;gt; to have assert that initialize node doesn't have raw stores:
&lt;br&gt;&amp;gt; assert(init-&amp;gt;req() &amp;lt;= InitializeNode::RawStores,&amp;quot;&amp;quot;);
&lt;br&gt;&lt;br&gt;Ok.
&lt;br&gt;&lt;br&gt;&amp;gt; In build_candidate() you may use recv-&amp;gt;uncast() instead of:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 366 &amp;nbsp; &amp;nbsp; if (recv-&amp;gt;Opcode() == Op_CastPP) {
&lt;br&gt;&amp;gt; 367 &amp;nbsp; &amp;nbsp; &amp;nbsp; recv = recv-&amp;gt;in(1);
&lt;br&gt;&amp;gt; 368 &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&lt;br&gt;Ok.
&lt;br&gt;&lt;br&gt;&amp;gt; At the same code you skip Proj so you may fail AllocateNode::Ideal_allocation()
&lt;br&gt;&amp;gt; since it expects Proj or CheckCastPP nodes. Just check that recv-&amp;gt;is_Allocate().
&lt;br&gt;&lt;br&gt;Ok.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; There are several places where you do next check,
&lt;br&gt;&amp;gt; may be you can factor it in a separate function:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; method-&amp;gt;holder() == C-&amp;gt;env()-&amp;gt;StringBuilder_klass() ||
&lt;br&gt;&amp;gt; method-&amp;gt;holder() == C-&amp;gt;env()-&amp;gt;StringBuffer_klass()
&lt;br&gt;&lt;br&gt;I'm not sure factoring it out would be better.
&lt;br&gt;&lt;br&gt;&amp;gt; May be also verify has_stringbuilder() in PhaseStringOpts().
&lt;br&gt;&lt;br&gt;Why?
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I don't understand next break code.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 562 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; c = 0;
&lt;br&gt;&amp;gt; 563 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; You have 3 nested loops so the next break will return to the
&lt;br&gt;&amp;gt; second loop, not first, so &amp;quot;sc&amp;quot; will not be updated and
&lt;br&gt;&amp;gt; o==0 will be skipped. Why?
&lt;br&gt;&lt;br&gt;I'd intended to restart the search at beginning but you're right that it's not restarting the way I want. &amp;nbsp;I've switched to a goto to the head of the first loop since we don't have labeled breaks.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Also this coalesce code will not work if &amp;quot;other&amp;quot; is used by
&lt;br&gt;&amp;gt; several sc/arguments since you removed it from the list after
&lt;br&gt;&amp;gt; first match and merge. For example:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; String s0 = new SB().append(1)...toString();
&lt;br&gt;&amp;gt; String s1 = new SB().append(s0).append(s0).toString();
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I would keep it and always replace &amp;quot;c&amp;quot; with merged
&lt;br&gt;&amp;gt; (you need to modify StringConcat::merge() as I pointed above).
&lt;br&gt;&amp;gt; The &amp;quot;o&amp;quot; will be removed automatically if there are no other uses.
&lt;/div&gt;&lt;br&gt;I don't want to support that. &amp;nbsp;I don't think that's an interesting pattern. &amp;nbsp;It would also require rewriting the management of the control and trap lists and I don't want to get into that.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I will look on copy_string() and related methods tomorrow.
&lt;br&gt;&lt;br&gt;Thanks.
&lt;br&gt;&lt;br&gt;tom
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Vladimir
&lt;br&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26304661.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26304386</id>
	<title>Native method wrapper generation</title>
	<published>2009-11-11T08:38:39Z</published>
	<updated>2009-11-11T08:38:39Z</updated>
	<author>
		<name>Gary Benson</name>
	</author>
	<content type="html">Hi all,
&lt;br&gt;&lt;br&gt;This commit adds native wrapper generation to Shark. &amp;nbsp;It also removes
&lt;br&gt;support for LLVM &amp;lt; 2.6, because the new code requires it. &amp;nbsp;I'll write
&lt;br&gt;this up in more detail tomorrow with some benchmarks.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;Gary
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&lt;a href=&quot;http://gbenson.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gbenson.net/&lt;/a&gt;&lt;br&gt;&lt;br /&gt;diff -r b3d03017bdef ChangeLog
&lt;br&gt;--- a/ChangeLog	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ChangeLog	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -1,3 +1,186 @@
&lt;br&gt;+2009-11-11 &amp;nbsp;Gary Benson &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26304386&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gbenson@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp
&lt;br&gt;+	(CppInterpreter::native_entry): Add invocation counting for
&lt;br&gt;+	non-synchronized native methods.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/cpu/zero/vm/sharedRuntime_zero.cpp
&lt;br&gt;+	(SharedRuntime::generate_native_wrapper): Implemented.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/cpu/zero/vm/sharkFrame_zero.hpp
&lt;br&gt;+	(SharkFrame): Made friendly with SharkStack. &amp;nbsp;Snubbed
&lt;br&gt;+	SharkFunction.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkBuilder.hpp
&lt;br&gt;+	(SharkBuilder::SharkBuilder): Removed module argument.
&lt;br&gt;+	(SharkBuilder::_module): Removed.
&lt;br&gt;+	(SharkBuilder::module): Likewise.
&lt;br&gt;+	(SharkBuilder::check_special_condition_for_native_trans): New method.
&lt;br&gt;+	(SharkBuilder::CreateInlineOop): New method with jobject argument.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkBuilder.cpp
&lt;br&gt;+	(SharkBuilder::SharkBuilder): Removed module argument, and changed
&lt;br&gt;+	to use Shark context instead of global context.
&lt;br&gt;+	(SharkBuilder::make_type): Updated for new SharkType.
&lt;br&gt;+	(SharkBuilder::make_function): Use SharkContext for resolution.
&lt;br&gt;+	(SharkBuilder::check_special_condition_for_native_trans): New method.
&lt;br&gt;+	(SharkBuilder::CreateDump): Removed support for LLVM &amp;lt; 2.6.
&lt;br&gt;+	(SharkBuilder::CreateBlock): Likewise.
&lt;br&gt;+	(SharkBuilder::CreateInlineOop): Changed object argument type.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkCacheDecache.hpp
&lt;br&gt;+	(SharkDecacher::oopmap_slot_munge): Defer to SharkStack method.
&lt;br&gt;+	(SharkDecacher::slot2reg): Likewise.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkCacheDecache.cpp
&lt;br&gt;+	(SharkDecacher::start_frame): Use new SharkStack code.
&lt;br&gt;+	(SharkDecacher::start_stack): Likewise.
&lt;br&gt;+	(SharkDecacher::process_pc_slot): Likewise.
&lt;br&gt;+	(SharkOSREntryCacher::process_monitor): Likewise.
&lt;br&gt;+	(SharkDecacher::write_value_to_frame): Likewise.
&lt;br&gt;+	(SharkCacher::read_value_from_frame): Likewise.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkCodeBuffer.hpp
&lt;br&gt;+	(SharkCodeBuffer::SharkCodeBuffer): Wrap a MacroAssembler
&lt;br&gt;+	instead of creating one along with a CodeBuffer.
&lt;br&gt;+	(SharkCodeBuffer::_cb): Removed.
&lt;br&gt;+	(SharkCodeBuffer::_cb): Likewise.
&lt;br&gt;+	(SharkCodeBuffer::inline_oop): Changed object argument type.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkCompiler.hpp
&lt;br&gt;+	(SharkCompiler::supports_native): Return true instead of false.
&lt;br&gt;+	(SharkCompiler::generate_native_wrapper): New method.
&lt;br&gt;+	(SharkCompiler::_module): Removed.
&lt;br&gt;+	(SharkCompiler::module): Likewise.
&lt;br&gt;+	(SharkCompiler::_normal_context): New field.
&lt;br&gt;+	(SharkCompiler::_native_context): Likewise.
&lt;br&gt;+	(SharkCompiler::_execution_engine_lock): Likewise.
&lt;br&gt;+	(SharkCompiler::context): New method.
&lt;br&gt;+	(SharkCompiler::execution_engine_lock): Likewise.
&lt;br&gt;+	(SharkCompiler::memory_manager): Added assertion.
&lt;br&gt;+	(SharkCompiler::execution_engine): Likewise.
&lt;br&gt;+	(SharkCompiler::compiler): New method.
&lt;br&gt;+	(SharkCompiler::generate_native_code): Likewise.
&lt;br&gt;+	(SharkCompiler::free_queued_methods): Likewise.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkCompiler.cpp
&lt;br&gt;+	(SharkCompiler::SharkCompiler): Create the lock and the two
&lt;br&gt;+	contexts. &amp;nbsp;Removed support for LLVM &amp;lt; 2.6.
&lt;br&gt;+	(SharkCompiler::compile_method): Create the HotSpot code buffer
&lt;br&gt;+	and macro assembler, and defer native code generation to new
&lt;br&gt;+	method SharkCompiler::generate_native_code().
&lt;br&gt;+	(SharkCompiler::generate_native_wrapper): New method.
&lt;br&gt;+	(SharkCompiler::generate_native_code): Likewise.
&lt;br&gt;+	(SharkCompiler::free_compiled_method): New implementation.
&lt;br&gt;+	(SharkCompiler::free_queued_methods): New method.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkEntry.hpp
&lt;br&gt;+	(SharkEntry::_context): New field.
&lt;br&gt;+	(SharkEntry::context): New method.
&lt;br&gt;+	(SharkEntry::set_context): Likewise.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkFunction.hpp
&lt;br&gt;+	(SharkFunction::build): Removed compiler argument.
&lt;br&gt;+	(SharkFunction::SharkFunction): Likewise.
&lt;br&gt;+	(SharkFunction::_stack): New field.
&lt;br&gt;+	(SharkFunction::stack): New method.
&lt;br&gt;+	(SharkFunction::CreateBlock): Removed support for LLVM &amp;lt; 2.6.
&lt;br&gt;+	(SharkFunction::_zero_stack_base): Removed.
&lt;br&gt;+	(SharkFunction::_zero_stack_pointer_addr): Likewise.
&lt;br&gt;+	(SharkFunction::_zero_frame_pointer_addr): Likewise.
&lt;br&gt;+	(SharkFunction::zero_stack_base): Likewise.
&lt;br&gt;+	(SharkFunction::zero_stack_pointer_addr): Likewise.
&lt;br&gt;+	(SharkFunction::zero_frame_pointer_addr): Likewise.
&lt;br&gt;+	(SharkFunction::CreateInitZeroStack): Likewise.
&lt;br&gt;+	(SharkFunction::CreateLoadZeroStackPointer): Likewise.
&lt;br&gt;+	(SharkFunction::CreateStoreZeroStackPointer): Likewise.
&lt;br&gt;+	(SharkFunction::CreateLoadZeroFramePointer): Likewise.
&lt;br&gt;+	(SharkFunction::CreateStoreZeroFramePointer): Likewise.
&lt;br&gt;+	(SharkFunction::CreateStackOverflowCheck): Likewise.
&lt;br&gt;+	(SharkFunction::CreatePushFrame): Likewise.
&lt;br&gt;+	(SharkFunction::CreatePopFrame): Likewise.
&lt;br&gt;+	(SharkFunction::_frame): Likewise.
&lt;br&gt;+	(SharkFunction::CreateAddressOfFrameEntry): Likewise.
&lt;br&gt;+	(SharkFunction::CreateBuildFrame): Likewise.
&lt;br&gt;+	(SharkFunction::_extended_frame_size): Likewise.
&lt;br&gt;+	(SharkFunction::_stack_slots_offset): Likewise.
&lt;br&gt;+	(SharkFunction::_monitors_slots_offset): Likewise.
&lt;br&gt;+	(SharkFunction::_oop_tmp_slot_offset): Likewise.
&lt;br&gt;+	(SharkFunction::_method_slot_offset): Likewise.
&lt;br&gt;+	(SharkFunction::_pc_slot_offset): Likewise.
&lt;br&gt;+	(SharkFunction::_locals_slots_offset): Likewise.
&lt;br&gt;+	(SharkFunction::extended_frame_size): Likewise.
&lt;br&gt;+	(SharkFunction::oopmap_frame_size): Likewise.
&lt;br&gt;+	(SharkFunction::stack_slots_offset): Likewise.
&lt;br&gt;+	(SharkFunction::monitors_slots_offset): Likewise.
&lt;br&gt;+	(SharkFunction::oop_tmp_slot_offset): Likewise.
&lt;br&gt;+	(SharkFunction::method_slot_offset): Likewise.
&lt;br&gt;+	(SharkFunction::pc_slot_offset): Likewise.
&lt;br&gt;+	(SharkFunction::locals_slots_offset): Likewise.
&lt;br&gt;+	(SharkFunction::monitor_offset): Likewise.
&lt;br&gt;+	(SharkFunction::monitor_object_offset): Likewise.
&lt;br&gt;+	(SharkFunction::monitor_header_offset): Likewise.
&lt;br&gt;+	(SharkFunction::monitor_addr): Likewise.
&lt;br&gt;+	(SharkFunction::monitor_object_addr): Likewise.
&lt;br&gt;+	(SharkFunction::monitor_header_addr): Likewise.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkFunction.cpp
&lt;br&gt;+	(SharkFunction::initialize): Defer stack frame creation to new
&lt;br&gt;+	SharkStack code.
&lt;br&gt;+	(SharkFunction::CreateInitZeroStack): Removed.
&lt;br&gt;+	(SharkFunction::CreateStackOverflowCheck): Likewise.
&lt;br&gt;+	(SharkFunction::CreatePushFrame): Likewise.
&lt;br&gt;+	(SharkFunction::CreatePopFrame): Likewise.
&lt;br&gt;+	(SharkFunction::CreateBuildFrame): Likewise.
&lt;br&gt;+	(SharkFunction::CreateAddressOfFrameEntry): Likewise.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkInvariants.hpp
&lt;br&gt;+	(SharkCompileInvariants::SharkCompileInvariants): Removed
&lt;br&gt;+	compiler argument. 
&lt;br&gt;+	(SharkTargetInvariants::SharkTargetInvariants): Likewise.
&lt;br&gt;+	(SharkCompileInvariants::_compiler): Removed.
&lt;br&gt;+	(SharkCompileInvariants::env): Added assertion.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkStateScanner.hpp
&lt;br&gt;+	(SharkStateScanner::SharkStateScanner): Updated.
&lt;br&gt;+	(SharkStateScanner::_function): Removed.
&lt;br&gt;+	(SharkStateScanner::function): Likewise.
&lt;br&gt;+	(SharkStateScanner::_stack): New field.
&lt;br&gt;+	(SharkStateScanner::stack): New method.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkStateScanner.cpp
&lt;br&gt;+	(SharkStateScanner::scan): Use new SharkStack code.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp
&lt;br&gt;+	(SharkTopLevelBlock::stack): New method.
&lt;br&gt;+	(SharkTopLevelBlock::set_last_Java_frame): Removed.
&lt;br&gt;+	(SharkTopLevelBlock::reset_last_Java_frame): Likewise.
&lt;br&gt;+	(SharkTopLevelBlock::call_vm): Use new SharkStack code.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp
&lt;br&gt;+	(SharkTopLevelBlock::handle_return): Likewise.
&lt;br&gt;+	(SharkTopLevelBlock::do_multianewarray): Likewise.
&lt;br&gt;+	(SharkTopLevelBlock::acquire_lock): Likewise.
&lt;br&gt;+	(SharkTopLevelBlock::release_lock): Likewise.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkType.hpp:
&lt;br&gt;+	Defer everything to new SharkContext code.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkType.cpp: Removed.
&lt;br&gt;+	
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/llvmHeaders.hpp:
&lt;br&gt;+	Removed support for LLVM &amp;lt; 2.6.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/llvmValue.hpp
&lt;br&gt;+	(LLVMValue::jfloat_constant): Likewise.
&lt;br&gt;+	(LLVMValue::jdouble_constant): Likewise.
&lt;br&gt;+	(LLVMValue::bit_constant): Likewise.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkBlock.cpp
&lt;br&gt;+	(SharkBlock::parse_bytecode): Likewise.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkMemoryManager.hpp: Likewise.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkMemoryManager.cpp: Likewise.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkContext.hpp: New file.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkContext.cpp: Likewise.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkNativeWrapper.hpp: Likewise.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkNativeWrapper.cpp: Likewise.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkStack.hpp: Likewise.
&lt;br&gt;+	* ports/hotspot/src/share/vm/shark/sharkStack.cpp: Likewise.
&lt;br&gt;+
&lt;br&gt;+	* ports/hotspot/src/share/vm/includeDB_shark: Updated.
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;2009-11-11 &amp;nbsp;Gary Benson &amp;nbsp;&amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26304386&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gbenson@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;	PR icedtea/324:
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp
&lt;br&gt;--- a/ports/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -204,6 +204,20 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;goto unwind_and_return;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;// Update the invocation counter
&lt;br&gt;+ &amp;nbsp;if ((UseCompiler || CountCompiledCalls) &amp;&amp; !method-&amp;gt;is_synchronized()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;thread-&amp;gt;set_do_not_unlock();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;InvocationCounter *counter = method-&amp;gt;invocation_counter();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;counter-&amp;gt;increment();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (counter-&amp;gt;reached_InvocationLimit()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CALL_VM_NOCHECK(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;InterpreterRuntime::frequency_counter_overflow(thread, NULL));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (HAS_PENDING_EXCEPTION)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;goto unwind_and_return;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;thread-&amp;gt;clr_do_not_unlock();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Lock if necessary
&lt;br&gt;&amp;nbsp; &amp;nbsp;BasicObjectLock *monitor;
&lt;br&gt;&amp;nbsp; &amp;nbsp;monitor = NULL;
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/cpu/zero/vm/sharedRuntime_zero.cpp
&lt;br&gt;--- a/ports/hotspot/src/cpu/zero/vm/sharedRuntime_zero.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/cpu/zero/vm/sharedRuntime_zero.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -61,7 +61,14 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BasicType *in_sig_bt,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VMRegPair *in_regs,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BasicType ret_type) {
&lt;br&gt;+#ifdef SHARK
&lt;br&gt;+ &amp;nbsp;return SharkCompiler::compiler()-&amp;gt;generate_native_wrapper(masm,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;in_sig_bt,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ret_type);
&lt;br&gt;+#else
&lt;br&gt;&amp;nbsp; &amp;nbsp;ShouldNotCallThis();
&lt;br&gt;+#endif // SHARK
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;int Deoptimization::last_frame_adjust(int callee_parameters,
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/cpu/zero/vm/sharkFrame_zero.hpp
&lt;br&gt;--- a/ports/hotspot/src/cpu/zero/vm/sharkFrame_zero.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/cpu/zero/vm/sharkFrame_zero.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -1,6 +1,6 @@
&lt;br&gt;&amp;nbsp;/*
&lt;br&gt;&amp;nbsp; * Copyright 2003-2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;- * Copyright 2008 Red Hat, Inc.
&lt;br&gt;+ * Copyright 2008, 2009 Red Hat, Inc.
&lt;br&gt;&amp;nbsp; * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;@@ -41,7 +41,7 @@
&lt;br&gt;&amp;nbsp;// | &amp;nbsp;... &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class SharkFrame : public ZeroFrame {
&lt;br&gt;- &amp;nbsp;friend class SharkFunction;
&lt;br&gt;+ &amp;nbsp;friend class SharkStack;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;&amp;nbsp; &amp;nbsp;SharkFrame() : ZeroFrame() {
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/includeDB_shark
&lt;br&gt;--- a/ports/hotspot/src/share/vm/includeDB_shark	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/includeDB_shark	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -48,6 +48,8 @@
&lt;br&gt;&amp;nbsp;ciTypeFlow.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciKlass.hpp
&lt;br&gt;&amp;nbsp;ciTypeFlow.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciMethodBlocks.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+cppInterpreter_&amp;lt;arch&amp;gt;.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shark_globals.hpp
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;compileBroker.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkCompiler.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;globals.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shark_globals_&amp;lt;arch&amp;gt;.hpp
&lt;br&gt;@@ -55,10 +57,14 @@
&lt;br&gt;&amp;nbsp;globals.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shark_globals.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;llvmValue.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; llvmHeaders.hpp
&lt;br&gt;+llvmValue.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkContext.hpp
&lt;br&gt;&amp;nbsp;llvmValue.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkType.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;nmethod.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkCompiler.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sharedRuntime_&amp;lt;arch&amp;gt;.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;compileBroker.hpp
&lt;br&gt;+sharedRuntime_&amp;lt;arch&amp;gt;.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkCompiler.hpp
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;shark_globals.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shark_globals.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;shark_globals.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; shark_globals_&amp;lt;arch&amp;gt;.hpp
&lt;br&gt;@@ -95,7 +101,7 @@
&lt;br&gt;&amp;nbsp;sharkBuilder.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;resourceArea.hpp
&lt;br&gt;&amp;nbsp;sharkBuilder.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;&amp;nbsp;sharkBuilder.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkBuilder.hpp
&lt;br&gt;-sharkBuilder.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkCompiler.hpp
&lt;br&gt;+sharkBuilder.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkContext.hpp
&lt;br&gt;&amp;nbsp;sharkBuilder.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkRuntime.hpp
&lt;br&gt;&amp;nbsp;sharkBuilder.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;synchronizer.hpp
&lt;br&gt;&amp;nbsp;sharkBuilder.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread.hpp
&lt;br&gt;@@ -108,7 +114,6 @@
&lt;br&gt;&amp;nbsp;sharkBuilder.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmValue.hpp
&lt;br&gt;&amp;nbsp;sharkBuilder.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sizes.hpp
&lt;br&gt;&amp;nbsp;sharkBuilder.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkCodeBuffer.hpp
&lt;br&gt;-sharkBuilder.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkCompiler.hpp
&lt;br&gt;&amp;nbsp;sharkBuilder.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkType.hpp
&lt;br&gt;&amp;nbsp;sharkBuilder.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkValue.hpp
&lt;br&gt;&amp;nbsp;sharkBuilder.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkEntry.hpp
&lt;br&gt;@@ -145,16 +150,29 @@
&lt;br&gt;&amp;nbsp;sharkCompiler.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkBuilder.hpp
&lt;br&gt;&amp;nbsp;sharkCompiler.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkCodeBuffer.hpp
&lt;br&gt;&amp;nbsp;sharkCompiler.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkCompiler.hpp
&lt;br&gt;+sharkCompiler.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkContext.hpp
&lt;br&gt;&amp;nbsp;sharkCompiler.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkEntry.hpp
&lt;br&gt;&amp;nbsp;sharkCompiler.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkFunction.hpp
&lt;br&gt;&amp;nbsp;sharkCompiler.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkMemoryManager.hpp
&lt;br&gt;+sharkCompiler.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkNativeWrapper.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sharkCompiler.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; abstractCompiler.hpp
&lt;br&gt;&amp;nbsp;sharkCompiler.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ciEnv.hpp
&lt;br&gt;&amp;nbsp;sharkCompiler.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ciMethod.hpp
&lt;br&gt;+sharkCompiler.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; compileBroker.hpp
&lt;br&gt;&amp;nbsp;sharkCompiler.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; llvmHeaders.hpp
&lt;br&gt;&amp;nbsp;sharkCompiler.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkMemoryManager.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sharkContext.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arrayOop.hpp
&lt;br&gt;+sharkContext.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;globalDefinitions.hpp
&lt;br&gt;+sharkContext.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;+sharkContext.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;oop.hpp
&lt;br&gt;+sharkContext.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkContext.hpp
&lt;br&gt;+
&lt;br&gt;+sharkContext.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;+sharkContext.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkCompiler.hpp
&lt;br&gt;+
&lt;br&gt;+sharkConstant.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ciInstance.hpp
&lt;br&gt;&amp;nbsp;sharkConstant.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ciStreams.hpp
&lt;br&gt;&amp;nbsp;sharkConstant.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkBuilder.hpp
&lt;br&gt;&amp;nbsp;sharkConstant.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkConstant.hpp
&lt;br&gt;@@ -186,7 +204,9 @@
&lt;br&gt;&amp;nbsp;sharkFunction.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; llvmHeaders.hpp
&lt;br&gt;&amp;nbsp;sharkFunction.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; llvmValue.hpp
&lt;br&gt;&amp;nbsp;sharkFunction.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkBuilder.hpp
&lt;br&gt;+sharkFunction.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkContext.hpp
&lt;br&gt;&amp;nbsp;sharkFunction.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkInvariants.hpp
&lt;br&gt;+sharkFunction.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkStack.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sharkInliner.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allocation.hpp
&lt;br&gt;&amp;nbsp;sharkInliner.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bytecodes.hpp
&lt;br&gt;@@ -229,8 +249,6 @@
&lt;br&gt;&amp;nbsp;sharkInvariants.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dependencies.hpp
&lt;br&gt;&amp;nbsp;sharkInvariants.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; llvmHeaders.hpp
&lt;br&gt;&amp;nbsp;sharkInvariants.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkBuilder.hpp
&lt;br&gt;-sharkInvariants.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkCompiler.hpp
&lt;br&gt;-sharkInvariants.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkMemoryManager.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sharkMemoryManager.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;&amp;nbsp;sharkMemoryManager.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkEntry.hpp
&lt;br&gt;@@ -239,6 +257,17 @@
&lt;br&gt;&amp;nbsp;sharkMemoryManager.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkEntry.hpp
&lt;br&gt;&amp;nbsp;sharkMemoryManager.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkMemoryManager.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sharkNativeWrapper.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;+sharkNativeWrapper.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkNativeWrapper.hpp
&lt;br&gt;+sharkNativeWrapper.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkType.hpp
&lt;br&gt;+
&lt;br&gt;+sharkNativeWrapper.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;handles.hpp
&lt;br&gt;+sharkNativeWrapper.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;+sharkNativeWrapper.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkBuilder.hpp
&lt;br&gt;+sharkNativeWrapper.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkContext.hpp
&lt;br&gt;+sharkNativeWrapper.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkInvariants.hpp
&lt;br&gt;+sharkNativeWrapper.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkStack.hpp
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sharkRuntime.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;biasedLocking.hpp
&lt;br&gt;&amp;nbsp;sharkRuntime.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;deoptimization.hpp
&lt;br&gt;&amp;nbsp;sharkRuntime.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;@@ -248,9 +277,20 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sharkRuntime.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allocation.hpp
&lt;br&gt;&amp;nbsp;sharkRuntime.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;+sharkRuntime.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmValue.hpp
&lt;br&gt;&amp;nbsp;sharkRuntime.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;klassOop.hpp
&lt;br&gt;&amp;nbsp;sharkRuntime.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+sharkStack.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;+sharkStack.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkFunction.hpp
&lt;br&gt;+sharkStack.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkNativeWrapper.hpp
&lt;br&gt;+sharkStack.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkStack.hpp
&lt;br&gt;+sharkStack.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkType.hpp
&lt;br&gt;+
&lt;br&gt;+sharkStack.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;+sharkStack.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkInvariants.hpp
&lt;br&gt;+sharkStack.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkType.hpp
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;sharkState.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allocation.hpp
&lt;br&gt;&amp;nbsp;sharkState.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciType.hpp
&lt;br&gt;&amp;nbsp;sharkState.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciTypeFlow.hpp
&lt;br&gt;@@ -279,6 +319,8 @@
&lt;br&gt;&amp;nbsp;sharkTopLevelBlock.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;allocation.hpp
&lt;br&gt;&amp;nbsp;sharkTopLevelBlock.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bytecodes.hpp
&lt;br&gt;&amp;nbsp;sharkTopLevelBlock.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciField.hpp
&lt;br&gt;+sharkTopLevelBlock.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciInstance.hpp
&lt;br&gt;+sharkTopLevelBlock.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciObjArrayKlass.hpp
&lt;br&gt;&amp;nbsp;sharkTopLevelBlock.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciStreams.hpp
&lt;br&gt;&amp;nbsp;sharkTopLevelBlock.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciType.hpp
&lt;br&gt;&amp;nbsp;sharkTopLevelBlock.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciTypeFlow.hpp
&lt;br&gt;@@ -307,17 +349,11 @@
&lt;br&gt;&amp;nbsp;sharkTopLevelBlock.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkState.hpp
&lt;br&gt;&amp;nbsp;sharkTopLevelBlock.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sharkValue.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-sharkType.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; arrayOop.hpp
&lt;br&gt;-sharkType.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; globalDefinitions.hpp
&lt;br&gt;-sharkType.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; llvmHeaders.hpp
&lt;br&gt;-sharkType.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; oop.hpp
&lt;br&gt;-sharkType.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkEntry.hpp
&lt;br&gt;-sharkType.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkType.hpp
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;sharkType.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; allocation.hpp
&lt;br&gt;&amp;nbsp;sharkType.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ciType.hpp
&lt;br&gt;&amp;nbsp;sharkType.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; globalDefinitions.hpp
&lt;br&gt;&amp;nbsp;sharkType.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; llvmHeaders.hpp
&lt;br&gt;+sharkType.hpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sharkContext.hpp
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;sharkValue.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciType.hpp
&lt;br&gt;&amp;nbsp;sharkValue.cpp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvmHeaders.hpp
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/llvmHeaders.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/llvmHeaders.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/llvmHeaders.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -32,16 +32,12 @@
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/DerivedTypes.h&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/ExecutionEngine/ExecutionEngine.h&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/Instructions.h&amp;gt;
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/LLVMContext.h&amp;gt;
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/Module.h&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/ModuleProvider.h&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/Support/IRBuilder.h&amp;gt;
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/System/Threading.h&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/Target/TargetSelect.h&amp;gt;
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/Type.h&amp;gt;
&lt;br&gt;&amp;nbsp;#include &amp;lt;llvm/ExecutionEngine/JITMemoryManager.h&amp;gt;
&lt;br&gt;&amp;nbsp;#if SHARK_LLVM_VERSION &amp;lt; 27
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/llvmValue.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/llvmValue.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/llvmValue.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -39,19 +39,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static llvm::ConstantFP* jfloat_constant(jfloat value)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::ConstantFP::get(llvm::getGlobalContext(), llvm::APFloat(value));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::ConstantFP::get(SharkType::jfloat_type(), value);
&lt;br&gt;-#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return llvm::ConstantFP::get(SharkContext::current(), llvm::APFloat(value));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static llvm::ConstantFP* jdouble_constant(jdouble value)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::ConstantFP::get(llvm::getGlobalContext(), llvm::APFloat(value));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::ConstantFP::get(SharkType::jdouble_type(), value);
&lt;br&gt;-#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return llvm::ConstantFP::get(SharkContext::current(), llvm::APFloat(value));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static llvm::ConstantPointerNull* null()
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;@@ -61,11 +53,7 @@
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;static llvm::ConstantInt* bit_constant(int value)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::ConstantInt::get(llvm::Type::getInt1Ty(llvm::getGlobalContext()), value, false);
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::ConstantInt::get(llvm::Type::Int1Ty, value, false);
&lt;br&gt;-#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return llvm::ConstantInt::get(SharkType::bit_type(), value, false);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static llvm::ConstantInt* intptr_constant(intptr_t value)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkBlock.cpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkBlock.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkBlock.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -532,31 +532,19 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push(SharkValue::create_jfloat(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateFAdd(a-&amp;gt;jfloat_value(), b-&amp;gt;jfloat_value())));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateAdd(a-&amp;gt;jfloat_value(), b-&amp;gt;jfloat_value())));
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case Bytecodes::_fsub:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push(SharkValue::create_jfloat(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateFSub(a-&amp;gt;jfloat_value(), b-&amp;gt;jfloat_value())));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateSub(a-&amp;gt;jfloat_value(), b-&amp;gt;jfloat_value())));
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case Bytecodes::_fmul:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push(SharkValue::create_jfloat(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateFMul(a-&amp;gt;jfloat_value(), b-&amp;gt;jfloat_value())));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateMul(a-&amp;gt;jfloat_value(), b-&amp;gt;jfloat_value())));
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case Bytecodes::_fdiv:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b = pop();
&lt;br&gt;@@ -573,42 +561,26 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case Bytecodes::_fneg:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a = pop(); &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push(SharkValue::create_jfloat(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateFNeg(a-&amp;gt;jfloat_value())));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateNeg(a-&amp;gt;jfloat_value())));
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case Bytecodes::_dadd:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push(SharkValue::create_jdouble(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateFAdd(a-&amp;gt;jdouble_value(), b-&amp;gt;jdouble_value())));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateAdd(a-&amp;gt;jdouble_value(), b-&amp;gt;jdouble_value())));
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case Bytecodes::_dsub:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push(SharkValue::create_jdouble(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateFSub(a-&amp;gt;jdouble_value(), b-&amp;gt;jdouble_value())));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateSub(a-&amp;gt;jdouble_value(), b-&amp;gt;jdouble_value())));
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case Bytecodes::_dmul:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a = pop();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push(SharkValue::create_jdouble(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateFMul(a-&amp;gt;jdouble_value(), b-&amp;gt;jdouble_value())));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateMul(a-&amp;gt;jdouble_value(), b-&amp;gt;jdouble_value())));
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case Bytecodes::_ddiv:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;b = pop();
&lt;br&gt;@@ -625,11 +597,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case Bytecodes::_dneg:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;a = pop(); &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;push(SharkValue::create_jdouble(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateFNeg(a-&amp;gt;jdouble_value())));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateNeg(a-&amp;gt;jdouble_value())));
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case Bytecodes::_iinc:
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkBuilder.cpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkBuilder.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkBuilder.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -28,16 +28,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;using namespace llvm;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-SharkBuilder::SharkBuilder(Module* module, SharkCodeBuffer* code_buffer)
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp;// LLVM 2.6 requires a LLVMContext during IRBuilder construction.
&lt;br&gt;- &amp;nbsp;// getGlobalConext() returns one that can be used as long as the shark
&lt;br&gt;- &amp;nbsp;// compiler are single-threaded.
&lt;br&gt;- &amp;nbsp;: IRBuilder&amp;lt;&amp;gt;(getGlobalContext()),
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp;: IRBuilder&amp;lt;&amp;gt;(),
&lt;br&gt;-#endif // SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;_module(module),
&lt;br&gt;+SharkBuilder::SharkBuilder(SharkCodeBuffer* code_buffer)
&lt;br&gt;+ &amp;nbsp;: IRBuilder&amp;lt;&amp;gt;(SharkContext::current()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;_code_buffer(code_buffer)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -155,17 +147,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// Miscellaneous
&lt;br&gt;&amp;nbsp; &amp;nbsp;case 'v':
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;assert(void_ok, &amp;quot;should be&amp;quot;);
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return Type::getVoidTy(getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return Type::VoidTy;
&lt;br&gt;-#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return SharkType::void_type();
&lt;br&gt;&amp;nbsp; &amp;nbsp;case '1':
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return Type::getInt1Ty(getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return Type::Int1Ty;
&lt;br&gt;-#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return SharkType::bit_type();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;default:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ShouldNotReachHere();
&lt;br&gt;@@ -196,7 +180,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char* params,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char* ret)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;return module()-&amp;gt;getOrInsertFunction(name, make_ftype(params, ret));
&lt;br&gt;+ &amp;nbsp;return SharkContext::current().get_external(name, make_ftype(params, ret));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;// Create an object representing an external function by inlining a
&lt;br&gt;@@ -372,6 +356,15 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;return make_function((address) SharkRuntime::uncommon_trap, &amp;quot;Ti&amp;quot;, &amp;quot;v&amp;quot;);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+// Native-Java transition.
&lt;br&gt;+
&lt;br&gt;+Value* SharkBuilder::check_special_condition_for_native_trans()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return make_function(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;(address) JavaThread::check_special_condition_for_native_trans,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;T&amp;quot;, &amp;quot;v&amp;quot;);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;// Low-level non-VM calls
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;// The ARM-specific code here is to work around unimplemented
&lt;br&gt;@@ -520,11 +513,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;const char *name;
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (value-&amp;gt;hasName())
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;// XXX this leaks, but it's only debug code
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;name = strdup(value-&amp;gt;getName().str().c_str());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;name = strdup(value-&amp;gt;getName().c_str());
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp;else
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;name = &amp;quot;unnamed_value&amp;quot;;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -572,7 +561,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant(offset));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-Value* SharkBuilder::CreateInlineOop(ciObject* object, const char* name)
&lt;br&gt;+Value* SharkBuilder::CreateInlineOop(jobject object, const char* name)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;return CreateLoad(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;CreateIntToPtr(
&lt;br&gt;@@ -607,9 +596,6 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;BasicBlock* SharkBuilder::CreateBlock(BasicBlock* ip, const char* name) const
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp;return BasicBlock::Create(getGlobalContext(), name, GetInsertBlock()-&amp;gt;getParent(), ip);
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp;return BasicBlock::Create(name, GetInsertBlock()-&amp;gt;getParent(), ip);
&lt;br&gt;-#endif
&lt;br&gt;+ &amp;nbsp;return BasicBlock::Create(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SharkContext::current(), name, GetInsertBlock()-&amp;gt;getParent(), ip);
&lt;br&gt;&amp;nbsp;} &amp;nbsp;
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkBuilder.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkBuilder.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkBuilder.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -27,18 +27,12 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;friend class SharkCompileInvariants;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;- &amp;nbsp;SharkBuilder(llvm::Module* module, SharkCodeBuffer* code_buffer);
&lt;br&gt;+ &amp;nbsp;SharkBuilder(SharkCodeBuffer* code_buffer);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// The LLVM module and Shark code buffer we are building into.
&lt;br&gt;+ &amp;nbsp;// The code buffer we are building into.
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;- &amp;nbsp;llvm::Module* &amp;nbsp; &amp;nbsp;_module;
&lt;br&gt;&amp;nbsp; &amp;nbsp;SharkCodeBuffer* _code_buffer;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;llvm::Module* module() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _module;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;&amp;nbsp; protected:
&lt;br&gt;&amp;nbsp; &amp;nbsp;SharkCodeBuffer* code_buffer() const
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;@@ -138,7 +132,14 @@
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::Value* uncommon_trap();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Intrinsics and external functions, part 4: Low-level non-VM calls.
&lt;br&gt;+ &amp;nbsp;// Intrinsics and external functions, part 4: Native-Java transition.
&lt;br&gt;+ &amp;nbsp;// &amp;nbsp; This is a special case in that it is invoked during a thread
&lt;br&gt;+ &amp;nbsp;// &amp;nbsp; state transition. &amp;nbsp;The stack must be set up for walking, and it
&lt;br&gt;+ &amp;nbsp;// &amp;nbsp; may throw exceptions, but the state is _thread_in_native_trans.
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;llvm::Value* check_special_condition_for_native_trans();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Intrinsics and external functions, part 5: Low-level non-VM calls.
&lt;br&gt;&amp;nbsp; &amp;nbsp;// &amp;nbsp; These have the same caveats as the high-level non-VM calls
&lt;br&gt;&amp;nbsp; &amp;nbsp;// &amp;nbsp; above. &amp;nbsp;They are not accessed directly; rather, you should
&lt;br&gt;&amp;nbsp; &amp;nbsp;// &amp;nbsp; access them via the various Create* methods below.
&lt;br&gt;@@ -184,7 +185,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Helpers for accessing the code buffer.
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::Value* code_buffer_address(int offset);
&lt;br&gt;- &amp;nbsp;llvm::Value* CreateInlineOop(ciObject* object, const char* name = &amp;quot;&amp;quot;);
&lt;br&gt;+ &amp;nbsp;llvm::Value* CreateInlineOop(jobject object, const char* name = &amp;quot;&amp;quot;);
&lt;br&gt;+ &amp;nbsp;llvm::Value* CreateInlineOop(ciObject* object, const char* name = &amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return CreateInlineOop(object-&amp;gt;encoding(), name);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Helpers for creating basic blocks.
&lt;br&gt;&amp;nbsp; &amp;nbsp;// NB don't use unless SharkFunction::CreateBlock is unavailable.
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkCacheDecache.cpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkCacheDecache.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkCacheDecache.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -33,7 +33,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Start recording the debug information
&lt;br&gt;&amp;nbsp; &amp;nbsp;_pc_offset = code_buffer()-&amp;gt;create_unique_offset();
&lt;br&gt;&amp;nbsp; &amp;nbsp;_oopmap = new OopMap(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;oopmap_slot_munge(function()-&amp;gt;oopmap_frame_size()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;oopmap_slot_munge(stack()-&amp;gt;oopmap_frame_size()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;oopmap_slot_munge(arg_size()));
&lt;br&gt;&amp;nbsp; &amp;nbsp;debug_info()-&amp;gt;add_safepoint(pc_offset(), oopmap());
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -44,10 +44,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;_exparray = new GrowableArray&amp;lt;ScopeValue*&amp;gt;(stack_depth);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Set the stack pointer
&lt;br&gt;- &amp;nbsp;function()-&amp;gt;CreateStoreZeroStackPointer(
&lt;br&gt;+ &amp;nbsp;stack()-&amp;gt;CreateStoreStackPointer(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreatePtrToInt(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;function()-&amp;gt;CreateAddressOfFrameEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;function()-&amp;gt;stack_slots_offset() + max_stack() - stack_depth),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;stack()-&amp;gt;slot_addr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;stack()-&amp;gt;stack_slots_offset() + max_stack() - stack_depth),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::intptr_type()));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -120,7 +120,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Record the PC
&lt;br&gt;&amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;code_buffer_address(pc_offset()),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;function()-&amp;gt;CreateAddressOfFrameEntry(offset));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stack()-&amp;gt;slot_addr(offset));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp;void SharkDecacher::start_locals()
&lt;br&gt;@@ -194,13 +194,11 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateLoad(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CreateAddressOfOSRBufEntry(src_offset, SharkType::intptr_type())),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;function()-&amp;gt;CreateAddressOfFrameEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;box_offset, SharkType::intptr_type()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stack()-&amp;gt;slot_addr(box_offset, SharkType::intptr_type()));
&lt;br&gt;&amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateLoad(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;CreateAddressOfOSRBufEntry(src_offset + 1, SharkType::oop_type())),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;function()-&amp;gt;CreateAddressOfFrameEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;obj_offset, SharkType::oop_type()));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stack()-&amp;gt;slot_addr(obj_offset, SharkType::oop_type()));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void SharkCacher::process_oop_tmp_slot(Value** value, int offset)
&lt;br&gt;@@ -270,12 +268,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Value* &amp;nbsp; &amp;nbsp; &amp;nbsp;value,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; offset)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;value, function()-&amp;gt;CreateAddressOfFrameEntry(offset, type));
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateStore(value, stack()-&amp;gt;slot_addr(offset, type));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;Value* SharkCacher::read_value_from_frame(const Type* type, int offset)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;return builder()-&amp;gt;CreateLoad(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;function()-&amp;gt;CreateAddressOfFrameEntry(offset, type));
&lt;br&gt;+ &amp;nbsp;return builder()-&amp;gt;CreateLoad(stack()-&amp;gt;slot_addr(offset, type));
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkCacheDecache.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkCacheDecache.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkCacheDecache.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -116,13 +116,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// oopmap and debuginfo helpers
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;- &amp;nbsp;static int oopmap_slot_munge(int x)
&lt;br&gt;+ &amp;nbsp;static int oopmap_slot_munge(int offset)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return x &amp;lt;&amp;lt; (LogBytesPerWord - LogBytesPerInt);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return SharkStack::oopmap_slot_munge(offset);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static VMReg slot2reg(int offset)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return VMRegImpl::stack2reg(oopmap_slot_munge(offset));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return SharkStack::slot2reg(offset);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static Location slot2loc(int offset, Location::Type type)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkCodeBuffer.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkCodeBuffer.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkCodeBuffer.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -25,25 +25,13 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class SharkCodeBuffer : public StackObj {
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;- &amp;nbsp;SharkCodeBuffer(OopRecorder* oop_recorder)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;: _cb(&amp;quot;Shark&amp;quot;, 256 * K, 64 * K),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_masm(new MacroAssembler(&amp;_cb)),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_base_pc(NULL)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;cb()-&amp;gt;initialize_oop_recorder(oop_recorder);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;SharkCodeBuffer(MacroAssembler* masm)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: _masm(masm), _base_pc(NULL) {}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;- &amp;nbsp;CodeBuffer &amp;nbsp; &amp;nbsp; &amp;nbsp;_cb;
&lt;br&gt;&amp;nbsp; &amp;nbsp;MacroAssembler* _masm;
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::Value* &amp;nbsp; &amp;nbsp;_base_pc;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- public:
&lt;br&gt;- &amp;nbsp;CodeBuffer* cb()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return &amp;_cb;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;&amp;nbsp; &amp;nbsp;MacroAssembler* masm() const
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;@@ -84,11 +72,11 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Inline an oop into the buffer and return its offset.
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;- &amp;nbsp;int inline_oop(ciObject* object) const
&lt;br&gt;+ &amp;nbsp;int inline_oop(jobject object) const
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;masm()-&amp;gt;align(BytesPerWord);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;int offset = masm()-&amp;gt;offset();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;masm()-&amp;gt;store_oop(object-&amp;gt;encoding());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;masm()-&amp;gt;store_oop(object);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return offset;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkCompiler.cpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkCompiler.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkCompiler.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -33,52 +33,32 @@
&lt;br&gt;&amp;nbsp;SharkCompiler::SharkCompiler()
&lt;br&gt;&amp;nbsp; &amp;nbsp;: AbstractCompiler()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp;// Make LLVM safe for multithreading. &amp;nbsp;We only make LLVM calls from
&lt;br&gt;- &amp;nbsp;// the compiler thread, but if LLVM leaves stubs to be rewritten on
&lt;br&gt;- &amp;nbsp;// execution then it's possible for Java threads to be making LLVM
&lt;br&gt;- &amp;nbsp;// calls at the same time we are.
&lt;br&gt;+ &amp;nbsp;// Create the lock to protect the memory manager and execution engine
&lt;br&gt;+ &amp;nbsp;_execution_engine_lock = new Monitor(Mutex::leaf, &amp;quot;SharkExecutionEngineLock&amp;quot;);
&lt;br&gt;+ &amp;nbsp;MutexLocker locker(execution_engine_lock());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Make LLVM safe for multithreading
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (!llvm_start_multithreaded()) 
&lt;br&gt;- &amp;nbsp; &amp;nbsp;warning(&amp;quot;llvm_start_multithreaded() failed&amp;quot;);
&lt;br&gt;-#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fatal(&amp;quot;llvm_start_multithreaded() failed&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Create a module to build our functions into
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp;// LLVM 2.6 and later requires passing a LLVMContext during module
&lt;br&gt;- &amp;nbsp;// creation. The LLVM API getGlobalContext() returns a LLVMContext that
&lt;br&gt;- &amp;nbsp;// can be used safely as long as the shark compiler stays single threaded
&lt;br&gt;- &amp;nbsp;// and only uses one module.
&lt;br&gt;- &amp;nbsp;_module = new Module(&amp;quot;shark&amp;quot;, getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp;_module = new Module(&amp;quot;shark&amp;quot;);
&lt;br&gt;-#endif
&lt;br&gt;+ &amp;nbsp;// Initialize the native target
&lt;br&gt;+ &amp;nbsp;InitializeNativeTarget();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp;// If we have a native target, initialize it to ensure it is linked in and
&lt;br&gt;- &amp;nbsp;// usable by the JIT.
&lt;br&gt;- &amp;nbsp;InitializeNativeTarget();
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;// Create the two contexts which we'll use
&lt;br&gt;+ &amp;nbsp;_normal_context = new SharkContext(&amp;quot;normal&amp;quot;);
&lt;br&gt;+ &amp;nbsp;_native_context = new SharkContext(&amp;quot;native&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Create the memory manager
&lt;br&gt;+ &amp;nbsp;_memory_manager = new SharkMemoryManager();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Create the JIT
&lt;br&gt;- &amp;nbsp;ModuleProvider *module_provider = new ExistingModuleProvider(module());
&lt;br&gt;- &amp;nbsp;_memory_manager = new SharkMemoryManager();
&lt;br&gt;&amp;nbsp; &amp;nbsp;_execution_engine = ExecutionEngine::createJIT(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; /*
&lt;br&gt;- &amp;nbsp; &amp;nbsp;* LLVM 26 introduced a more fine-grained control to set the optimization
&lt;br&gt;- &amp;nbsp; &amp;nbsp;* level when creating the LLVM JIT.
&lt;br&gt;- &amp;nbsp; &amp;nbsp;* The optimization level are now specified with a enum instead of a bool.
&lt;br&gt;- &amp;nbsp; &amp;nbsp;* CodeGenOpt::None = bool true; a fast JIT with reduced optimization.
&lt;br&gt;- &amp;nbsp; &amp;nbsp;* CodeGenOpt::Default = bool false; a non-fast JIT with optimization.
&lt;br&gt;- &amp;nbsp; &amp;nbsp;* CodeGenOpt::Aggressive = a new non-fast JIT with best optimization.
&lt;br&gt;- &amp;nbsp; &amp;nbsp;*/
&lt;br&gt;- &amp;nbsp; &amp;nbsp;module_provider, NULL, memory_manager(), CodeGenOpt::Default);
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;module_provider, NULL, memory_manager(), false);
&lt;br&gt;-#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;_normal_context-&amp;gt;module_provider(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;NULL, memory_manager(), CodeGenOpt::Default);
&lt;br&gt;+ &amp;nbsp;execution_engine()-&amp;gt;addModuleProvider(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;_native_context-&amp;gt;module_provider());
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Initialize Shark components that need it
&lt;br&gt;- &amp;nbsp;SharkType::initialize();
&lt;br&gt;+ &amp;nbsp;// All done
&lt;br&gt;&amp;nbsp; &amp;nbsp;mark_initialized();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -90,9 +70,9 @@
&lt;br&gt;&amp;nbsp;void SharkCompiler::compile_method(ciEnv* env, ciMethod* target, int entry_bci)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;assert(is_initialized(), &amp;quot;should be&amp;quot;);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;ResourceMark rm;
&lt;br&gt;- &amp;nbsp;const char *name = methodname(target);
&lt;br&gt;+ &amp;nbsp;const char *name = methodname(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;target-&amp;gt;holder()-&amp;gt;name()-&amp;gt;as_utf8(), target-&amp;gt;name()-&amp;gt;as_utf8());
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Do the typeflow analysis
&lt;br&gt;&amp;nbsp; &amp;nbsp;ciTypeFlow *flow;
&lt;br&gt;@@ -116,62 +96,26 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;env-&amp;gt;set_dependencies(new Dependencies(env));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Create the code buffer and builder
&lt;br&gt;- &amp;nbsp;SharkCodeBuffer cb(env-&amp;gt;oop_recorder());
&lt;br&gt;- &amp;nbsp;SharkBuilder builder(module(), &amp;cb);
&lt;br&gt;+ &amp;nbsp;CodeBuffer hscb(&amp;quot;Shark&amp;quot;, 256 * K, 64 * K);
&lt;br&gt;+ &amp;nbsp;hscb.initialize_oop_recorder(env-&amp;gt;oop_recorder());
&lt;br&gt;+ &amp;nbsp;MacroAssembler *masm = new MacroAssembler(&amp;hscb);
&lt;br&gt;+ &amp;nbsp;SharkCodeBuffer cb(masm);
&lt;br&gt;+ &amp;nbsp;SharkBuilder builder(&amp;cb);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Emit the entry point
&lt;br&gt;&amp;nbsp; &amp;nbsp;SharkEntry *entry = (SharkEntry *) cb.malloc(sizeof(SharkEntry));
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Build the LLVM IR for the method
&lt;br&gt;- &amp;nbsp;Function *function = SharkFunction::build(this, env, &amp;builder, flow, name);
&lt;br&gt;- &amp;nbsp;if (SharkPrintBitcodeOf != NULL) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (!fnmatch(SharkPrintBitcodeOf, name, 0))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;function-&amp;gt;dump();
&lt;br&gt;+ &amp;nbsp;Function *function = SharkFunction::build(env, &amp;builder, flow, name);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Generate native code. &amp;nbsp;It's unpleasant that we have to drop into
&lt;br&gt;+ &amp;nbsp;// the VM to do this -- it blocks safepoints -- but I can't see any
&lt;br&gt;+ &amp;nbsp;// other way to handle the locking.
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ThreadInVMfromNative tiv(JavaThread::current());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;generate_native_code(entry, function, name);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;entry-&amp;gt;set_function(function);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Compile to native code
&lt;br&gt;-#ifndef PRODUCT
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;lt; 27
&lt;br&gt;-#ifdef X86
&lt;br&gt;- &amp;nbsp;if (SharkPrintAsmOf != NULL) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;std::vector&amp;lt;const char*&amp;gt; args;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;args.push_back(&amp;quot;&amp;quot;); // program name
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (!fnmatch(SharkPrintAsmOf, name, 0))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;args.push_back(&amp;quot;-debug-only=x86-emitter&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;args.push_back(&amp;quot;-debug-only=none&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;args.push_back(0); &amp;nbsp;// terminator
&lt;br&gt;- &amp;nbsp; &amp;nbsp;cl::ParseCommandLineOptions(args.size() - 1, (char **) &amp;args[0]);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-#endif // X86
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp;if (SharkPrintAsmOf != NULL) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (!fnmatch(SharkPrintAsmOf, name, 0)) {
&lt;br&gt;-#ifdef X86
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::SetCurrentDebugType(&amp;quot;x86-emitter&amp;quot;);
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::SetCurrentDebugType(&amp;quot;jit&amp;quot;);
&lt;br&gt;-#endif // X86
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::DebugFlag=true;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;} else {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::SetCurrentDebugType(&amp;quot;&amp;quot;); 
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::DebugFlag=false;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-#endif
&lt;br&gt;-#endif // !PRODUCT
&lt;br&gt;- &amp;nbsp;memory_manager()-&amp;gt;set_entry_for_function(function, entry);
&lt;br&gt;- &amp;nbsp;module()-&amp;gt;getFunctionList().push_back(function);
&lt;br&gt;- &amp;nbsp;entry-&amp;gt;set_entry_point(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;(address) execution_engine()-&amp;gt;getPointerToFunction(function));
&lt;br&gt;- &amp;nbsp;address code_start = entry-&amp;gt;code_start();
&lt;br&gt;- &amp;nbsp;address code_limit = entry-&amp;gt;code_limit();
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Register generated code for profiling, etc
&lt;br&gt;- &amp;nbsp;if (JvmtiExport::should_post_dynamic_code_generated())
&lt;br&gt;- &amp;nbsp; &amp;nbsp;JvmtiExport::post_dynamic_code_generated(name, code_start, code_limit);
&lt;br&gt;- &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Install the method into the VM
&lt;br&gt;&amp;nbsp; &amp;nbsp;CodeOffsets offsets;
&lt;br&gt;&amp;nbsp; &amp;nbsp;offsets.set_value(CodeOffsets::Deopt, 0);
&lt;br&gt;@@ -186,7 +130,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; entry_bci,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;offsets,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cb.cb(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;hscb,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;oopmaps,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;handler_table,
&lt;br&gt;@@ -195,8 +139,96 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; env-&amp;gt;comp_level(),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; false,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; false);
&lt;br&gt;+}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Print statistics, if requested
&lt;br&gt;+nmethod* SharkCompiler::generate_native_wrapper(MacroAssembler* masm,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;methodHandle &amp;nbsp; &amp;nbsp;target,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BasicType* &amp;nbsp; &amp;nbsp; &amp;nbsp;arg_types,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BasicType &amp;nbsp; &amp;nbsp; &amp;nbsp; return_type)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;assert(is_initialized(), &amp;quot;should be&amp;quot;);
&lt;br&gt;+ &amp;nbsp;ResourceMark rm;
&lt;br&gt;+ &amp;nbsp;const char *name = methodname(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;target-&amp;gt;klass_name()-&amp;gt;as_utf8(), target-&amp;gt;name()-&amp;gt;as_utf8());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Create the code buffer and builder
&lt;br&gt;+ &amp;nbsp;SharkCodeBuffer cb(masm);
&lt;br&gt;+ &amp;nbsp;SharkBuilder builder(&amp;cb);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Emit the entry point
&lt;br&gt;+ &amp;nbsp;SharkEntry *entry = (SharkEntry *) cb.malloc(sizeof(SharkEntry));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Build the LLVM IR for the method
&lt;br&gt;+ &amp;nbsp;SharkNativeWrapper *wrapper = SharkNativeWrapper::build(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;builder, target, name, arg_types, return_type);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Generate native code
&lt;br&gt;+ &amp;nbsp;generate_native_code(entry, wrapper-&amp;gt;function(), name);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Return the nmethod for installation in the VM
&lt;br&gt;+ &amp;nbsp;return nmethod::new_native_nmethod(target,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; masm-&amp;gt;code(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wrapper-&amp;gt;frame_size(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wrapper-&amp;gt;receiver_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wrapper-&amp;gt;lock_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wrapper-&amp;gt;oop_maps());
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+void SharkCompiler::generate_native_code(SharkEntry* entry,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Function* &amp;nbsp; function,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char* name)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;// Print the LLVM bitcode, if requested
&lt;br&gt;+ &amp;nbsp;if (SharkPrintBitcodeOf != NULL) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (!fnmatch(SharkPrintBitcodeOf, name, 0))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;function-&amp;gt;dump();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Compile to native code
&lt;br&gt;+ &amp;nbsp;address code = NULL;
&lt;br&gt;+ &amp;nbsp;context()-&amp;gt;add_function(function);
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;MutexLocker locker(execution_engine_lock());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;free_queued_methods();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (SharkPrintAsmOf != NULL) {
&lt;br&gt;+#if SHARK_LLVM_VERSION &amp;gt;= 27
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!fnmatch(SharkPrintAsmOf, name, 0)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::SetCurrentDebugType(X86_ONLY(&amp;quot;x86-emitter&amp;quot;) NOT_X86(&amp;quot;jit&amp;quot;));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::DebugFlag = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::SetCurrentDebugType(&amp;quot;&amp;quot;); 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::DebugFlag = false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+#else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;// NB you need to patch LLVM with &lt;a href=&quot;http://tinyurl.com/yf3baln&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://tinyurl.com/yf3baln&lt;/a&gt;&amp;nbsp;for this
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;std::vector&amp;lt;const char*&amp;gt; args;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;args.push_back(&amp;quot;&amp;quot;); // program name
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!fnmatch(SharkPrintAsmOf, name, 0))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.push_back(&amp;quot;-debug-only=x86-emitter&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args.push_back(&amp;quot;-debug-only=none&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;args.push_back(0); &amp;nbsp;// terminator
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;cl::ParseCommandLineOptions(args.size() - 1, (char **) &amp;args[0]);
&lt;br&gt;+#endif // SHARK_LLVM_VERSION
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;memory_manager()-&amp;gt;set_entry_for_function(function, entry);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;code = (address) execution_engine()-&amp;gt;getPointerToFunction(function);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;entry-&amp;gt;set_entry_point(code);
&lt;br&gt;+ &amp;nbsp;entry-&amp;gt;set_function(function);
&lt;br&gt;+ &amp;nbsp;entry-&amp;gt;set_context(context());
&lt;br&gt;+ &amp;nbsp;address code_start = entry-&amp;gt;code_start();
&lt;br&gt;+ &amp;nbsp;address code_limit = entry-&amp;gt;code_limit();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Register generated code for profiling, etc
&lt;br&gt;+ &amp;nbsp;if (JvmtiExport::should_post_dynamic_code_generated())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;JvmtiExport::post_dynamic_code_generated(name, code_start, code_limit);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Print debug information, if requested
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (SharkTraceInstalls) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;tty-&amp;gt;print_cr(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot; [%p-%p): %s (%d bytes code)&amp;quot;,
&lt;br&gt;@@ -206,21 +238,39 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;void SharkCompiler::free_compiled_method(address code)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;Function *function = ((SharkEntry *) code)-&amp;gt;function();
&lt;br&gt;- &amp;nbsp;execution_engine()-&amp;gt;freeMachineCodeForFunction(function);
&lt;br&gt;- &amp;nbsp;function-&amp;gt;eraseFromParent();
&lt;br&gt;+ &amp;nbsp;// This method may only be called when the VM is at a safepoint.
&lt;br&gt;+ &amp;nbsp;// All _thread_in_vm threads will be waiting for the safepoint to
&lt;br&gt;+ &amp;nbsp;// finish with the exception of the VM thread, so we can consider
&lt;br&gt;+ &amp;nbsp;// ourself the owner of the execution engine lock even though we
&lt;br&gt;+ &amp;nbsp;// can't actually acquire it at this time.
&lt;br&gt;+ &amp;nbsp;assert(Thread::current()-&amp;gt;is_VM_thread(), &amp;quot;must be called by VM thread&amp;quot;);
&lt;br&gt;+ &amp;nbsp;assert(SafepointSynchronize::is_at_safepoint(), &amp;quot;must be at safepoint&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;SharkEntry *entry = (SharkEntry *) code;
&lt;br&gt;+ &amp;nbsp;entry-&amp;gt;context()-&amp;gt;push_to_free_queue(entry-&amp;gt;function());
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-const char* SharkCompiler::methodname(const ciMethod* target)
&lt;br&gt;+void SharkCompiler::free_queued_methods()
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;const char *klassname = target-&amp;gt;holder()-&amp;gt;name()-&amp;gt;as_utf8();
&lt;br&gt;- &amp;nbsp;const char *methodname = target-&amp;gt;name()-&amp;gt;as_utf8();
&lt;br&gt;+ &amp;nbsp;// The free queue is protected by the execution engine lock
&lt;br&gt;+ &amp;nbsp;assert(execution_engine_lock()-&amp;gt;owned_by_self(), &amp;quot;should be&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;char *buf = NEW_RESOURCE_ARRAY(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;char, strlen(klassname) + 2 + strlen(methodname) + 1);
&lt;br&gt;+ &amp;nbsp;while (true) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Function *function = context()-&amp;gt;pop_from_free_queue();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (function == NULL)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;execution_engine()-&amp;gt;freeMachineCodeForFunction(function);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;function-&amp;gt;eraseFromParent(); &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+const char* SharkCompiler::methodname(const char* klass, const char* method)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;char *buf = NEW_RESOURCE_ARRAY(char, strlen(klass) + 2 + strlen(method) + 1);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;char *dst = buf;
&lt;br&gt;- &amp;nbsp;for (const char *c = klassname; *c; c++) {
&lt;br&gt;+ &amp;nbsp;for (const char *c = klass; *c; c++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (*c == '/')
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*(dst++) = '.';
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;@@ -228,7 +278,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;*(dst++) = ':';
&lt;br&gt;&amp;nbsp; &amp;nbsp;*(dst++) = ':';
&lt;br&gt;- &amp;nbsp;for (const char *c = methodname; *c; c++) {
&lt;br&gt;+ &amp;nbsp;for (const char *c = method; *c; c++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*(dst++) = *c;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;*(dst++) = '\0';
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkCompiler.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkCompiler.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkCompiler.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -23,6 +23,8 @@
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+class SharkContext;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;class SharkCompiler : public AbstractCompiler {
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Creation
&lt;br&gt;@@ -32,7 +34,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;const char *name() &amp;nbsp; &amp;nbsp; { return &amp;quot;shark&amp;quot;; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Missing feature tests
&lt;br&gt;- &amp;nbsp;bool supports_native() { return false; }
&lt;br&gt;+ &amp;nbsp;bool supports_native() { return true; }
&lt;br&gt;&amp;nbsp; &amp;nbsp;bool supports_osr() &amp;nbsp; &amp;nbsp;{ return true; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Customization
&lt;br&gt;@@ -42,33 +44,81 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Initialization
&lt;br&gt;&amp;nbsp; &amp;nbsp;void initialize();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Compilation entry point for methods
&lt;br&gt;+ &amp;nbsp;// Compile a normal (bytecode) method and install it in the VM
&lt;br&gt;&amp;nbsp; &amp;nbsp;void compile_method(ciEnv* env, ciMethod* target, int entry_bci);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Free compiled methods
&lt;br&gt;+ &amp;nbsp;// Generate a wrapper for a native (JNI) method
&lt;br&gt;+ &amp;nbsp;nmethod* generate_native_wrapper(MacroAssembler* masm,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; methodHandle &amp;nbsp; &amp;nbsp;target,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BasicType* &amp;nbsp; &amp;nbsp; &amp;nbsp;arg_types,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BasicType &amp;nbsp; &amp;nbsp; &amp;nbsp; return_type);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Free compiled methods (and native wrappers)
&lt;br&gt;&amp;nbsp; &amp;nbsp;void free_compiled_method(address code);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// LLVM interface
&lt;br&gt;+ &amp;nbsp;// Each thread generating IR needs its own context. &amp;nbsp;The normal
&lt;br&gt;+ &amp;nbsp;// context is used for bytecode methods, and is protected from
&lt;br&gt;+ &amp;nbsp;// multiple simultaneous accesses by being restricted to the
&lt;br&gt;+ &amp;nbsp;// compiler thread. &amp;nbsp;The native context is used for JNI methods,
&lt;br&gt;+ &amp;nbsp;// and is protected from multiple simultaneous accesses by the
&lt;br&gt;+ &amp;nbsp;// adapter handler library lock.
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;- &amp;nbsp;llvm::Module* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_module;
&lt;br&gt;+ &amp;nbsp;SharkContext* _normal_context;
&lt;br&gt;+ &amp;nbsp;SharkContext* _native_context;
&lt;br&gt;+
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;SharkContext* context() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (JavaThread::current()-&amp;gt;is_Compiler_thread()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return _normal_context;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;assert(AdapterHandlerLibrary_lock-&amp;gt;owned_by_self(), &amp;quot;should be&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;return _native_context;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// The LLVM execution engine is the JIT we use to generate native
&lt;br&gt;+ &amp;nbsp;// code. &amp;nbsp;It is thread safe, but we need to protect it with a lock
&lt;br&gt;+ &amp;nbsp;// of our own because otherwise LLVM's lock and HotSpot's locks
&lt;br&gt;+ &amp;nbsp;// interleave and deadlock. &amp;nbsp;The SharkMemoryManager is not thread
&lt;br&gt;+ &amp;nbsp;// safe, and is protected by the same lock as the execution engine.
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;Monitor* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _execution_engine_lock;
&lt;br&gt;&amp;nbsp; &amp;nbsp;SharkMemoryManager* &amp;nbsp; &amp;nbsp;_memory_manager;
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::ExecutionEngine* _execution_engine;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- public:
&lt;br&gt;- &amp;nbsp;llvm::Module* module() const
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;Monitor* execution_engine_lock() const
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _module;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _execution_engine_lock;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;SharkMemoryManager* memory_manager() const
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;assert(execution_engine_lock()-&amp;gt;owned_by_self(), &amp;quot;should be&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return _memory_manager;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::ExecutionEngine* execution_engine() const
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;assert(execution_engine_lock()-&amp;gt;owned_by_self(), &amp;quot;should be&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return _execution_engine;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Helper
&lt;br&gt;+ &amp;nbsp;// Global access
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;static SharkCompiler* compiler()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;AbstractCompiler *compiler =
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CompileBroker::compiler(CompLevel_fast_compile);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;assert(compiler-&amp;gt;is_shark() &amp;&amp; compiler-&amp;gt;is_initialized(), &amp;quot;should be&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return (SharkCompiler *) compiler;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Helpers
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;- &amp;nbsp;static const char* methodname(const ciMethod* target);
&lt;br&gt;+ &amp;nbsp;static const char* methodname(const char* klass, const char* method);
&lt;br&gt;+ &amp;nbsp;void generate_native_code(SharkEntry* &amp;nbsp; &amp;nbsp; entry,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::Function* function,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const char* &amp;nbsp; &amp;nbsp; name);
&lt;br&gt;+ &amp;nbsp;void free_queued_methods();
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkContext.cpp
&lt;br&gt;--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkContext.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -0,0 +1,185 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 1999-2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * Copyright 2009 Red Hat, Inc.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ *
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;incls/_precompiled.incl&amp;quot;
&lt;br&gt;+#include &amp;quot;incls/_sharkContext.cpp.incl&amp;quot;
&lt;br&gt;+
&lt;br&gt;+using namespace llvm;
&lt;br&gt;+
&lt;br&gt;+SharkContext::SharkContext(const char* name)
&lt;br&gt;+ &amp;nbsp;: LLVMContext(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;_free_queue(NULL)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;// Create a module to build our functions into
&lt;br&gt;+ &amp;nbsp;_module = new Module(name, *this);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Create basic types
&lt;br&gt;+ &amp;nbsp;_void_type &amp;nbsp; &amp;nbsp;= Type::getVoidTy(*this);
&lt;br&gt;+ &amp;nbsp;_bit_type &amp;nbsp; &amp;nbsp; = Type::getInt1Ty(*this);
&lt;br&gt;+ &amp;nbsp;_jbyte_type &amp;nbsp; = Type::getInt8Ty(*this);
&lt;br&gt;+ &amp;nbsp;_jshort_type &amp;nbsp;= Type::getInt16Ty(*this);
&lt;br&gt;+ &amp;nbsp;_jint_type &amp;nbsp; &amp;nbsp;= Type::getInt32Ty(*this);
&lt;br&gt;+ &amp;nbsp;_jlong_type &amp;nbsp; = Type::getInt64Ty(*this);
&lt;br&gt;+ &amp;nbsp;_jfloat_type &amp;nbsp;= Type::getFloatTy(*this);
&lt;br&gt;+ &amp;nbsp;_jdouble_type = Type::getDoubleTy(*this);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Create compound types
&lt;br&gt;+ &amp;nbsp;_itableOffsetEntry_type = PointerType::getUnqual(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ArrayType::get(jbyte_type(), itableOffsetEntry::size() * wordSize));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;_klass_type = PointerType::getUnqual(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ArrayType::get(jbyte_type(), sizeof(Klass)));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;_jniEnv_type = PointerType::getUnqual(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ArrayType::get(jbyte_type(), sizeof(JNIEnv)));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;_jniHandleBlock_type = PointerType::getUnqual(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ArrayType::get(jbyte_type(), sizeof(JNIHandleBlock)));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;_methodOop_type = PointerType::getUnqual(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ArrayType::get(jbyte_type(), sizeof(methodOopDesc)));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;_monitor_type = ArrayType::get(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;jbyte_type(), frame::interpreter_frame_monitor_size() * wordSize);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;_oop_type = PointerType::getUnqual(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ArrayType::get(jbyte_type(), sizeof(oopDesc)));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;_thread_type = PointerType::getUnqual(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ArrayType::get(jbyte_type(), sizeof(JavaThread)));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;_zeroStack_type = PointerType::getUnqual(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;ArrayType::get(jbyte_type(), sizeof(ZeroStack)));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;std::vector&amp;lt;const Type*&amp;gt; params;
&lt;br&gt;+ &amp;nbsp;params.push_back(methodOop_type());
&lt;br&gt;+ &amp;nbsp;params.push_back(intptr_type());
&lt;br&gt;+ &amp;nbsp;params.push_back(thread_type());
&lt;br&gt;+ &amp;nbsp;_entry_point_type = FunctionType::get(void_type(), params, false);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;params.clear();
&lt;br&gt;+ &amp;nbsp;params.push_back(methodOop_type());
&lt;br&gt;+ &amp;nbsp;params.push_back(PointerType::getUnqual(jbyte_type()));
&lt;br&gt;+ &amp;nbsp;params.push_back(intptr_type());
&lt;br&gt;+ &amp;nbsp;params.push_back(thread_type());
&lt;br&gt;+ &amp;nbsp;_osr_entry_point_type = FunctionType::get(void_type(), params, false);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Create mappings
&lt;br&gt;+ &amp;nbsp;for (int i = 0; i &amp;lt; T_CONFLICT; i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;switch (i) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_BOOLEAN:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = jint_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = jbyte_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_BYTE:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = jint_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = jbyte_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_CHAR:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = jint_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = jshort_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_SHORT:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = jint_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = jshort_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_INT:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = jint_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = jint_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_LONG:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = jlong_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = jlong_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_FLOAT:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = jfloat_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = jfloat_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_DOUBLE:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = jdouble_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = jdouble_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_OBJECT:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_ARRAY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = oop_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = oop_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_ADDRESS:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = intptr_type();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = NULL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType[i] = NULL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType[i] = NULL;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+class SharkFreeQueueItem : public CHeapObj {
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;SharkFreeQueueItem(llvm::Function* function, SharkFreeQueueItem *next)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: _function(function), _next(next) {}
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;llvm::Function* &amp;nbsp; &amp;nbsp; _function;
&lt;br&gt;+ &amp;nbsp;SharkFreeQueueItem* _next;
&lt;br&gt;+
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;llvm::Function* function() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _function;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;SharkFreeQueueItem* next() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _next;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+void SharkContext::push_to_free_queue(Function* function)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;_free_queue = new SharkFreeQueueItem(function, _free_queue);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+Function* SharkContext::pop_from_free_queue()
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;if (_free_queue == NULL)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return NULL;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;SharkFreeQueueItem *item = _free_queue;
&lt;br&gt;+ &amp;nbsp;Function *function = item-&amp;gt;function();
&lt;br&gt;+ &amp;nbsp;_free_queue = item-&amp;gt;next();
&lt;br&gt;+ &amp;nbsp;delete item;
&lt;br&gt;+ &amp;nbsp;return function;
&lt;br&gt;+}
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkContext.hpp
&lt;br&gt;--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkContext.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -0,0 +1,208 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 1999-2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * Copyright 2009 Red Hat, Inc.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ *
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+// The LLVMContext class allows multiple instances of LLVM to operate
&lt;br&gt;+// independently of each other in a multithreaded context. &amp;nbsp;We extend
&lt;br&gt;+// this here to store things in Shark that are LLVMContext-specific.
&lt;br&gt;+
&lt;br&gt;+class SharkFreeQueueItem;
&lt;br&gt;+
&lt;br&gt;+class SharkContext : public llvm::LLVMContext {
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;SharkContext(const char* name);
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;llvm::Module* _module;
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;llvm::Module* module() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _module;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Get this thread's SharkContext
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;static SharkContext&amp; current()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return *SharkCompiler::compiler()-&amp;gt;context();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Module accessors
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;llvm::ModuleProvider* module_provider() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return new llvm::ExistingModuleProvider(module());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;void add_function(llvm::Function* function) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;module()-&amp;gt;getFunctionList().push_back(function);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::Constant* get_external(const char* name, const llvm::FunctionType* sig)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return module()-&amp;gt;getOrInsertFunction(name, sig);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Basic types
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;const llvm::Type* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_void_type;
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* _bit_type;
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* _jbyte_type;
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* _jshort_type;
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* _jint_type;
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* _jlong_type;
&lt;br&gt;+ &amp;nbsp;const llvm::Type* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_jfloat_type;
&lt;br&gt;+ &amp;nbsp;const llvm::Type* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_jdouble_type;
&lt;br&gt;+
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;const llvm::Type* void_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _void_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* bit_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _bit_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* jbyte_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _jbyte_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* jshort_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _jshort_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* jint_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _jint_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* jlong_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _jlong_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::Type* jfloat_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _jfloat_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::Type* jdouble_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _jdouble_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::IntegerType* intptr_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return LP64_ONLY(jlong_type()) NOT_LP64(jint_type());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Compound types
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* &amp;nbsp;_itableOffsetEntry_type;
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* &amp;nbsp;_jniEnv_type;
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* &amp;nbsp;_jniHandleBlock_type;
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* &amp;nbsp;_klass_type;
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* &amp;nbsp;_methodOop_type;
&lt;br&gt;+ &amp;nbsp;const llvm::ArrayType* &amp;nbsp; &amp;nbsp;_monitor_type;
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* &amp;nbsp;_oop_type;
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* &amp;nbsp;_thread_type;
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* &amp;nbsp;_zeroStack_type;
&lt;br&gt;+ &amp;nbsp;const llvm::FunctionType* _entry_point_type;
&lt;br&gt;+ &amp;nbsp;const llvm::FunctionType* _osr_entry_point_type;
&lt;br&gt;+
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* itableOffsetEntry_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _itableOffsetEntry_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* jniEnv_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _jniEnv_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* jniHandleBlock_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _jniHandleBlock_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* klass_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _klass_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* methodOop_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _methodOop_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::ArrayType* monitor_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _monitor_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* oop_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _oop_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* thread_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _thread_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::PointerType* zeroStack_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _zeroStack_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::FunctionType* entry_point_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _entry_point_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::FunctionType* osr_entry_point_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _osr_entry_point_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Mappings
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;const llvm::Type* _to_stackType[T_CONFLICT];
&lt;br&gt;+ &amp;nbsp;const llvm::Type* _to_arrayType[T_CONFLICT];
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;const llvm::Type* map_type(const llvm::Type* const* table,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BasicType &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;type) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;assert(type &amp;gt;= 0 &amp;&amp; type &amp;lt; T_CONFLICT, &amp;quot;unhandled type&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;const llvm::Type* result = table[type];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;assert(type != NULL, &amp;quot;unhandled type&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return result;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;const llvm::Type* to_stackType(BasicType type) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return map_type(_to_stackType, type);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;const llvm::Type* to_arrayType(BasicType type) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return map_type(_to_arrayType, type);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Functions queued for freeing
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;SharkFreeQueueItem* _free_queue;
&lt;br&gt;+
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;void push_to_free_queue(llvm::Function* function);
&lt;br&gt;+ &amp;nbsp;llvm::Function* pop_from_free_queue();
&lt;br&gt;+};
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkEntry.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkEntry.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkEntry.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -23,9 +23,12 @@
&lt;br&gt;&amp;nbsp; *
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+class SharkContext;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;class SharkEntry : public ZeroEntry {
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;&amp;nbsp; &amp;nbsp;address &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _code_limit;
&lt;br&gt;+ &amp;nbsp;SharkContext* &amp;nbsp; _context;
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::Function* _function;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;@@ -37,6 +40,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return _code_limit;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;SharkContext* context() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _context;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::Function* function() const
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return _function;
&lt;br&gt;@@ -47,6 +54,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;_code_limit = code_limit;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;void set_context(SharkContext* context)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;_context = context;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;void set_function(llvm::Function* function)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;_function = function;
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkFunction.cpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkFunction.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkFunction.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -77,17 +77,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;block(i)-&amp;gt;initialize();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Create the method preamble
&lt;br&gt;+ &amp;nbsp;// Create and push our stack frame
&lt;br&gt;&amp;nbsp; &amp;nbsp;set_block_insertion_point(&amp;function()-&amp;gt;front());
&lt;br&gt;&amp;nbsp; &amp;nbsp;builder()-&amp;gt;SetInsertPoint(CreateBlock());
&lt;br&gt;- &amp;nbsp;CreateInitZeroStack();
&lt;br&gt;- &amp;nbsp;CreatePushFrame(CreateBuildFrame());
&lt;br&gt;- &amp;nbsp;NOT_PRODUCT(builder()-&amp;gt;CreateStore(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;method,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CreateAddressOfFrameEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;method_slot_offset(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::methodOop_type(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;method_slot&amp;quot;)));
&lt;br&gt;+ &amp;nbsp;_stack = SharkStack::CreateBuildAndPushFrame(this, method);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Create the entry state
&lt;br&gt;&amp;nbsp; &amp;nbsp;SharkState *entry_state;
&lt;br&gt;@@ -132,150 +125,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;do_deferred_zero_checks();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-void SharkFunction::CreateInitZeroStack()
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp;Value *zero_stack = builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;thread(), JavaThread::zero_stack_offset(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;SharkType::zeroStack_type(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;quot;zero_stack&amp;quot;);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_zero_stack_base = builder()-&amp;gt;CreateValueOfStructEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;zero_stack, ZeroStack::base_offset(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;SharkType::intptr_type(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;quot;zero_stack_base&amp;quot;);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_zero_stack_pointer_addr = builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;zero_stack, ZeroStack::sp_offset(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PointerType::getUnqual(SharkType::intptr_type()),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;quot;zero_stack_pointer_addr&amp;quot;);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_zero_frame_pointer_addr = builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;thread(), JavaThread::top_zero_frame_offset(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PointerType::getUnqual(SharkType::intptr_type()),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;quot;zero_frame_pointer_addr&amp;quot;);
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;-void SharkFunction::CreateStackOverflowCheck(Value *sp)
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp;BasicBlock *overflow = CreateBlock(&amp;quot;stack_overflow&amp;quot;);
&lt;br&gt;- &amp;nbsp;BasicBlock *no_overflow = CreateBlock(&amp;quot;no_overflow&amp;quot;);
&lt;br&gt;- &amp;nbsp;
&lt;br&gt;- &amp;nbsp;builder()-&amp;gt;CreateCondBr(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateICmpULT(sp, zero_stack_base()),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;overflow, no_overflow);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;builder()-&amp;gt;SetInsertPoint(overflow);
&lt;br&gt;- &amp;nbsp;builder()-&amp;gt;CreateUnimplemented(__FILE__, __LINE__);
&lt;br&gt;- &amp;nbsp;builder()-&amp;gt;CreateUnreachable();
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;builder()-&amp;gt;SetInsertPoint(no_overflow); &amp;nbsp;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;-void SharkFunction::CreatePushFrame(Value *fp)
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp;builder()-&amp;gt;CreateStore(CreateLoadZeroFramePointer(), fp);
&lt;br&gt;- &amp;nbsp;CreateStoreZeroFramePointer(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreatePtrToInt(fp, SharkType::intptr_type()));
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;-Value* SharkFunction::CreatePopFrame(int result_slots)
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp;assert(result_slots &amp;gt;= 0 &amp;&amp; result_slots &amp;lt;= 2, &amp;quot;should be&amp;quot;);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;int locals_to_pop = max_locals() - result_slots;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;Value *fp = CreateLoadZeroFramePointer();
&lt;br&gt;- &amp;nbsp;Value *sp = builder()-&amp;gt;CreateAdd(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;fp,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant((1 + locals_to_pop) * wordSize));
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;CreateStoreZeroStackPointer(sp);
&lt;br&gt;- &amp;nbsp;CreateStoreZeroFramePointer(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateLoad(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateIntToPtr(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fp, PointerType::getUnqual(SharkType::intptr_type()))));
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;return sp;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;-Value* SharkFunction::CreateBuildFrame()
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp;int locals_words &amp;nbsp;= max_locals();
&lt;br&gt;- &amp;nbsp;int extra_locals &amp;nbsp;= locals_words - arg_size();
&lt;br&gt;- &amp;nbsp;int header_words &amp;nbsp;= SharkFrame::header_words;
&lt;br&gt;- &amp;nbsp;int monitor_words = max_monitors()*frame::interpreter_frame_monitor_size();
&lt;br&gt;- &amp;nbsp;int stack_words &amp;nbsp; = max_stack();
&lt;br&gt;- &amp;nbsp;int frame_words &amp;nbsp; = header_words + monitor_words + stack_words;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_extended_frame_size = frame_words + locals_words;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Update the stack pointer
&lt;br&gt;- &amp;nbsp;Value *zero_stack_pointer = builder()-&amp;gt;CreateSub(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CreateLoadZeroStackPointer(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant((frame_words + extra_locals) * wordSize));
&lt;br&gt;- &amp;nbsp;CreateStackOverflowCheck(zero_stack_pointer);
&lt;br&gt;- &amp;nbsp;NOT_PRODUCT(CreateStoreZeroStackPointer(zero_stack_pointer));
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Create the frame
&lt;br&gt;- &amp;nbsp;_frame = builder()-&amp;gt;CreateIntToPtr(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;zero_stack_pointer,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;PointerType::getUnqual(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ArrayType::get(SharkType::intptr_type(), extended_frame_size())),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;&amp;quot;frame&amp;quot;);
&lt;br&gt;- &amp;nbsp;int offset = 0;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Expression stack
&lt;br&gt;- &amp;nbsp;_stack_slots_offset = offset;
&lt;br&gt;- &amp;nbsp;offset += stack_words;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Monitors
&lt;br&gt;- &amp;nbsp;_monitors_slots_offset = offset; 
&lt;br&gt;- &amp;nbsp;offset += monitor_words;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Temporary oop slot
&lt;br&gt;- &amp;nbsp;_oop_tmp_slot_offset = offset++;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Method pointer
&lt;br&gt;- &amp;nbsp;_method_slot_offset = offset++;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Unextended SP
&lt;br&gt;- &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;zero_stack_pointer,
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CreateAddressOfFrameEntry(offset++));
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// PC
&lt;br&gt;- &amp;nbsp;_pc_slot_offset = offset++;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Frame header
&lt;br&gt;- &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant(ZeroFrame::SHARK_FRAME),
&lt;br&gt;- &amp;nbsp; &amp;nbsp;CreateAddressOfFrameEntry(offset++));
&lt;br&gt;- &amp;nbsp;Value *fp = CreateAddressOfFrameEntry(offset++);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Local variables
&lt;br&gt;- &amp;nbsp;_locals_slots_offset = offset; &amp;nbsp;
&lt;br&gt;- &amp;nbsp;offset += locals_words;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;assert(offset == extended_frame_size(), &amp;quot;should do&amp;quot;);
&lt;br&gt;- &amp;nbsp;return fp;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;-Value* SharkFunction::CreateAddressOfFrameEntry(int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; offset,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const llvm::Type* type,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const char* &amp;nbsp; &amp;nbsp; &amp;nbsp; name) const
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp;bool needs_cast = type &amp;&amp; type != SharkType::intptr_type();
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;Value* result = builder()-&amp;gt;CreateStructGEP(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;_frame, offset, needs_cast ? &amp;quot;&amp;quot; : name);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;if (needs_cast) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;result = builder()-&amp;gt;CreateBitCast(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;result, PointerType::getUnqual(type), name);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;return result;
&lt;br&gt;-}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp;class DeferredZeroCheck : public SharkTargetInvariants {
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;DeferredZeroCheck(SharkTopLevelBlock* block, SharkValue* value)
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkFunction.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkFunction.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkFunction.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -27,24 +27,24 @@
&lt;br&gt;&amp;nbsp;class DeferredZeroCheck;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class SharkFunction : public SharkTargetInvariants {
&lt;br&gt;+ friend class SharkStackWithNormalFrame;
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;- &amp;nbsp;static llvm::Function* build(SharkCompiler* compiler,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ciEnv* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; env,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharkBuilder* &amp;nbsp;builder,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ciTypeFlow* &amp;nbsp; &amp;nbsp;flow,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char* &amp;nbsp; &amp;nbsp;name)
&lt;br&gt;+ &amp;nbsp;static llvm::Function* build(ciEnv* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharkBuilder* builder,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ciTypeFlow* &amp;nbsp; flow,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char* &amp;nbsp; name)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;SharkFunction function(compiler, env, builder, flow, name);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SharkFunction function(env, builder, flow, name);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return function.function();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;- &amp;nbsp;SharkFunction(SharkCompiler* compiler,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciEnv* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; env,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkBuilder* &amp;nbsp;builder,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciTypeFlow* &amp;nbsp; &amp;nbsp;flow,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const char* &amp;nbsp; &amp;nbsp;name)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;: SharkTargetInvariants(compiler, env, builder, flow) { initialize(name); }
&lt;br&gt;+ &amp;nbsp;SharkFunction(ciEnv* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;env,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkBuilder* builder,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciTypeFlow* &amp;nbsp; flow,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const char* &amp;nbsp; name)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: SharkTargetInvariants(env, builder, flow) { initialize(name); }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;&amp;nbsp; &amp;nbsp;void initialize(const char* name);
&lt;br&gt;@@ -53,6 +53,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::Function* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _function;
&lt;br&gt;&amp;nbsp; &amp;nbsp;SharkTopLevelBlock** &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_blocks;
&lt;br&gt;&amp;nbsp; &amp;nbsp;GrowableArray&amp;lt;DeferredZeroCheck*&amp;gt; _deferred_zero_checks;
&lt;br&gt;+ &amp;nbsp;SharkStack* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _stack;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::Function* function() const
&lt;br&gt;@@ -72,6 +73,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return &amp;_deferred_zero_checks;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;SharkStack* stack() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _stack;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// On-stack replacement
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;@@ -103,153 +108,8 @@
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::BasicBlock* CreateBlock(const char* name = &amp;quot;&amp;quot;) const
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::BasicBlock::Create(llvm::getGlobalContext(), name, function(), block_insertion_point());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::BasicBlock::Create(name, function(), block_insertion_point());
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Stack management
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;llvm::Value* _zero_stack_base;
&lt;br&gt;- &amp;nbsp;llvm::Value* _zero_stack_pointer_addr;
&lt;br&gt;- &amp;nbsp;llvm::Value* _zero_frame_pointer_addr;
&lt;br&gt;-
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;llvm::Value* zero_stack_base() const 
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _zero_stack_base;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;llvm::Value* zero_stack_pointer_addr() const 
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _zero_stack_pointer_addr;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;llvm::Value* zero_frame_pointer_addr() const 
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _zero_frame_pointer_addr;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;void CreateInitZeroStack();
&lt;br&gt;-
&lt;br&gt;- public:
&lt;br&gt;- &amp;nbsp;llvm::LoadInst* CreateLoadZeroStackPointer(const char *name = &amp;quot;&amp;quot;)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateLoad(zero_stack_pointer_addr(), name);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;llvm::StoreInst* CreateStoreZeroStackPointer(llvm::Value* value)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateStore(value, zero_stack_pointer_addr());
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;llvm::LoadInst* CreateLoadZeroFramePointer(const char *name = &amp;quot;&amp;quot;)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateLoad(zero_frame_pointer_addr(), name);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;llvm::StoreInst* CreateStoreZeroFramePointer(llvm::Value* value)
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateStore(value, zero_frame_pointer_addr());
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;void CreateStackOverflowCheck(llvm::Value* sp);
&lt;br&gt;-
&lt;br&gt;- public:
&lt;br&gt;- &amp;nbsp;void CreatePushFrame(llvm::Value* fp);
&lt;br&gt;- &amp;nbsp;llvm::Value* CreatePopFrame(int result_slots);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Frame management
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;llvm::Value* _frame;
&lt;br&gt;-
&lt;br&gt;- public:
&lt;br&gt;- &amp;nbsp;llvm::Value* CreateAddressOfFrameEntry(int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; offset,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const llvm::Type* type = NULL,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char* &amp;nbsp; &amp;nbsp; &amp;nbsp; name = &amp;quot;&amp;quot;) const;
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;llvm::Value* CreateBuildFrame();
&lt;br&gt;-
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;int _extended_frame_size;
&lt;br&gt;- &amp;nbsp;int _stack_slots_offset;
&lt;br&gt;- &amp;nbsp;int _monitors_slots_offset;
&lt;br&gt;- &amp;nbsp;int _oop_tmp_slot_offset;
&lt;br&gt;- &amp;nbsp;int _method_slot_offset;
&lt;br&gt;- &amp;nbsp;int _pc_slot_offset;
&lt;br&gt;- &amp;nbsp;int _locals_slots_offset;
&lt;br&gt;-
&lt;br&gt;- public:
&lt;br&gt;- &amp;nbsp;int extended_frame_size() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _extended_frame_size;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;int oopmap_frame_size() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return extended_frame_size() - arg_size();
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;int stack_slots_offset() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _stack_slots_offset;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;int oop_tmp_slot_offset() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _oop_tmp_slot_offset;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;int method_slot_offset() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _method_slot_offset;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;int pc_slot_offset() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _pc_slot_offset;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;int locals_slots_offset() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _locals_slots_offset;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Monitors
&lt;br&gt;- public:
&lt;br&gt;- &amp;nbsp;int monitor_offset(int index) const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;assert(index &amp;gt;= 0 &amp;&amp; index &amp;lt; max_monitors(), &amp;quot;invalid monitor index&amp;quot;);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _monitors_slots_offset +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(max_monitors() - 1 - index) * frame::interpreter_frame_monitor_size();
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;int monitor_object_offset(int index) const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return monitor_offset(index) +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;(BasicObjectLock::obj_offset_in_bytes() &amp;gt;&amp;gt; LogBytesPerWord);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;int monitor_header_offset(int index) const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return monitor_offset(index) +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;((BasicObjectLock::lock_offset_in_bytes() +
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BasicLock::displaced_header_offset_in_bytes()) &amp;gt;&amp;gt; LogBytesPerWord);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- public:
&lt;br&gt;- &amp;nbsp;llvm::Value* monitor_addr(int index) const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return CreateAddressOfFrameEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;monitor_offset(index),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::monitor_type(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;monitor&amp;quot;);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;llvm::Value* monitor_object_addr(int index) const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return CreateAddressOfFrameEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;monitor_object_offset(index),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::oop_type(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;object_addr&amp;quot;);
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;llvm::Value* monitor_header_addr(int index) const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return CreateAddressOfFrameEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;monitor_header_offset(index),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::intptr_type(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;displaced_header_addr&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return llvm::BasicBlock::Create(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkContext::current(), name, function(), block_insertion_point());
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Deferred zero checks
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkInvariants.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkInvariants.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkInvariants.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -31,35 +31,20 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class SharkCompileInvariants : public ResourceObj {
&lt;br&gt;&amp;nbsp; protected:
&lt;br&gt;- &amp;nbsp;SharkCompileInvariants(SharkCompiler* compiler,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ciEnv* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; env,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharkBuilder* &amp;nbsp;builder)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;: _compiler(compiler),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_env(env),
&lt;br&gt;+ &amp;nbsp;SharkCompileInvariants(ciEnv* env, SharkBuilder* builder)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: _env(env),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_builder(builder),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_thread(NULL) {}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;SharkCompileInvariants(const SharkCompileInvariants* parent)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;: _compiler(parent-&amp;gt;_compiler),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_env(parent-&amp;gt;_env),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: _env(parent-&amp;gt;_env),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_builder(parent-&amp;gt;_builder),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_thread(parent-&amp;gt;_thread) {}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;- &amp;nbsp;SharkCompiler* _compiler;
&lt;br&gt;- &amp;nbsp;ciEnv* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _env;
&lt;br&gt;- &amp;nbsp;SharkBuilder* &amp;nbsp;_builder;
&lt;br&gt;- &amp;nbsp;llvm::Value* &amp;nbsp; _thread;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// The SharkCompiler that is compiling this method. &amp;nbsp;Holds the
&lt;br&gt;- &amp;nbsp;// classes that form the interface with LLVM (the module, the
&lt;br&gt;- &amp;nbsp;// memory manager, etc) and provides the compile() method to
&lt;br&gt;- &amp;nbsp;// convert LLVM functions to native code.
&lt;br&gt;- protected:
&lt;br&gt;- &amp;nbsp;SharkCompiler* compiler() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _compiler;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;ciEnv* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_env;
&lt;br&gt;+ &amp;nbsp;SharkBuilder* _builder;
&lt;br&gt;+ &amp;nbsp;llvm::Value* &amp;nbsp;_thread;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Top-level broker for HotSpot's Compiler Interface.
&lt;br&gt;&amp;nbsp; &amp;nbsp;//
&lt;br&gt;@@ -73,6 +58,7 @@
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;&amp;nbsp; &amp;nbsp;ciEnv* env() const
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;assert(_env != NULL, &amp;quot;env not available&amp;quot;);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return _env;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -124,11 +110,8 @@
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class SharkTargetInvariants : public SharkCompileInvariants {
&lt;br&gt;&amp;nbsp; protected:
&lt;br&gt;- &amp;nbsp;SharkTargetInvariants(SharkCompiler* compiler,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciEnv* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; env,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkBuilder* &amp;nbsp;builder,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ciTypeFlow* &amp;nbsp; &amp;nbsp;flow)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;: SharkCompileInvariants(compiler, env, builder),
&lt;br&gt;+ &amp;nbsp;SharkTargetInvariants(ciEnv* env, SharkBuilder* builder, ciTypeFlow* flow)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: SharkCompileInvariants(env, builder),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_target(flow-&amp;gt;method()),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_flow(flow),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_max_monitors(count_monitors()) {}
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkMemoryManager.cpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkMemoryManager.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkMemoryManager.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -103,8 +103,8 @@
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;-uint8_t* SharkMemoryManager::allocateGlobal(uintptr_t Size, unsigned int Alignment)
&lt;br&gt;+uint8_t* SharkMemoryManager::allocateGlobal(uintptr_t Size,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;unsigned int Alignment)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;return mm()-&amp;gt;allocateGlobal(Size, Alignment);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;@@ -124,12 +124,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;mm()-&amp;gt;setPoisonMemory(poison);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-#endif
&lt;br&gt;-
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 25
&lt;br&gt;&amp;nbsp;unsigned char *SharkMemoryManager::allocateSpace(intptr_t Size,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int Alignment)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;return mm()-&amp;gt;allocateSpace(Size, Alignment);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;-#endif
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkMemoryManager.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkMemoryManager.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkMemoryManager.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -71,12 +71,10 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char* TableStart,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char* TableEnd,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char* FrameRegister);
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;&amp;nbsp; &amp;nbsp;void* getDlsymTable() const;
&lt;br&gt;&amp;nbsp; &amp;nbsp;void SetDlsymTable(void *ptr);
&lt;br&gt;&amp;nbsp; &amp;nbsp;void setPoisonMemory(bool);
&lt;br&gt;&amp;nbsp; &amp;nbsp;uint8_t* allocateGlobal(uintptr_t, unsigned int);
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp; &amp;nbsp;void setMemoryWritable();
&lt;br&gt;&amp;nbsp; &amp;nbsp;void setMemoryExecutable();
&lt;br&gt;&amp;nbsp;#if SHARK_LLVM_VERSION &amp;gt;= 27
&lt;br&gt;@@ -85,9 +83,6 @@
&lt;br&gt;&amp;nbsp;#else
&lt;br&gt;&amp;nbsp; &amp;nbsp;void deallocateMemForFunction(const llvm::Function* F);
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;-
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 25
&lt;br&gt;&amp;nbsp; &amp;nbsp;unsigned char *allocateSpace(intptr_t Size,
&lt;br&gt;&amp;nbsp;			 &amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned int Alignment);
&lt;br&gt;-#endif
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkNativeWrapper.cpp
&lt;br&gt;--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkNativeWrapper.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -0,0 +1,352 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 1999-2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * Copyright 2009 Red Hat, Inc.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ *
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;incls/_precompiled.incl&amp;quot;
&lt;br&gt;+#include &amp;quot;incls/_sharkNativeWrapper.cpp.incl&amp;quot;
&lt;br&gt;+
&lt;br&gt;+using namespace llvm;
&lt;br&gt;+
&lt;br&gt;+void SharkNativeWrapper::initialize(const char *name)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;// Create the function
&lt;br&gt;+ &amp;nbsp;_function = Function::Create(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SharkType::entry_point_type(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;GlobalVariable::InternalLinkage,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;name);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Get our arguments
&lt;br&gt;+ &amp;nbsp;Function::arg_iterator ai = function()-&amp;gt;arg_begin();
&lt;br&gt;+ &amp;nbsp;Argument *method = ai++;
&lt;br&gt;+ &amp;nbsp;method-&amp;gt;setName(&amp;quot;method&amp;quot;);
&lt;br&gt;+ &amp;nbsp;Argument *base_pc = ai++;
&lt;br&gt;+ &amp;nbsp;base_pc-&amp;gt;setName(&amp;quot;base_pc&amp;quot;);
&lt;br&gt;+ &amp;nbsp;code_buffer()-&amp;gt;set_base_pc(base_pc);
&lt;br&gt;+ &amp;nbsp;Argument *thread = ai++;
&lt;br&gt;+ &amp;nbsp;thread-&amp;gt;setName(&amp;quot;thread&amp;quot;);
&lt;br&gt;+ &amp;nbsp;set_thread(thread);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Create and push our stack frame
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;SetInsertPoint(CreateBlock());
&lt;br&gt;+ &amp;nbsp;_stack = SharkStack::CreateBuildAndPushFrame(this, method);
&lt;br&gt;+ &amp;nbsp;NOT_PRODUCT(method = NULL);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Create the oopmap. &amp;nbsp;We use the one oopmap for every call site in
&lt;br&gt;+ &amp;nbsp;// the wrapper, which results in the odd mild inefficiency but is a
&lt;br&gt;+ &amp;nbsp;// damn sight easier to code.
&lt;br&gt;+ &amp;nbsp;OopMap *oopmap = new OopMap(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SharkStack::oopmap_slot_munge(stack()-&amp;gt;oopmap_frame_size()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SharkStack::oopmap_slot_munge(arg_size()));
&lt;br&gt;+ &amp;nbsp;oopmap-&amp;gt;set_oop(SharkStack::slot2reg(stack()-&amp;gt;method_slot_offset()));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Set up the oop_tmp slot if required:
&lt;br&gt;+ &amp;nbsp;// &amp;nbsp;- For static methods we use it to handlize the class argument
&lt;br&gt;+ &amp;nbsp;// &amp;nbsp; &amp;nbsp;for the call, and to protect the same during slow path locks
&lt;br&gt;+ &amp;nbsp;// &amp;nbsp; &amp;nbsp;(if synchronized).
&lt;br&gt;+ &amp;nbsp;// &amp;nbsp;- For methods returning oops, we use it to protect the return
&lt;br&gt;+ &amp;nbsp;// &amp;nbsp; &amp;nbsp;value across safepoints or slow path unlocking.
&lt;br&gt;+ &amp;nbsp;if (is_static() || is_returning_oop()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;_oop_tmp_slot = stack()-&amp;gt;slot_addr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;stack()-&amp;gt;oop_tmp_slot_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::oop_type(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;oop_tmp_slot&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;oopmap-&amp;gt;set_oop(SharkStack::slot2reg(stack()-&amp;gt;oop_tmp_slot_offset()));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Set up the monitor slot, for synchronized methods
&lt;br&gt;+ &amp;nbsp;if (is_synchronized()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Unimplemented();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;_lock_slot_offset = 23;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Start building the argument list
&lt;br&gt;+ &amp;nbsp;std::vector&amp;lt;const Type*&amp;gt; param_types;
&lt;br&gt;+ &amp;nbsp;std::vector&amp;lt;Value*&amp;gt; param_values;
&lt;br&gt;+ &amp;nbsp;const PointerType *box_type = PointerType::getUnqual(SharkType::oop_type());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// First argument is the JNIEnv
&lt;br&gt;+ &amp;nbsp;param_types.push_back(SharkType::jniEnv_type());
&lt;br&gt;+ &amp;nbsp;param_values.push_back(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;thread,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;JavaThread::jni_environment_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::jniEnv_type(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;jni_environment&amp;quot;));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// For static methods, the second argument is the class
&lt;br&gt;+ &amp;nbsp;if (is_static()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateInlineOop(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;JNIHandles::make_local(target()-&amp;gt;method_holder())),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;oop_tmp_slot());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;param_types.push_back(box_type);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;param_values.push_back(oop_tmp_slot());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;_receiver_slot_offset = stack()-&amp;gt;oop_tmp_slot_offset();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;else if (is_returning_oop()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// The oop_tmp slot is registered in the oopmap,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// so we need to clear it. &amp;nbsp;This is one of the
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;// mild inefficiencies I mentioned earlier.
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(LLVMValue::null(), oop_tmp_slot());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Parse the arguments
&lt;br&gt;+ &amp;nbsp;for (int i = 0; i &amp;lt; arg_size(); i++) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int slot_offset = stack()-&amp;gt;locals_slots_offset() + arg_size() - 1 - i;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;int adjusted_offset = slot_offset;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BasicBlock *null, *not_null, *merge;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Value *box;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PHINode *phi;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;switch (arg_type(i)) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_VOID:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_OBJECT:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_ARRAY:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;null &amp;nbsp; &amp;nbsp; = CreateBlock(&amp;quot;null&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;not_null = CreateBlock(&amp;quot;not_null&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;merge &amp;nbsp; &amp;nbsp;= CreateBlock(&amp;quot;merge&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;box = stack()-&amp;gt;slot_addr(slot_offset, SharkType::oop_type());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateCondBr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateICmp(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ICmpInst::ICMP_EQ,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateLoad(box),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::null()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;null, not_null);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;SetInsertPoint(null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateBr(merge);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;SetInsertPoint(not_null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateBr(merge); &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;SetInsertPoint(merge);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;phi = builder()-&amp;gt;CreatePHI(box_type, &amp;quot;boxed_object&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;phi-&amp;gt;addIncoming(ConstantPointerNull::get(box_type), null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;phi-&amp;gt;addIncoming(box, not_null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;box = phi;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;param_types.push_back(box_type);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;param_values.push_back(box);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;oopmap-&amp;gt;set_oop(SharkStack::slot2reg(slot_offset));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (i == 0 &amp;&amp; !is_static())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_receiver_slot_offset = slot_offset;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_LONG:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_DOUBLE:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;adjusted_offset--;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;// fall through
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;const Type *param_type = SharkType::to_stackType(arg_type(i));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;param_types.push_back(param_type);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;param_values.push_back(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateLoad(stack()-&amp;gt;slot_addr(adjusted_offset, param_type)));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;} &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// The oopmap is now complete, and everything is written
&lt;br&gt;+ &amp;nbsp;// into the frame except the PC.
&lt;br&gt;+ &amp;nbsp;int pc_offset = code_buffer()-&amp;gt;create_unique_offset();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;_oop_maps = new OopMapSet();
&lt;br&gt;+ &amp;nbsp;oop_maps()-&amp;gt;add_gc_map(pc_offset, oopmap);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;code_buffer_address(pc_offset),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stack()-&amp;gt;slot_addr(stack()-&amp;gt;pc_slot_offset()));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Set up the Java frame anchor
&lt;br&gt;+ &amp;nbsp;stack()-&amp;gt;CreateSetLastJavaFrame();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Lock if necessary
&lt;br&gt;+ &amp;nbsp;if (is_synchronized())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Unimplemented();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Change the thread state to _thread_in_native
&lt;br&gt;+ &amp;nbsp;CreateSetThreadState(_thread_in_native);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Make the call
&lt;br&gt;+ &amp;nbsp;BasicType result_type = target()-&amp;gt;result_type();
&lt;br&gt;+ &amp;nbsp;const Type* return_type;
&lt;br&gt;+ &amp;nbsp;if (result_type == T_VOID)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return_type = SharkType::void_type();
&lt;br&gt;+ &amp;nbsp;else if (is_returning_oop())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return_type = box_type;
&lt;br&gt;+ &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return_type = SharkType::to_arrayType(result_type);
&lt;br&gt;+ &amp;nbsp;Value* native_function = builder()-&amp;gt;CreateIntToPtr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; LLVMValue::intptr_constant((intptr_t) target()-&amp;gt;native_function()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; PointerType::getUnqual(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; FunctionType::get(return_type, param_types, false)));
&lt;br&gt;+ &amp;nbsp;Value *result = builder()-&amp;gt;CreateCall(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;native_function, param_values.begin(), param_values.end());
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Start the transition back to _thread_in_Java
&lt;br&gt;+ &amp;nbsp;CreateSetThreadState(_thread_in_native_trans);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Make sure new state is visible in the GC thread
&lt;br&gt;+ &amp;nbsp;if (os::is_MP()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (UseMembar)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;{ Unimplemented(); }
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CreateWriteMemorySerializePage();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Handle safepoint operations, pending suspend requests,
&lt;br&gt;+ &amp;nbsp;// and pending asynchronous exceptions.
&lt;br&gt;+ &amp;nbsp;BasicBlock *check_thread = CreateBlock(&amp;quot;check_thread&amp;quot;);
&lt;br&gt;+ &amp;nbsp;BasicBlock *do_safepoint = CreateBlock(&amp;quot;do_safepoint&amp;quot;);
&lt;br&gt;+ &amp;nbsp;BasicBlock *safepointed &amp;nbsp;= CreateBlock(&amp;quot;safepointed&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;Value *global_state = builder()-&amp;gt;CreateLoad(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateIntToPtr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(intptr_t) SafepointSynchronize::address_of_state()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;PointerType::getUnqual(SharkType::jint_type())),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;global_state&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateCondBr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateICmpNE(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;global_state,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::jint_constant(SafepointSynchronize::_not_synchronized)),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;do_safepoint, check_thread);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;SetInsertPoint(check_thread);
&lt;br&gt;+ &amp;nbsp;Value *thread_state = builder()-&amp;gt;CreateValueOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;thread,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;JavaThread::suspend_flags_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SharkType::jint_type(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;thread_state&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateCondBr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateICmpNE(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;thread_state,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::jint_constant(0)),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;do_safepoint, safepointed);
&lt;br&gt;+ 
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;SetInsertPoint(do_safepoint);
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateCall(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;check_special_condition_for_native_trans(), thread);
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateBr(safepointed);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Finally we can change the thread state to _thread_in_Java
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;SetInsertPoint(safepointed);
&lt;br&gt;+ &amp;nbsp;CreateSetThreadState(_thread_in_Java);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Clear the frame anchor
&lt;br&gt;+ &amp;nbsp;stack()-&amp;gt;CreateResetLastJavaFrame();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// If there is a pending exception then we can just unwind and
&lt;br&gt;+ &amp;nbsp;// return. &amp;nbsp;It seems totally wrong that unlocking is skipped here
&lt;br&gt;+ &amp;nbsp;// but apparently the template interpreter does this so we do too.
&lt;br&gt;+ &amp;nbsp;BasicBlock *exception &amp;nbsp; &amp;nbsp;= CreateBlock(&amp;quot;exception&amp;quot;);
&lt;br&gt;+ &amp;nbsp;BasicBlock *no_exception = CreateBlock(&amp;quot;no_exception&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateCondBr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateICmpEQ(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CreateLoadPendingException(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::null()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;no_exception, exception);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;SetInsertPoint(exception);
&lt;br&gt;+ &amp;nbsp;CreateResetHandleBlock();
&lt;br&gt;+ &amp;nbsp;stack()-&amp;gt;CreatePopFrame(0);
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateRetVoid();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;SetInsertPoint(no_exception);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// If the result was an oop then unbox it before
&lt;br&gt;+ &amp;nbsp;// releasing the handle it might be protected by
&lt;br&gt;+ &amp;nbsp;if (is_returning_oop()) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BasicBlock *null &amp;nbsp; &amp;nbsp; = builder()-&amp;gt;GetInsertBlock();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BasicBlock *not_null = CreateBlock(&amp;quot;not_null&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;BasicBlock *merge &amp;nbsp; &amp;nbsp;= CreateBlock(&amp;quot;merge&amp;quot;);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateCondBr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateICmpNE(result, ConstantPointerNull::get(box_type)),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;not_null, merge);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;SetInsertPoint(not_null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Value *unboxed_result = builder()-&amp;gt;CreateLoad(result);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateBr(merge);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;SetInsertPoint(merge);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PHINode *phi = builder()-&amp;gt;CreatePHI(SharkType::oop_type(), &amp;quot;result&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;phi-&amp;gt;addIncoming(LLVMValue::null(), null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;phi-&amp;gt;addIncoming(unboxed_result, not_null);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;result = phi;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Reset handle block
&lt;br&gt;+ &amp;nbsp;CreateResetHandleBlock();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Unlock if necessary. &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;if (is_synchronized())
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;Unimplemented();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Unwind and return
&lt;br&gt;+ &amp;nbsp;Value *result_addr = stack()-&amp;gt;CreatePopFrame(type2size[result_type]);
&lt;br&gt;+ &amp;nbsp;if (result_type != T_VOID) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool needs_cast = false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;bool is_signed = false;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;switch (result_type) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_BOOLEAN:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;result = builder()-&amp;gt;CreateICmpNE(result, LLVMValue::jbyte_constant(0));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;needs_cast = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_BYTE:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;needs_cast = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_CHAR:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case T_SHORT:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;needs_cast = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;is_signed = true;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;if (needs_cast) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;result = builder()-&amp;gt;CreateIntCast(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result, SharkType::to_stackType(result_type), is_signed);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;result, &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateIntToPtr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result_addr,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PointerType::getUnqual(SharkType::to_stackType(result_type))));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateRetVoid();
&lt;br&gt;+}
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkNativeWrapper.hpp
&lt;br&gt;--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkNativeWrapper.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -0,0 +1,204 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 1999-2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * Copyright 2009 Red Hat, Inc.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ *
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+class SharkNativeWrapper : public SharkCompileInvariants {
&lt;br&gt;+ &amp;nbsp;friend class SharkStackWithNativeFrame;
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;static SharkNativeWrapper* build(SharkBuilder* builder,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; methodHandle &amp;nbsp;target,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char* &amp;nbsp; name,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BasicType* &amp;nbsp; &amp;nbsp;arg_types,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BasicType &amp;nbsp; &amp;nbsp; return_type)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return new SharkNativeWrapper(builder,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;target,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;name,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;arg_types,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return_type);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;SharkNativeWrapper(SharkBuilder* builder,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; methodHandle &amp;nbsp;target,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char* &amp;nbsp; name,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BasicType* &amp;nbsp; &amp;nbsp;arg_types,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BasicType &amp;nbsp; &amp;nbsp; return_type)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: SharkCompileInvariants(NULL, builder),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_target(target),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_arg_types(arg_types),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_return_type(return_type),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;_lock_slot_offset(0) { initialize(name); }
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;void initialize(const char* name);
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;methodHandle &amp;nbsp; &amp;nbsp;_target;
&lt;br&gt;+ &amp;nbsp;BasicType* &amp;nbsp; &amp;nbsp; &amp;nbsp;_arg_types;
&lt;br&gt;+ &amp;nbsp;BasicType &amp;nbsp; &amp;nbsp; &amp;nbsp; _return_type;
&lt;br&gt;+ &amp;nbsp;llvm::Function* _function;
&lt;br&gt;+ &amp;nbsp;SharkStack* &amp;nbsp; &amp;nbsp; _stack;
&lt;br&gt;+ &amp;nbsp;llvm::Value* &amp;nbsp; &amp;nbsp;_oop_tmp_slot;
&lt;br&gt;+ &amp;nbsp;OopMapSet* &amp;nbsp; &amp;nbsp; &amp;nbsp;_oop_maps;
&lt;br&gt;+ &amp;nbsp;int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _receiver_slot_offset;
&lt;br&gt;+ &amp;nbsp;int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _lock_slot_offset;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// The method being compiled.
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;methodHandle target() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _target;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Properties of the method.
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;int arg_size() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return target()-&amp;gt;size_of_parameters();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;BasicType arg_type(int i) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _arg_types[i];
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;BasicType return_type() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _return_type;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;bool is_static() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return target()-&amp;gt;is_static();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;bool is_synchronized() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return target()-&amp;gt;is_synchronized();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;bool is_returning_oop() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return target()-&amp;gt;is_returning_oop();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// The LLVM function we are building.
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;llvm::Function* function() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _function;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// The Zero stack and our frame on it.
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;SharkStack* stack() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _stack;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Temporary oop storage.
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;llvm::Value* oop_tmp_slot() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;assert(is_static() || is_returning_oop(), &amp;quot;should be&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _oop_tmp_slot;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Information required by nmethod::new_native_nmethod().
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;int frame_size() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return stack()-&amp;gt;oopmap_frame_size();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;ByteSize receiver_offset() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return in_ByteSize(_receiver_slot_offset * wordSize);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;ByteSize lock_offset() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return in_ByteSize(_lock_slot_offset * wordSize);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;OopMapSet* oop_maps() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _oop_maps;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Helpers.
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;llvm::BasicBlock* CreateBlock(const char* name = &amp;quot;&amp;quot;) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return llvm::BasicBlock::Create(SharkContext::current(), name, function());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::Value* thread_state_address() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;thread(), JavaThread::thread_state_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::PointerType::getUnqual(SharkType::jint_type()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;thread_state_address&amp;quot;);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::Value* pending_exception_address() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;thread(), Thread::pending_exception_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::PointerType::getUnqual(SharkType::oop_type()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;pending_exception_address&amp;quot;);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;void CreateSetThreadState(JavaThreadState state) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::jint_constant(state), thread_state_address());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;void CreateWriteMemorySerializePage() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::jint_constant(1),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateIntToPtr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateAdd(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(intptr_t) os::get_memory_serialize_page()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateAnd(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateLShr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreatePtrToInt(thread(), SharkType::intptr_type()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant(os::get_serialize_page_shift_count())),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant(os::get_serialize_page_mask()))),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::PointerType::getUnqual(SharkType::jint_type())));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;void CreateResetHandleBlock() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;llvm::Value *active_handles = builder()-&amp;gt;CreateValueOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;thread(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;JavaThread::active_handles_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::jniHandleBlock_type(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;active_handles&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant(0),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;active_handles,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;in_ByteSize(JNIHandleBlock::top_offset_in_bytes()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::PointerType::getUnqual(SharkType::intptr_type()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;top&amp;quot;));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::LoadInst* CreateLoadPendingException() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateLoad(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;pending_exception_address(), &amp;quot;pending_exception&amp;quot;);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+};
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkStack.cpp
&lt;br&gt;--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkStack.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -0,0 +1,239 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 1999-2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * Copyright 2008, 2009 Red Hat, Inc.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ *
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;quot;incls/_precompiled.incl&amp;quot;
&lt;br&gt;+#include &amp;quot;incls/_sharkStack.cpp.incl&amp;quot;
&lt;br&gt;+
&lt;br&gt;+using namespace llvm;
&lt;br&gt;+
&lt;br&gt;+void SharkStack::initialize(Value* method)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;bool setup_sp_and_method = (method != NULL);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;int locals_words &amp;nbsp;= max_locals();
&lt;br&gt;+ &amp;nbsp;int extra_locals &amp;nbsp;= locals_words - arg_size();
&lt;br&gt;+ &amp;nbsp;int header_words &amp;nbsp;= SharkFrame::header_words;
&lt;br&gt;+ &amp;nbsp;int monitor_words = max_monitors()*frame::interpreter_frame_monitor_size();
&lt;br&gt;+ &amp;nbsp;int stack_words &amp;nbsp; = max_stack();
&lt;br&gt;+ &amp;nbsp;int frame_words &amp;nbsp; = header_words + monitor_words + stack_words;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;_extended_frame_size = frame_words + locals_words;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Update the stack pointer
&lt;br&gt;+ &amp;nbsp;Value *stack_pointer = builder()-&amp;gt;CreateSub(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CreateLoadStackPointer(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant((frame_words + extra_locals) * wordSize));
&lt;br&gt;+ &amp;nbsp;CreateHardStackOverflowCheck(stack_pointer);
&lt;br&gt;+ &amp;nbsp;if (setup_sp_and_method)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;CreateStoreStackPointer(stack_pointer);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Create the frame
&lt;br&gt;+ &amp;nbsp;_frame = builder()-&amp;gt;CreateIntToPtr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stack_pointer,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;PointerType::getUnqual(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ArrayType::get(SharkType::intptr_type(), extended_frame_size())),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;&amp;quot;frame&amp;quot;);
&lt;br&gt;+ &amp;nbsp;int offset = 0;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Expression stack
&lt;br&gt;+ &amp;nbsp;_stack_slots_offset = offset;
&lt;br&gt;+ &amp;nbsp;offset += stack_words;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Monitors
&lt;br&gt;+ &amp;nbsp;_monitors_slots_offset = offset; 
&lt;br&gt;+ &amp;nbsp;offset += monitor_words;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Temporary oop slot
&lt;br&gt;+ &amp;nbsp;_oop_tmp_slot_offset = offset++;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Method pointer
&lt;br&gt;+ &amp;nbsp;_method_slot_offset = offset++;
&lt;br&gt;+ &amp;nbsp;if (setup_sp_and_method) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;method, slot_addr(method_slot_offset(), SharkType::methodOop_type()));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Unextended SP
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateStore(stack_pointer, slot_addr(offset++));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// PC
&lt;br&gt;+ &amp;nbsp;_pc_slot_offset = offset++;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Frame header
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant(ZeroFrame::SHARK_FRAME), slot_addr(offset++));
&lt;br&gt;+ &amp;nbsp;Value *fp = slot_addr(offset++);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Local variables
&lt;br&gt;+ &amp;nbsp;_locals_slots_offset = offset; &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;offset += locals_words;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Push the frame
&lt;br&gt;+ &amp;nbsp;assert(offset == extended_frame_size(), &amp;quot;should do&amp;quot;);
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateStore(CreateLoadFramePointer(), fp);
&lt;br&gt;+ &amp;nbsp;CreateStoreFramePointer(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreatePtrToInt(fp, SharkType::intptr_type()));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Check we're not about to run out of stack
&lt;br&gt;+ &amp;nbsp;CreateSoftStackOverflowCheck(stack_pointer);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+// Check that the stack will not overflow before a stack pointer
&lt;br&gt;+// update. &amp;nbsp;Overflows here are problematic as we haven't yet
&lt;br&gt;+// created a frame, so it's not clear how to report the error.
&lt;br&gt;+// &lt;a href=&quot;http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=249&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=249&lt;/a&gt;&lt;br&gt;+void SharkStack::CreateHardStackOverflowCheck(Value* sp)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;BasicBlock *overflow = CreateBlock(&amp;quot;stack_overflow&amp;quot;);
&lt;br&gt;+ &amp;nbsp;BasicBlock *no_overflow = CreateBlock(&amp;quot;no_overflow&amp;quot;);
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateCondBr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateICmpULT(sp, stack_base()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;overflow, no_overflow);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;SetInsertPoint(overflow);
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateUnimplemented(__FILE__, __LINE__);
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;CreateUnreachable();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;builder()-&amp;gt;SetInsertPoint(no_overflow); &amp;nbsp;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+// Check that a stack overflow is not imminent, throwing a
&lt;br&gt;+// StackOverflowError if it is while we still have the stack
&lt;br&gt;+// in which to do so.
&lt;br&gt;+void SharkStack::CreateSoftStackOverflowCheck(Value* sp)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;// XXX see CppInterpreter::stack_overflow_imminent
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+Value* SharkStack::CreatePopFrame(int result_slots)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;assert(result_slots &amp;gt;= 0 &amp;&amp; result_slots &amp;lt;= 2, &amp;quot;should be&amp;quot;);
&lt;br&gt;+ &amp;nbsp;int locals_to_pop = max_locals() - result_slots;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;Value *fp = CreateLoadFramePointer();
&lt;br&gt;+ &amp;nbsp;Value *sp = builder()-&amp;gt;CreateAdd(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;fp,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant((1 + locals_to_pop) * wordSize));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;CreateStoreStackPointer(sp);
&lt;br&gt;+ &amp;nbsp;CreateStoreFramePointer(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateLoad(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateIntToPtr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;fp, PointerType::getUnqual(SharkType::intptr_type()))));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;return sp;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+Value* SharkStack::slot_addr(int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; offset,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const Type* type,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char* name) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;bool needs_cast = type &amp;&amp; type != SharkType::intptr_type();
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;Value* result = builder()-&amp;gt;CreateStructGEP(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;_frame, offset, needs_cast ? &amp;quot;&amp;quot; : name);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;if (needs_cast) {
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;result = builder()-&amp;gt;CreateBitCast(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;result, PointerType::getUnqual(type), name);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;return result;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+// The bits that differentiate stacks with normal and native frames on top
&lt;br&gt;+
&lt;br&gt;+SharkStack* SharkStack::CreateBuildAndPushFrame(SharkFunction* function,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Value* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; method)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return new SharkStackWithNormalFrame(function, method);
&lt;br&gt;+}
&lt;br&gt;+SharkStack* SharkStack::CreateBuildAndPushFrame(SharkNativeWrapper* wrapper,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Value* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return new SharkStackWithNativeFrame(wrapper, method);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+SharkStackWithNormalFrame::SharkStackWithNormalFrame(SharkFunction* function,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Value* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; method)
&lt;br&gt;+ &amp;nbsp;: SharkStack(function), _function(function)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;// For normal frames, the stack pointer and the method slot will
&lt;br&gt;+ &amp;nbsp;// be set during each decache, so it is not necessary to do them
&lt;br&gt;+ &amp;nbsp;// at the time the frame is created. &amp;nbsp;However, we set them for
&lt;br&gt;+ &amp;nbsp;// non-PRODUCT builds to make crash dumps easier to understand.
&lt;br&gt;+ &amp;nbsp;initialize(PRODUCT_ONLY(NULL) NOT_PRODUCT(method));
&lt;br&gt;+}
&lt;br&gt;+SharkStackWithNativeFrame::SharkStackWithNativeFrame(SharkNativeWrapper* wrp,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Value* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;method)
&lt;br&gt;+ &amp;nbsp;: SharkStack(wrp), _wrapper(wrp)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;initialize(method);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int SharkStackWithNormalFrame::arg_size() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return function()-&amp;gt;arg_size();
&lt;br&gt;+}
&lt;br&gt;+int SharkStackWithNativeFrame::arg_size() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return wrapper()-&amp;gt;arg_size();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int SharkStackWithNormalFrame::max_locals() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return function()-&amp;gt;max_locals();
&lt;br&gt;+}
&lt;br&gt;+int SharkStackWithNativeFrame::max_locals() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return wrapper()-&amp;gt;arg_size();
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int SharkStackWithNormalFrame::max_stack() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return function()-&amp;gt;max_stack();
&lt;br&gt;+}
&lt;br&gt;+int SharkStackWithNativeFrame::max_stack() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int SharkStackWithNormalFrame::max_monitors() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return function()-&amp;gt;max_monitors();
&lt;br&gt;+}
&lt;br&gt;+int SharkStackWithNativeFrame::max_monitors() const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return wrapper()-&amp;gt;is_synchronized() ? 1 : 0;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+BasicBlock* SharkStackWithNormalFrame::CreateBlock(const char* name) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return function()-&amp;gt;CreateBlock(name);
&lt;br&gt;+}
&lt;br&gt;+BasicBlock* SharkStackWithNativeFrame::CreateBlock(const char* name) const
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;return wrapper()-&amp;gt;CreateBlock(name);
&lt;br&gt;+}
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkStack.hpp
&lt;br&gt;--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkStack.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -0,0 +1,292 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright 1999-2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;+ * Copyright 2008, 2009 Red Hat, Inc.
&lt;br&gt;+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;+ * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;+ * published by the Free Software Foundation.
&lt;br&gt;+ *
&lt;br&gt;+ * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;+ * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;+ * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;+ * accompanied this code).
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU General Public License version
&lt;br&gt;+ * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;+ *
&lt;br&gt;+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;+ * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;+ * have any questions.
&lt;br&gt;+ *
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+class SharkFunction;
&lt;br&gt;+class SharkNativeWrapper;
&lt;br&gt;+class SharkStackWithNormalFrame;
&lt;br&gt;+class SharkStackWithNativeFrame;
&lt;br&gt;+
&lt;br&gt;+class SharkStack : public SharkCompileInvariants {
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;static SharkStack* CreateBuildAndPushFrame(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SharkFunction* function, llvm::Value* method);
&lt;br&gt;+ &amp;nbsp;static SharkStack* CreateBuildAndPushFrame(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;SharkNativeWrapper* wrapper, llvm::Value* method);
&lt;br&gt;+
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;SharkStack(const SharkCompileInvariants* parent)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: SharkCompileInvariants(parent) {}
&lt;br&gt;+
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;void initialize(llvm::Value* method);
&lt;br&gt;+
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;void CreateHardStackOverflowCheck(llvm::Value* sp);
&lt;br&gt;+ &amp;nbsp;void CreateSoftStackOverflowCheck(llvm::Value* sp);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Properties of the method being compiled
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;virtual int arg_size() const = 0;
&lt;br&gt;+ &amp;nbsp;virtual int max_locals() const = 0;
&lt;br&gt;+ &amp;nbsp;virtual int max_stack() const = 0;
&lt;br&gt;+ &amp;nbsp;virtual int max_monitors() const = 0;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// BasicBlock creation
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;virtual llvm::BasicBlock* CreateBlock(const char* name = &amp;quot;&amp;quot;) const = 0;
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;// Interface with the Zero stack
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;llvm::Value* zero_stack() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;thread(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;JavaThread::zero_stack_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::zeroStack_type(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;zero_stack&amp;quot;);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::Value* stack_base() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateValueOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;zero_stack(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ZeroStack::base_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::intptr_type(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;stack_base&amp;quot;);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::Value* stack_pointer_addr() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;zero_stack(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;ZeroStack::sp_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::PointerType::getUnqual(SharkType::intptr_type()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;stack_pointer_addr&amp;quot;);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::Value* frame_pointer_addr() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;thread(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;JavaThread::top_zero_frame_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::PointerType::getUnqual(SharkType::intptr_type()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;frame_pointer_addr&amp;quot;);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;llvm::LoadInst* CreateLoadStackPointer(const char *name = &amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateLoad(stack_pointer_addr(), name);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::StoreInst* CreateStoreStackPointer(llvm::Value* value)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateStore(value, stack_pointer_addr());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::LoadInst* CreateLoadFramePointer(const char *name = &amp;quot;&amp;quot;)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateLoad(frame_pointer_addr(), name);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::StoreInst* CreateStoreFramePointer(llvm::Value* value)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateStore(value, frame_pointer_addr());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::Value* CreatePopFrame(int result_slots); 
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Interface with the frame anchor
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;llvm::Value* frame_anchor_addr() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;thread(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;JavaThread::last_Java_sp_offset(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::PointerType::getUnqual(SharkType::intptr_type()),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;frame_anchor_addr&amp;quot;);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;llvm::StoreInst* CreateSetLastJavaFrame()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateStore(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;CreateLoadFramePointer(), frame_anchor_addr());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::StoreInst* CreateResetLastJavaFrame()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return builder()-&amp;gt;CreateStore(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;LLVMValue::intptr_constant(0), frame_anchor_addr());
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Our method's frame
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;llvm::Value* _frame;
&lt;br&gt;+ &amp;nbsp;int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_extended_frame_size;
&lt;br&gt;+ &amp;nbsp;int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_stack_slots_offset;
&lt;br&gt;+
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;int extended_frame_size() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _extended_frame_size;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;int oopmap_frame_size() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return extended_frame_size() - arg_size();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Offsets of things in the frame
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;int _monitors_slots_offset;
&lt;br&gt;+ &amp;nbsp;int _oop_tmp_slot_offset;
&lt;br&gt;+ &amp;nbsp;int _method_slot_offset;
&lt;br&gt;+ &amp;nbsp;int _pc_slot_offset;
&lt;br&gt;+ &amp;nbsp;int _locals_slots_offset;
&lt;br&gt;+
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;int stack_slots_offset() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _stack_slots_offset;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;int oop_tmp_slot_offset() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _oop_tmp_slot_offset;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;int method_slot_offset() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _method_slot_offset;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;int pc_slot_offset() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _pc_slot_offset;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;int locals_slots_offset() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _locals_slots_offset;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;int monitor_offset(int index) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;assert(index &amp;gt;= 0 &amp;&amp; index &amp;lt; max_monitors(), &amp;quot;invalid monitor index&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _monitors_slots_offset +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;(max_monitors() - 1 - index) * frame::interpreter_frame_monitor_size();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;int monitor_object_offset(int index) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return monitor_offset(index) +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;(BasicObjectLock::obj_offset_in_bytes() &amp;gt;&amp;gt; LogBytesPerWord);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;int monitor_header_offset(int index) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return monitor_offset(index) +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;((BasicObjectLock::lock_offset_in_bytes() +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;BasicLock::displaced_header_offset_in_bytes()) &amp;gt;&amp;gt; LogBytesPerWord);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Addresses of things in the frame
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;llvm::Value* slot_addr(int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; offset,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const llvm::Type* type = NULL,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; const char* &amp;nbsp; &amp;nbsp; &amp;nbsp; name = &amp;quot;&amp;quot;) const;
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;llvm::Value* monitor_addr(int index) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot_addr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;monitor_offset(index),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::monitor_type(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;monitor&amp;quot;);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::Value* monitor_object_addr(int index) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot_addr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;monitor_object_offset(index),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::oop_type(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;object_addr&amp;quot;);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;llvm::Value* monitor_header_addr(int index) const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return slot_addr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;monitor_header_offset(index),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;SharkType::intptr_type(),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;displaced_header_addr&amp;quot;);
&lt;br&gt;+ &amp;nbsp;} &amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// oopmap helpers
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;static int oopmap_slot_munge(int offset)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return offset &amp;lt;&amp;lt; (LogBytesPerWord - LogBytesPerInt);
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static VMReg slot2reg(int offset)
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return VMRegImpl::stack2reg(oopmap_slot_munge(offset));
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+class SharkStackWithNormalFrame : public SharkStack {
&lt;br&gt;+ &amp;nbsp;friend class SharkStack;
&lt;br&gt;+
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;SharkStackWithNormalFrame(SharkFunction* function, llvm::Value* method);
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;SharkFunction* _function;
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;SharkFunction* function() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _function;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Properties of the method being compiled
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;int arg_size() const;
&lt;br&gt;+ &amp;nbsp;int max_locals() const;
&lt;br&gt;+ &amp;nbsp;int max_stack() const;
&lt;br&gt;+ &amp;nbsp;int max_monitors() const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// BasicBlock creation
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;llvm::BasicBlock* CreateBlock(const char* name = &amp;quot;&amp;quot;) const;
&lt;br&gt;+};
&lt;br&gt;+
&lt;br&gt;+class SharkStackWithNativeFrame : public SharkStack {
&lt;br&gt;+ &amp;nbsp;friend class SharkStack;
&lt;br&gt;+
&lt;br&gt;+ protected:
&lt;br&gt;+ &amp;nbsp;SharkStackWithNativeFrame(SharkNativeWrapper* wrapper, llvm::Value* method);
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;SharkNativeWrapper* _wrapper;
&lt;br&gt;+
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;SharkNativeWrapper* wrapper() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _wrapper;
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Properties of the method being compiled
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;int arg_size() const;
&lt;br&gt;+ &amp;nbsp;int max_locals() const;
&lt;br&gt;+ &amp;nbsp;int max_stack() const;
&lt;br&gt;+ &amp;nbsp;int max_monitors() const;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// BasicBlock creation
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;llvm::BasicBlock* CreateBlock(const char* name = &amp;quot;&amp;quot;) const;
&lt;br&gt;+};
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkStateScanner.cpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkStateScanner.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkStateScanner.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -39,7 +39,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;process_stack_slot(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;state-&amp;gt;stack_addr(i),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;function()-&amp;gt;stack_slots_offset() +
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;stack()-&amp;gt;stack_slots_offset() +
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i + max_stack() - state-&amp;gt;stack_depth());
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;end_stack();
&lt;br&gt;@@ -49,17 +49,17 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; state-&amp;gt;num_monitors(); i++) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;process_monitor(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;function()-&amp;gt;monitor_offset(i),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;function()-&amp;gt;monitor_object_offset(i));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;stack()-&amp;gt;monitor_offset(i),
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;stack()-&amp;gt;monitor_object_offset(i));
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;end_monitors();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Frame header
&lt;br&gt;&amp;nbsp; &amp;nbsp;start_frame_header();
&lt;br&gt;&amp;nbsp; &amp;nbsp;process_oop_tmp_slot(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;state-&amp;gt;oop_tmp_addr(), function()-&amp;gt;oop_tmp_slot_offset());
&lt;br&gt;- &amp;nbsp;process_method_slot(state-&amp;gt;method_addr(), function()-&amp;gt;method_slot_offset());
&lt;br&gt;- &amp;nbsp;process_pc_slot(function()-&amp;gt;pc_slot_offset());
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;state-&amp;gt;oop_tmp_addr(), stack()-&amp;gt;oop_tmp_slot_offset());
&lt;br&gt;+ &amp;nbsp;process_method_slot(state-&amp;gt;method_addr(), stack()-&amp;gt;method_slot_offset());
&lt;br&gt;+ &amp;nbsp;process_pc_slot(stack()-&amp;gt;pc_slot_offset());
&lt;br&gt;&amp;nbsp; &amp;nbsp;end_frame_header();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Local variables
&lt;br&gt;@@ -69,7 +69,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;process_local_slot(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;i,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;state-&amp;gt;local_addr(i),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;function()-&amp;gt;locals_slots_offset() + max_locals() - 1 - i);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;stack()-&amp;gt;locals_slots_offset() + max_locals() - 1 - i);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;end_locals();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkStateScanner.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkStateScanner.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkStateScanner.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -28,15 +28,15 @@
&lt;br&gt;&amp;nbsp;class SharkStateScanner : public SharkTargetInvariants {
&lt;br&gt;&amp;nbsp; protected:
&lt;br&gt;&amp;nbsp; &amp;nbsp;SharkStateScanner(SharkFunction* function)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;: SharkTargetInvariants(function), _function(function) {}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;: SharkTargetInvariants(function), _stack(function-&amp;gt;stack()) {}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;- &amp;nbsp;SharkFunction* _function;
&lt;br&gt;+ &amp;nbsp;SharkStack* _stack;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; protected:
&lt;br&gt;- &amp;nbsp;SharkFunction* function() const
&lt;br&gt;+ &amp;nbsp;SharkStack* stack() const
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _function;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return _stack;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Scan the frame
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.cpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -638,7 +638,7 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(exception, pending_exception_address());
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;Value *result_addr = function()-&amp;gt;CreatePopFrame(type2size[type]);
&lt;br&gt;+ &amp;nbsp;Value *result_addr = stack()-&amp;gt;CreatePopFrame(type2size[type]);
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (type != T_VOID) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pop_result(type)-&amp;gt;generic_value(),
&lt;br&gt;@@ -1648,8 +1648,8 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;// of normal stack order.
&lt;br&gt;&amp;nbsp; &amp;nbsp;int ndims = iter()-&amp;gt;get_dimensions();
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;Value *dimensions = function()-&amp;gt;CreateAddressOfFrameEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp;function()-&amp;gt;stack_slots_offset() + max_stack() - xstack_depth(),
&lt;br&gt;+ &amp;nbsp;Value *dimensions = stack()-&amp;gt;slot_addr(
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stack()-&amp;gt;stack_slots_offset() + max_stack() - xstack_depth(),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ArrayType::get(SharkType::jint_type(), ndims),
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;dimensions&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -1707,9 +1707,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;BasicBlock *lock_acquired = function()-&amp;gt;CreateBlock(&amp;quot;lock_acquired&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;int monitor = num_monitors();
&lt;br&gt;- &amp;nbsp;Value *monitor_addr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= function()-&amp;gt;monitor_addr(monitor);
&lt;br&gt;- &amp;nbsp;Value *monitor_object_addr = function()-&amp;gt;monitor_object_addr(monitor);
&lt;br&gt;- &amp;nbsp;Value *monitor_header_addr = function()-&amp;gt;monitor_header_addr(monitor);
&lt;br&gt;+ &amp;nbsp;Value *monitor_addr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= stack()-&amp;gt;monitor_addr(monitor);
&lt;br&gt;+ &amp;nbsp;Value *monitor_object_addr = stack()-&amp;gt;monitor_object_addr(monitor);
&lt;br&gt;+ &amp;nbsp;Value *monitor_header_addr = stack()-&amp;gt;monitor_header_addr(monitor);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Store the object and mark the slot as live
&lt;br&gt;&amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(lockee, monitor_object_addr);
&lt;br&gt;@@ -1791,9 +1791,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;BasicBlock *lock_released = function()-&amp;gt;CreateBlock(&amp;quot;lock_released&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;int monitor = num_monitors() - 1;
&lt;br&gt;- &amp;nbsp;Value *monitor_addr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= function()-&amp;gt;monitor_addr(monitor);
&lt;br&gt;- &amp;nbsp;Value *monitor_object_addr = function()-&amp;gt;monitor_object_addr(monitor);
&lt;br&gt;- &amp;nbsp;Value *monitor_header_addr = function()-&amp;gt;monitor_header_addr(monitor);
&lt;br&gt;+ &amp;nbsp;Value *monitor_addr &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= stack()-&amp;gt;monitor_addr(monitor);
&lt;br&gt;+ &amp;nbsp;Value *monitor_object_addr = stack()-&amp;gt;monitor_object_addr(monitor);
&lt;br&gt;+ &amp;nbsp;Value *monitor_header_addr = stack()-&amp;gt;monitor_header_addr(monitor);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// If it is recursive then we're already done
&lt;br&gt;&amp;nbsp; &amp;nbsp;Value *disp = builder()-&amp;gt;CreateLoad(monitor_header_addr);
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkTopLevelBlock.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -49,6 +49,13 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return _ciblock;
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;// Function properties
&lt;br&gt;+ public:
&lt;br&gt;+ &amp;nbsp;SharkStack* stack() const
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return function()-&amp;gt;stack();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;// Typeflow properties
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;int index() const
&lt;br&gt;@@ -272,26 +279,6 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp;void check_pending_exception(int action);
&lt;br&gt;&amp;nbsp; &amp;nbsp;void handle_exception(llvm::Value* exception, int action);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Frame anchor
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;void set_last_Java_frame(llvm::Value* value) const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateStore(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;value,
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;builder()-&amp;gt;CreateAddressOfStructEntry(
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;thread(), JavaThread::last_Java_sp_offset(),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::PointerType::getUnqual(SharkType::intptr_type()),
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;last_Java_sp_addr&amp;quot;));
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;void set_last_Java_frame() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;set_last_Java_frame(function()-&amp;gt;CreateLoadZeroFramePointer());
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;void reset_last_Java_frame() const
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;set_last_Java_frame(LLVMValue::intptr_constant(0));
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;// VM calls
&lt;br&gt;&amp;nbsp; private:
&lt;br&gt;&amp;nbsp; &amp;nbsp;llvm::CallInst* call_vm(llvm::Value* &amp;nbsp;callee,
&lt;br&gt;@@ -300,9 +287,9 @@
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; exception_action)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;decache_for_VM_call();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;set_last_Java_frame();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stack()-&amp;gt;CreateSetLastJavaFrame();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;llvm::CallInst *res = builder()-&amp;gt;CreateCall(callee, args_start, args_end);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;reset_last_Java_frame();
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;stack()-&amp;gt;CreateResetLastJavaFrame();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;cache_after_VM_call();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;if (exception_action &amp; EAM_CHECK) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;check_pending_exception(exception_action);
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkType.cpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkType.cpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
&lt;br&gt;@@ -1,180 +0,0 @@
&lt;br&gt;-/*
&lt;br&gt;- * Copyright 1999-2007 Sun Microsystems, Inc. &amp;nbsp;All Rights Reserved.
&lt;br&gt;- * Copyright 2008 Red Hat, Inc.
&lt;br&gt;- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
&lt;br&gt;- *
&lt;br&gt;- * This code is free software; you can redistribute it and/or modify it
&lt;br&gt;- * under the terms of the GNU General Public License version 2 only, as
&lt;br&gt;- * published by the Free Software Foundation.
&lt;br&gt;- *
&lt;br&gt;- * This code is distributed in the hope that it will be useful, but WITHOUT
&lt;br&gt;- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
&lt;br&gt;- * FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the GNU General Public License
&lt;br&gt;- * version 2 for more details (a copy is included in the LICENSE file that
&lt;br&gt;- * accompanied this code).
&lt;br&gt;- *
&lt;br&gt;- * You should have received a copy of the GNU General Public License version
&lt;br&gt;- * 2 along with this work; if not, write to the Free Software Foundation,
&lt;br&gt;- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
&lt;br&gt;- *
&lt;br&gt;- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
&lt;br&gt;- * CA 95054 USA or visit www.sun.com if you need additional information or
&lt;br&gt;- * have any questions.
&lt;br&gt;- *
&lt;br&gt;- */
&lt;br&gt;-
&lt;br&gt;-#include &amp;quot;incls/_precompiled.incl&amp;quot;
&lt;br&gt;-#include &amp;quot;incls/_sharkType.cpp.incl&amp;quot;
&lt;br&gt;-
&lt;br&gt;-using namespace llvm;
&lt;br&gt;-
&lt;br&gt;-const PointerType* &amp;nbsp;SharkType::_cpCacheEntry_type;
&lt;br&gt;-const FunctionType* SharkType::_entry_point_type;
&lt;br&gt;-const FunctionType* SharkType::_osr_entry_point_type;
&lt;br&gt;-const PointerType* &amp;nbsp;SharkType::_itableOffsetEntry_type;
&lt;br&gt;-const PointerType* &amp;nbsp;SharkType::_klass_type;
&lt;br&gt;-const PointerType* &amp;nbsp;SharkType::_methodOop_type;
&lt;br&gt;-const ArrayType* &amp;nbsp; &amp;nbsp;SharkType::_monitor_type;
&lt;br&gt;-const PointerType* &amp;nbsp;SharkType::_oop_type;
&lt;br&gt;-const PointerType* &amp;nbsp;SharkType::_thread_type;
&lt;br&gt;-const PointerType* &amp;nbsp;SharkType::_zeroStack_type;
&lt;br&gt;-
&lt;br&gt;-const Type* SharkType::_to_stackType_tab[T_CONFLICT + 1];
&lt;br&gt;-const Type* SharkType::_to_arrayType_tab[T_CONFLICT + 1];
&lt;br&gt;-
&lt;br&gt;-void SharkType::initialize()
&lt;br&gt;-{
&lt;br&gt;- &amp;nbsp;// VM types
&lt;br&gt;- &amp;nbsp;_cpCacheEntry_type = PointerType::getUnqual(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::getInt8Ty(getGlobalContext()), sizeof(ConstantPoolCacheEntry)));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::Int8Ty, sizeof(ConstantPoolCacheEntry)));
&lt;br&gt;-#endif
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_itableOffsetEntry_type = PointerType::getUnqual(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::getInt8Ty(getGlobalContext()), itableOffsetEntry::size() * wordSize));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::Int8Ty, itableOffsetEntry::size() * wordSize));
&lt;br&gt;-#endif
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_klass_type = PointerType::getUnqual(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::getInt8Ty(getGlobalContext()), sizeof(Klass)));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::Int8Ty, sizeof(Klass)));
&lt;br&gt;-#endif
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_methodOop_type = PointerType::getUnqual(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::getInt8Ty(getGlobalContext()), sizeof(methodOopDesc)));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::Int8Ty, sizeof(methodOopDesc)));
&lt;br&gt;-#endif
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_monitor_type = ArrayType::get(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Type::getInt8Ty(getGlobalContext()),
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;Type::Int8Ty,
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;frame::interpreter_frame_monitor_size() * wordSize);
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_oop_type = PointerType::getUnqual(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::getInt8Ty(getGlobalContext()), sizeof(oopDesc)));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::Int8Ty, sizeof(oopDesc)));
&lt;br&gt;-#endif
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_thread_type = PointerType::getUnqual(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::getInt8Ty(getGlobalContext()), sizeof(JavaThread)));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::Int8Ty, sizeof(JavaThread)));
&lt;br&gt;-#endif
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;_zeroStack_type = PointerType::getUnqual(
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::getInt8Ty(getGlobalContext()), sizeof(ZeroStack)));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;ArrayType::get(Type::Int8Ty, sizeof(ZeroStack)));
&lt;br&gt;-#endif
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;std::vector&amp;lt;const Type*&amp;gt; params;
&lt;br&gt;- &amp;nbsp;params.push_back(methodOop_type());
&lt;br&gt;- &amp;nbsp;params.push_back(intptr_type());
&lt;br&gt;- &amp;nbsp;params.push_back(thread_type());
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp;_entry_point_type = FunctionType::get(Type::getVoidTy(getGlobalContext()), params, false);
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp;_entry_point_type = FunctionType::get(Type::VoidTy, params, false);
&lt;br&gt;-#endif
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;params.clear();
&lt;br&gt;- &amp;nbsp;params.push_back(methodOop_type());
&lt;br&gt;- &amp;nbsp;params.push_back(PointerType::getUnqual(jbyte_type()));
&lt;br&gt;- &amp;nbsp;params.push_back(intptr_type());
&lt;br&gt;- &amp;nbsp;params.push_back(thread_type());
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp;_osr_entry_point_type = FunctionType::get(Type::getVoidTy(getGlobalContext()), params, false);
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp;_osr_entry_point_type = FunctionType::get(Type::VoidTy, params, false);
&lt;br&gt;-#endif
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Java types a) on the stack and in fields, and b) in arrays
&lt;br&gt;- &amp;nbsp;for (int i = 0; i &amp;lt; T_CONFLICT + 1; i++) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;switch (i) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_BOOLEAN:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType_tab[i] = jint_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType_tab[i] = jboolean_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_BYTE:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType_tab[i] = jint_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType_tab[i] = jbyte_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_CHAR:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType_tab[i] = jint_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType_tab[i] = jchar_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_SHORT:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType_tab[i] = jint_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType_tab[i] = jshort_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_INT:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType_tab[i] = jint_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType_tab[i] = jint_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_LONG:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType_tab[i] = jlong_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType_tab[i] = jlong_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_FLOAT:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType_tab[i] = jfloat_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType_tab[i] = jfloat_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_DOUBLE:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType_tab[i] = jdouble_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType_tab[i] = jdouble_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_OBJECT:
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_ARRAY:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType_tab[i] = oop_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_arrayType_tab[i] = oop_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp; &amp;nbsp;case T_ADDRESS:
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;_to_stackType_tab[i] = intptr_type();
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-}
&lt;br&gt;diff -r b3d03017bdef ports/hotspot/src/share/vm/shark/sharkType.hpp
&lt;br&gt;--- a/ports/hotspot/src/share/vm/shark/sharkType.hpp	Wed Nov 11 10:50:38 2009 -0500
&lt;br&gt;+++ b/ports/hotspot/src/share/vm/shark/sharkType.hpp	Wed Nov 11 16:21:16 2009 +0000
&lt;br&gt;@@ -24,178 +24,111 @@
&lt;br&gt;&amp;nbsp; */
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;class SharkType : public AllStatic {
&lt;br&gt;+ private:
&lt;br&gt;+ &amp;nbsp;static SharkContext&amp; context()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return SharkContext::current();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;// Basic types
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;- &amp;nbsp;static void initialize();
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// C types
&lt;br&gt;- public:
&lt;br&gt;+ &amp;nbsp;static const llvm::Type* void_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().void_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::IntegerType* bit_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().bit_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::IntegerType* jbyte_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().jbyte_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::IntegerType* jshort_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().jshort_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::IntegerType* jint_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().jint_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::IntegerType* jlong_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().jlong_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::Type* jfloat_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().jfloat_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::Type* jdouble_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().jdouble_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static const llvm::IntegerType* intptr_type()
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return LP64_ONLY(llvm::Type::getInt64Ty(llvm::getGlobalContext()))
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NOT_LP64 (llvm::Type::getInt32Ty(llvm::getGlobalContext()));
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return LP64_ONLY(llvm::Type::Int64Ty)
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NOT_LP64 (llvm::Type::Int32Ty);
&lt;br&gt;-#endif
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().intptr_type();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// VM types
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* &amp;nbsp;_cpCacheEntry_type;
&lt;br&gt;- &amp;nbsp;static const llvm::FunctionType* _entry_point_type;
&lt;br&gt;- &amp;nbsp;static const llvm::FunctionType* _osr_entry_point_type;
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* &amp;nbsp;_itableOffsetEntry_type;
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* &amp;nbsp;_klass_type;
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* &amp;nbsp;_methodOop_type;
&lt;br&gt;- &amp;nbsp;static const llvm::ArrayType* &amp;nbsp; &amp;nbsp;_monitor_type;
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* &amp;nbsp;_oop_type;
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* &amp;nbsp;_thread_type;
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* &amp;nbsp;_zeroStack_type;
&lt;br&gt;- &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;// Compound types
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* cpCacheEntry_type()
&lt;br&gt;+ &amp;nbsp;static const llvm::PointerType* itableOffsetEntry_type()
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _cpCacheEntry_type;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().itableOffsetEntry_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::PointerType* jniEnv_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().jniEnv_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::PointerType* jniHandleBlock_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().jniHandleBlock_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::PointerType* klass_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().klass_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::PointerType* methodOop_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().methodOop_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::ArrayType* monitor_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().monitor_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::PointerType* oop_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().oop_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::PointerType* thread_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().thread_type();
&lt;br&gt;+ &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;static const llvm::PointerType* zeroStack_type()
&lt;br&gt;+ &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().zeroStack_type();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static const llvm::FunctionType* entry_point_type()
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _entry_point_type;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().entry_point_type();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static const llvm::FunctionType* osr_entry_point_type()
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _osr_entry_point_type;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* itableOffsetEntry_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _itableOffsetEntry_type;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* klass_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _klass_type;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* methodOop_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _methodOop_type;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::ArrayType* monitor_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _monitor_type;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* oop_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _oop_type;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* thread_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _thread_type;
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::PointerType* zeroStack_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _zeroStack_type;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().osr_entry_point_type();
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// Java types
&lt;br&gt;- public:
&lt;br&gt;- &amp;nbsp;static const llvm::IntegerType* jboolean_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::getInt8Ty(llvm::getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::Int8Ty;
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::IntegerType* jbyte_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::getInt8Ty(llvm::getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::Int8Ty;
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::IntegerType* jchar_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::getInt16Ty(llvm::getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::Int16Ty;
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::IntegerType* jshort_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::getInt16Ty(llvm::getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::Int16Ty;
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::IntegerType* jint_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::getInt32Ty(llvm::getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::Int32Ty;
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::IntegerType* jlong_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::getInt64Ty(llvm::getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::Int64Ty;
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::Type* jfloat_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::getFloatTy(llvm::getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::FloatTy;
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;static const llvm::Type* jdouble_type()
&lt;br&gt;- &amp;nbsp;{
&lt;br&gt;-#if SHARK_LLVM_VERSION &amp;gt;= 26
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::getDoubleTy(llvm::getGlobalContext());
&lt;br&gt;-#else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return llvm::Type::DoubleTy;
&lt;br&gt;-#endif
&lt;br&gt;- &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Java types as they appear on the stack and in fields
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;static const llvm::Type* _to_stackType_tab[T_CONFLICT + 1];
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp;// Mappings
&lt;br&gt;&amp;nbsp; public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;static const llvm::Type* to_stackType(BasicType type)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;-#ifdef ASSERT
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (type &amp;lt; 0 || type &amp;gt; T_CONFLICT || _to_stackType_tab[type] == NULL) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;tty-&amp;gt;print_cr(&amp;quot;Unhandled type %s&amp;quot;, type2name(type));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ShouldNotReachHere();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-#endif // ASSERT
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _to_stackType_tab[type];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().to_stackType(type);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static const llvm::Type* to_stackType(ciType* type)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return to_stackType(type-&amp;gt;basic_type());
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;// Java types as they appear in arrays
&lt;br&gt;- private:
&lt;br&gt;- &amp;nbsp;static const llvm::Type* _to_arrayType_tab[T_CONFLICT + 1];
&lt;br&gt;-
&lt;br&gt;- public:
&lt;br&gt;&amp;nbsp; &amp;nbsp;static const llvm::Type* to_arrayType(BasicType type)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;-#ifdef ASSERT
&lt;br&gt;- &amp;nbsp; &amp;nbsp;if (type &amp;lt; 0 || type &amp;gt; T_CONFLICT || _to_arrayType_tab[type] == NULL) {
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;tty-&amp;gt;print_cr(&amp;quot;Unhandled type %s&amp;quot;, type2name(type));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;ShouldNotReachHere();
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-#endif // ASSERT
&lt;br&gt;- &amp;nbsp; &amp;nbsp;return _to_arrayType_tab[type];
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;return context().to_arrayType(type);
&lt;br&gt;&amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;static const llvm::Type* to_arrayType(ciType* type)
&lt;br&gt;&amp;nbsp; &amp;nbsp;{
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Distribution-specific-Packaging-f27646.html&quot; embed=&quot;fixTarget[27646]&quot; target=&quot;_top&quot; &gt;OpenJDK Distribution-specific Packaging&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Native-method-wrapper-generation-tp26304386p26304386.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26304328</id>
	<title>Re: review (M) for 6892658: C2 should optimize some stringbuilder patterns</title>
	<published>2009-11-11T08:36:44Z</published>
	<updated>2009-11-11T08:36:44Z</updated>
	<author>
		<name>Vladimir Kozlov-5</name>
	</author>
	<content type="html">Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; the_MIN_VALUE_string may be should be the_MIN_INT_VALUE_string
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I was trying to mimic Integer.MIN_VALUE. &amp;nbsp;If you want int in there then how about the_min_jint_string?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;Agree with the_min_jint_string.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; c2_globals.hpp
&lt;br&gt;&amp;gt;&amp;gt; I thought we will use experimental for OptimizeStringConcat.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I guess we could. &amp;nbsp;I don't really like experimental much but I'm not completely against it.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;I would prefer experimental.
&lt;br&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; doCall.cpp
&lt;br&gt;&amp;gt;&amp;gt; I saw cases when append methods were not inlined because they were
&lt;br&gt;&amp;gt;&amp;gt; already compiled into &amp;quot;big&amp;quot; compiled method. You call for_late_inline()
&lt;br&gt;&amp;gt;&amp;gt; after ok_to_inline(), so may be we should relax that condition for
&lt;br&gt;&amp;gt;&amp;gt; OptimizeStringConcat case.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; The code doesn't care whether the interesting methods are inlined or not. &amp;nbsp;If the methods would have been inlined then we register a late inline for them. &amp;nbsp;If they wouldn't have been inlined then we tell the DirectCallGenerator to use separate io projs so that we can properly find all the edges if we need to replace it. &amp;nbsp;THe late inlining logic is mainly about giving us the same result if we don't end up performing the optimization.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;You are right. The code delays inlining, not trying to inline.
&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt; Should you check that safepoint has &amp;gt; jvms-&amp;gt;argoff() inputs?:
&lt;br&gt;&amp;gt;&amp;gt; Node* receiver = jvms-&amp;gt;map()-&amp;gt;in(jvms-&amp;gt;argoff() + 1);
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I guess I could but if there aren't enough then the call itself is malformed and we'll die later won't we? &amp;nbsp;Do you think i should?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;Leave it as it is.
&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt; macro.cpp
&lt;br&gt;&amp;gt;&amp;gt; Can you print array only when it is array?:
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; log-&amp;gt;head(&amp;quot;eliminate_allocation %s type='%d'&amp;quot;,
&lt;br&gt;&amp;gt;&amp;gt; + &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; alloc-&amp;gt;is_AllocateArray() ? &amp;quot;array&amp;quot; : &amp;quot;&amp;quot;, log-&amp;gt;identify(tklass-&amp;gt;klass()));
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; the same with &amp;quot;lock&amp;quot;:&amp;quot;unlock&amp;quot;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I could but that's not very good xml. &amp;nbsp;I think I'll just leave that out since arrayness should be discerned from the klass. &amp;nbsp;I'd prefer to leave it as it for lock though.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;br&gt;Leave it as it is since it is better for XML.
&lt;br&gt;&lt;br&gt;Thanks,
&lt;br&gt;Vladimir
&lt;br&gt;&lt;br&gt;&amp;gt; tom
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt;&amp;gt; Vladimir
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Tom Rodriguez wrote:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&quot;http://cr.openjdk.java.net/~never/6892658/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://cr.openjdk.java.net/~never/6892658/&lt;/a&gt;&lt;br&gt;&amp;gt; 
&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Hotspot-Compiler-Development-List-f27707.html&quot; embed=&quot;fixTarget[27707]&quot; target=&quot;_top&quot; &gt;OpenJDK Hotspot Compiler Development List&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/review-%28M%29-for-6892658%3A-C2-should-optimize-some-stringbuilder-patterns-tp26275910p26304328.html" />
</entry>

<entry>
	<id>tag:old.nabble.com,2006:post-26304226</id>
	<title>Re: Workaround for PR icedtea/324</title>
	<published>2009-11-11T08:29:17Z</published>
	<updated>2009-11-11T08:29:17Z</updated>
	<author>
		<name>Gary Benson</name>
	</author>
	<content type="html">Andrew John Hughes wrote:
&lt;br&gt;&amp;gt; 2009/11/11 Gary Benson &amp;lt;&lt;a href=&quot;http://old.nabble.com/user/SendEmail.jtp?type=post&amp;post=26304226&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gbenson@...&lt;/a&gt;&amp;gt;:
&lt;br&gt;&amp;gt; &amp;gt; This commit works around $SUBJECT.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Haha, I like the brevity ;)
&lt;br&gt;&lt;br&gt;I've written a lot of emails today ;)
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;Gary
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;&lt;a href=&quot;http://gbenson.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gbenson.net/&lt;/a&gt;&lt;br&gt;&lt;p&gt;From forum: &lt;a href=&quot;http://old.nabble.com/OpenJDK-Distribution-specific-Packaging-f27646.html&quot; embed=&quot;fixTarget[27646]&quot; target=&quot;_top&quot; &gt;OpenJDK Distribution-specific Packaging&lt;/a&gt;&lt;/p&gt;</content>
	<link rel="alternate" type="text/html" href="http://old.nabble.com/Workaround-for-PR-icedtea-324-tp26304072p26304226.html" />
</entry>

</feed>
