<?xml version="1.0"?>
<!-- RSS generated by Radio UserLand v8.0.8 on Tue, 01 Apr 2003 13:12:57 GMT -->
<rss version="2.0">
	<channel>
		<title>IKVM.NET  Weblog</title>
		<link>http://radio.weblogs.com/0109845/</link>
		<description>The development of a Java VM for .NET</description>
		<language>en</language>
		<copyright>Copyright 2003 Jeroen Frijters</copyright>
		<lastBuildDate>Tue, 01 Apr 2003 13:12:57 GMT</lastBuildDate>
		<docs>http://backend.userland.com/rss</docs>
		<generator>Radio UserLand v8.0.8</generator>
		<managingEditor>blog@jeroen.nu</managingEditor>
		<webMaster>blog@jeroen.nu</webMaster>
		<category domain="http://www.weblogs.com/rssUpdates/changes.xml">rssUpdates</category> 
		<skipHours>
			<hour>23</hour>
			<hour>0</hour>
			<hour>1</hour>
			<hour>2</hour>
			<hour>3</hour>
			<hour>4</hour>
			<hour>5</hour>
			<hour>6</hour>
			</skipHours>
		<cloud domain="radio.xmlstoragesystem.com" port="80" path="/RPC2" registerProcedure="xmlStorageSystem.rssPleaseNotify" protocol="xml-rpc"/>
		<ttl>60</ttl>
		<item>
			<title>Moving</title>
			<link>http://weblog.ikvm.net/</link>
			<description>&lt;P&gt;Please excuse the mess, but we&apos;re moving today ;-)&lt;/P&gt;
&lt;P&gt;New address: &lt;A href=&quot;http://weblog.ikvm.net/&quot;&gt;&lt;a href=&quot;http://weblog.ikvm.net/&quot;&gt;http://weblog.ikvm.net/&lt;/a&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;RSS feed: &lt;A href=&quot;http://weblog.ikvm.net/blogxbrowsing.asmx/GetRss?&quot;&gt;&lt;a href=&quot;http://weblog.ikvm.net/blogxbrowsing.asmx/GetRss&quot;&gt;http://weblog.ikvm.net/blogxbrowsing.asmx/GetRss&lt;/a&gt;?&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I hope to see you on the other side.&lt;A href=&quot;http://weblog.ikvm.net/&quot;&gt;&lt;/A&gt;&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0109845/2003/03/13.html#a91</guid>
			<pubDate>Thu, 13 Mar 2003 12:37:28 GMT</pubDate>
			</item>
		<item>
			<title>Yet another vacation</title>
			<link>http://radio.weblogs.com/0109845/2003/03/05.html#a90</link>
			<description>&lt;P&gt;Tomorrow I&apos;m off to Finland for a week of snow scooter fun :-)&lt;/P&gt;
&lt;P&gt;I&apos;ll be back on the 14th.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0109845/2003/03/05.html#a90</guid>
			<pubDate>Wed, 05 Mar 2003 16:38:35 GMT</pubDate>
			</item>
		<item>
			<title>Hello Mono (2)</title>
			<link>http://radio.weblogs.com/0109845/2003/03/03.html#a89</link>
			<description>&lt;PRE&gt;&lt;FONT size=1&gt;C:&amp;#92;&amp;gt;mono --noinline --share-code c:&amp;#92;ikvm&amp;#92;bin&amp;#92;ikvm.exe hello&lt;BR&gt;** Warning **: cannot find C:&amp;#92;cygwin&amp;#92;home&amp;#92;lalo&amp;#92;go-mono&amp;#92;install&amp;#92;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;etc&amp;#92;mono&amp;#92;machine.config&lt;BR&gt;Trying to load app config file...&lt;BR&gt;Hello World&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P&gt;The latest ikvm binaries together with &lt;A href=&quot;http://go-mono.com/download.html&quot;&gt;Mono 0.21&lt;/A&gt;&amp;nbsp;now run Hello World!&lt;/P&gt;
&lt;P&gt;Many thanks to everyone at Ximian, the Mono contributors and&amp;nbsp;especially Zoltan Varga!&lt;/P&gt;
&lt;P&gt;The --noinline and --share-code options are needed to work around a bug in the current Mono JIT that cause it to call the class constructors to eagerly.&lt;/P&gt;
&lt;P&gt;I&apos;ve updated the &lt;A href=&quot;http://www.frijters.net/ikvm.zip&quot;&gt;source&lt;/A&gt; and &lt;A href=&quot;http://www.frijters.net/ikvmbin.zip&quot;&gt;binaries&lt;/A&gt; snapshots.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0109845/2003/03/03.html#a89</guid>
			<pubDate>Mon, 03 Mar 2003 09:57:22 GMT</pubDate>
			</item>
		<item>
			<title>Undefined behavio[u]r</title>
			<link>http://radio.weblogs.com/0109845/2003/02/28.html#a88</link>
			<description>&lt;P&gt;While fixing bugs in ikvm to get more Mauve tests working (BTW, current results: 224 of 7584 tests failed), I ran across a small but interesting difference between Java and C# (and the underlying bytecodes) in converting floating point numbers to integers.&lt;/P&gt;
&lt;P&gt;Java code:&lt;/P&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;
&lt;P&gt;class&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; Test {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;&amp;nbsp; public&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; &lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;static&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; &lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; main(String[] args) {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; f = Integer.MIN_VALUE;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f -= 5;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println((&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt;)(f + 0.5f));&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Java output: -2147483648 (= Integer.MIN_VALUE)&lt;/P&gt;
&lt;P&gt;C# code:&lt;/P&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;
&lt;P&gt;class&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; Test {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;&amp;nbsp; static&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; &lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; Main() {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; f = &lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt;.MinValue;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f -= 5;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.WriteLine((&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt;)(f + 0.5f));&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;C# output (release build): 2147483644&lt;BR&gt;C# output (debug build): -2147483647&lt;/P&gt;
&lt;P&gt;It turns out that the CIL instruction &lt;I&gt;conv.i4&lt;/I&gt; returns an undefined value when the float value lies outside of the range representable by an 32 bit integer, unlike the JVM&apos;s &lt;I&gt;f2i&lt;/I&gt; instruction which is defined to return either Integer.MIN_VALUE or Integer.MAX_VALUE in that case.&lt;/P&gt;
&lt;P&gt;If you want your .NET code to run consistently, use the &lt;I&gt;conv.ovf.i4&lt;/I&gt; instruction that checks for overflow. In C# this can be done by using a &lt;I&gt;checked&lt;/I&gt; block:&lt;/P&gt;&lt;FONT face=Courier color=#0000ff&gt;
&lt;P&gt;class&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; Test {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;&amp;nbsp; static&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; &lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; Main() {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; f = &lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt;.MinValue;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f -= 5;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; checked &lt;/FONT&gt;&lt;FONT face=Courier size=2&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Console.WriteLine((&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt;)(f + 0.5f));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Now, instead of returning an undefined value,&amp;nbsp;the&amp;nbsp;cast&amp;nbsp;throws a System.OverflowException.&lt;/P&gt;
&lt;P&gt;The JVM designers felt it was very important not to have any undefined or implementation defined behavior. One of the lessons learned from C and C++ is that whenever there is undefined or implementation defined behavior, code will be written that depends on the behavior of a particular platform/compiler. The JVM designers wanted to removed this source of portability problems.&lt;/P&gt;
&lt;P&gt;However, they payed a&amp;nbsp;price in performance for this. A well known example is the case of floating point performance (on x86), which was later &quot;fixed&quot; by relaxing the floating point specification and introducing &lt;I&gt;strictfp&lt;/I&gt;. As &lt;A href=&quot;http://whatisthematrix.warnerbros.com/&quot;&gt;Morpheus&lt;/A&gt; would say: &quot;Welcome to the real world!&quot; (Don Box claims everything in computing can be understood by watching The Matrix enough times).&lt;/P&gt;
&lt;P&gt;Let&apos;s examine the performance of Java&apos;s &lt;I&gt;f2i&lt;/I&gt; compared with .NET&apos;s &lt;I&gt;conv.i4.&lt;/I&gt; Please note that the usual disclaimer wrt (micro) benchmarking applies.&lt;/P&gt;
&lt;P&gt;Here is the loop I used:&lt;/P&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;
&lt;P&gt;float&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; f = SOME_VALUE;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;for&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt;(&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; i = 0; i &amp;lt; 10000000; i++) {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;&amp;nbsp; int&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt; j = (&lt;/FONT&gt;&lt;FONT face=Courier color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT face=Courier size=2&gt;)f;&lt;BR&gt;&amp;nbsp; f = j;&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Timings:&lt;/P&gt;
&lt;P&gt;
&lt;TABLE class=MsoTableGrid style=&quot;BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-table-layout-alt: fixed; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext&quot; cellSpacing=0 cellPadding=0 border=1&gt;
&lt;TBODY&gt;
&lt;TR style=&quot;mso-yfti-irow: 0&quot;&gt;
&lt;TD style=&quot;BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 1.45in; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent&quot; vAlign=top width=139&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;?xml:namespace prefix = o ns = &quot;urn:schemas-microsoft-com:office:office&quot; /&gt;&lt;o:p&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.5in; PADDING-TOP: 0in; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent&quot; vAlign=top width=48&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;o:p&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 99pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-bottom-alt: solid windowtext .5pt&quot; vAlign=top width=132 colSpan=2&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: center&quot; align=center&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;SOME_VALUE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style=&quot;mso-yfti-irow: 1&quot;&gt;
&lt;TD style=&quot;BORDER-RIGHT: #ece9d8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 1.45in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-bottom-alt: solid windowtext .5pt&quot; vAlign=top width=139&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;o:p&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.5in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt&quot; vAlign=top width=48&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;o:p&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; vAlign=top width=60&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: center&quot; align=center&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;0&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; vAlign=top width=72&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: center&quot; align=center&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;+Infinity&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style=&quot;mso-yfti-irow: 2&quot;&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.45in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt&quot; width=139 rowSpan=2&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Sun JDK 1.1 (Symantec JIT)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.5in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; vAlign=top width=48&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Float&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=60&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;600 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=72&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;2000 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style=&quot;mso-yfti-irow: 3&quot;&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.5in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; vAlign=top width=48&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Double*&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=60&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;800 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=72&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;2300 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style=&quot;mso-yfti-irow: 4&quot;&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.45in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt&quot; vAlign=top width=139 rowSpan=2&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Sun J2RE 1.4.1 (Hotspot Client VM)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.5in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; vAlign=top width=48&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Float&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=60&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;600 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=72&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;3800 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style=&quot;mso-yfti-irow: 5&quot;&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.5in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; vAlign=top width=48&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Double*&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=60&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;1100 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=72&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;2600 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style=&quot;mso-yfti-irow: 6&quot;&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.45in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt&quot; width=139 rowSpan=2&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;.NET 1.0&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.5in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; vAlign=top width=48&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Float&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=60&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;500 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=72&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;500 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style=&quot;mso-yfti-irow: 7&quot;&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.5in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; vAlign=top width=48&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Double*&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=60&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;800 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=72&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;800 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style=&quot;mso-yfti-irow: 8&quot;&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 1.45in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt&quot; width=139 rowSpan=2&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;.NET 1.0&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;(checked)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.5in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; vAlign=top width=48&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Float&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=60&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;800 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=72&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;n/a&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style=&quot;mso-yfti-irow: 9; mso-yfti-lastrow: yes&quot;&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.5in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; vAlign=top width=48&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt&quot;&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;Double*&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=60&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;1200 ms&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ece9d8; WIDTH: 0.75in; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt&quot; width=72&gt;
&lt;P class=MsoNormal style=&quot;MARGIN: 0in 0in 0pt; TEXT-ALIGN: right&quot; align=right&gt;&lt;FONT face=&quot;Times New Roman&quot;&gt;n/a&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P&gt;* For the double test, the value was cast to a long instead of an int.&lt;/P&gt;
&lt;P&gt;Let&apos;s look at the code that the Symantec JIT uses to convert a float to an int:&lt;/P&gt;&lt;PRE&gt;01F543F0&amp;nbsp; ftst&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;01F543F2&amp;nbsp; fldcw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; word ptr ds:[1F5FB30h] &lt;BR&gt;01F543F8&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax&amp;nbsp; &lt;BR&gt;01F543F9&amp;nbsp; fistp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dword ptr [esp] &lt;BR&gt;01F543FC&amp;nbsp; fldcw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; word ptr ds:[1F5FB34h] &lt;BR&gt;01F54402&amp;nbsp; pop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax&amp;nbsp; &lt;BR&gt;01F54403&amp;nbsp; cmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,80000000h&lt;BR&gt;01F54408&amp;nbsp; je&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01F5440B &lt;BR&gt;01F5440A&amp;nbsp; ret&amp;nbsp;&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;01F5440B&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax&amp;nbsp; &lt;BR&gt;01F5440C&amp;nbsp; fnstsw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ax&amp;nbsp;&amp;nbsp; &lt;BR&gt;01F5440E&amp;nbsp; sahf&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;01F5440F&amp;nbsp; pop&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax&amp;nbsp; &lt;BR&gt;01F54410&amp;nbsp; jp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01F54416 &lt;BR&gt;01F54412&amp;nbsp; adc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,0FFFFFFFFh &lt;BR&gt;01F54415&amp;nbsp; ret&amp;nbsp;&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;01F54416&amp;nbsp; xor&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,eax &lt;BR&gt;01F54418&amp;nbsp; ret&amp;nbsp;&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;/PRE&gt;
&lt;P&gt;When the JIT compiles an f2i bytecode, it emits a call to this function. I&apos;ve never written any x87 code, so I&apos;m going to have to make this up as I go. Let&apos;s look at each individual instruction:&lt;/P&gt;&lt;PRE&gt;01F543F0  ftst &lt;/PRE&gt;
&lt;P&gt;No idea what the purpose of this is.&lt;/P&gt;&lt;PRE&gt;01F543F2&amp;nbsp; fldcw&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; word ptr ds:[1F5FB30h] &lt;/PRE&gt;
&lt;P&gt;Presumably this is used to mask the invalid-arithmetic-operand exception (#IA) that is generated by &lt;FONT face=Courier&gt;FISTP&lt;/FONT&gt; when it encounters a value that cannot be represented as a 32 bit integer.&lt;/P&gt;&lt;PRE&gt;01F543F8 push eax &lt;/PRE&gt;
&lt;P&gt;Make room on the stack for the integer.&lt;/P&gt;&lt;PRE&gt;01F543F9 fistp dword ptr [esp] &lt;/PRE&gt;
&lt;P&gt;Convert value on the floating stack to integer and store on the regular stack in slot we just created.&lt;/P&gt;&lt;PRE&gt;01F543FC fldcw word ptr ds:[1F5FB34h] &lt;/PRE&gt;
&lt;P&gt;Restore the FPU control word to its normal Java setting.&lt;/P&gt;&lt;PRE&gt;01F54402 pop eax &lt;/PRE&gt;
&lt;P&gt;Load the integer we just created into EAX.&lt;/P&gt;&lt;PRE&gt;01F54403 cmp eax,80000000h&lt;/PRE&gt;
&lt;P&gt;Is it the &lt;EM&gt;integer indefinite value&lt;/EM&gt;? When the #IA exception is masked &lt;FONT face=&quot;Courier, Monospace&quot;&gt;FISTP&lt;/FONT&gt; returns the &lt;EM&gt;integer indefinite value&lt;/EM&gt; for floats that cannot be represented as a 32 bit integer.&lt;/P&gt;&lt;PRE&gt;01F54408 je 01F5440B &lt;/PRE&gt;
&lt;P&gt;If it was the &lt;EM&gt;integer indefinite value&lt;/EM&gt;, continue executing at 01F5440B.&lt;/P&gt;&lt;PRE&gt;01F5440A ret &lt;/PRE&gt;
&lt;P&gt;If not, return.&lt;/P&gt;&lt;PRE&gt;01F5440B push eax &lt;/PRE&gt;
&lt;P&gt;Save the integer indefinite value.&lt;/P&gt;&lt;PRE&gt;01F5440C fnstsw ax &lt;/PRE&gt;
&lt;P&gt;Load the FPU status flags in AX.&lt;/P&gt;&lt;PRE&gt;01F5440E sahf &lt;/PRE&gt;
&lt;P&gt;Load AH into the CPU status flags.&lt;/P&gt;&lt;PRE&gt;01F5440F pop eax &lt;/PRE&gt;
&lt;P&gt;Recover the integer indefinite value.&lt;/P&gt;&lt;PRE&gt;01F54410 jp 01F54416 &lt;/PRE&gt;
&lt;P&gt;If the parity flag is set, the original float was a NaN, so we jump to the code that clears EAX and returns.&lt;/P&gt;&lt;PRE&gt;01F54412 adc eax,0FFFFFFFFh &lt;/PRE&gt;
&lt;P&gt;If the carry flag is set, leave EAX unchanged (i.e. add zero) otherwise add -1. This is a clever way of turning 0x80000000 into either 0x80000000 or 0x7FFFFFFF.&lt;/P&gt;&lt;PRE&gt;01F54415 ret &lt;/PRE&gt;
&lt;P&gt;Return to the caller.&lt;/P&gt;&lt;PRE&gt;01F54416 xor eax,eax &lt;BR&gt;01F54418 ret &lt;/PRE&gt;
&lt;P&gt;Set EAX to zero and return to the caller.&lt;/P&gt;
&lt;P&gt;After analyzing this code, it&apos;s kind of surprising that the &quot;exceptional&quot; case (when the float lies outside of the representable range) is so much slower.&lt;/P&gt;
&lt;P&gt;Conclusion: As usual there is no conclusion, but hopefully we learned something today ;-)&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0109845/2003/02/28.html#a88</guid>
			<pubDate>Fri, 28 Feb 2003 09:56:00 GMT</pubDate>
			</item>
		<item>
			<title>Mauve</title>
			<link>http://radio.weblogs.com/0109845/2003/02/15.html#a87</link>
			<description>&lt;P&gt;Zoltan has been working on running the&amp;nbsp;&lt;A href=&quot;http://sources.redhat.com/mauve/&quot;&gt;Mauve&lt;/A&gt; testsuite on IKVM.NET running on&amp;nbsp;&lt;A href=&quot;http://www.go-mono.com/&quot;&gt;Mono&lt;/A&gt; &amp;nbsp;and I&apos;ve been doing the same on MS .NET.&lt;/P&gt;
&lt;P&gt;Current status on MS .NET: 298 of 7338 tests failed&lt;BR&gt;Current status on Mono: 143 of 3996 tests failed&lt;/P&gt;
&lt;P&gt;Thanks to &lt;A href=&quot;http://www.klomp.org/mark/&quot;&gt;Mark&lt;/A&gt; for getting me started with Mauve and thanks to Zoltan for his excellent work&amp;nbsp;on getting ikvm running on Mono.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0109845/2003/02/15.html#a87</guid>
			<pubDate>Sat, 15 Feb 2003 17:10:50 GMT</pubDate>
			</item>
		<item>
			<title>Getting Eclipse to run</title>
			<link>http://radio.weblogs.com/0109845/2003/02/12.html#a86</link>
			<description>&lt;P&gt;In the comments of the previous item John asked for specific instructions to get &lt;A href=&quot;http://www.eclipse.org/&quot;&gt;Eclipse&lt;/A&gt; running.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Download the most recent IKVM &lt;A href=&quot;http://www.frijters.net/ikvmbin.zip&quot;&gt;binaries&lt;/A&gt; (I just updated them). 
&lt;LI&gt;Download Eclipse. I use build&amp;nbsp;&lt;A href=&quot;http://download.eclipse.org/downloads/drops/S-M3-200211151436/eclipse-SDK-M3-win32.zip&quot;&gt;M3&lt;/A&gt;. 
&lt;LI&gt;Unzip both zip files. Here I will assume that both&amp;nbsp;are unzipped in the root of C: (the ikvm zip creates an ikvm directory and all the Eclipse files end up in an eclipse directory) 
&lt;LI&gt;Download &lt;A href=&quot;http://www.frijters.net/eclipse.bat&quot;&gt;eclipse.bat&lt;/A&gt;, save it in the eclipse directory. 
&lt;LI&gt;Open a Command Prompt window and cd into the eclipse directory and run eclipse.bat&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;This should do the trick. If you have any problems, please let me know.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0109845/2003/02/12.html#a86</guid>
			<pubDate>Wed, 12 Feb 2003 16:19:47 GMT</pubDate>
			</item>
		<item>
			<title>Finally back</title>
			<link>http://radio.weblogs.com/0109845/2003/02/12.html#a85</link>
			<description>&lt;P&gt;I came across a class file that&amp;nbsp;was the equivalent of the following source:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot; size=2&gt;&lt;FONT color=blue&gt;class &lt;/FONT&gt;Test&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=blue&gt;public static final &lt;/FONT&gt;&lt;FONT color=blue&gt;int&lt;/FONT&gt; FOO = 1;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=blue&gt;static&lt;/FONT&gt; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FOO = 1;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This isn&apos;t legal Java, but the class file equivalent is. The FOO field has a &lt;EM&gt;ConstValue&lt;/EM&gt; attribute with the value 1 and then there is&amp;nbsp;code in the static initializer to set the value again. The code in the static initializer isn&apos;t needed and the Java compilers I&apos;ve seen so far don&apos;t emit it.&lt;/P&gt;
&lt;P&gt;Anyway, IKVM handles assignments to (non-blank) final fields&amp;nbsp;by just ignoring the assignment, but my code generator emitted a &lt;EM&gt;nop &lt;/EM&gt;instruction, instead of a &lt;EM&gt;pop &lt;/EM&gt;(because it should consume the value on the stack). Fixed.&lt;/P&gt;
&lt;P&gt;GNU &lt;A href=&quot;http://www.gnu.org/software/classpath/&quot;&gt;Classpath&lt;/A&gt; is about to release version 0.05, so I got their code from cvs and updated my native methods to work with the latest code (the only changes required were for Object[In][Out]putStream, because&amp;nbsp;&lt;A href=&quot;http://www.klomp.org/mark/&quot;&gt;Mark&lt;/A&gt; cleaned those up to use less native code, a nice improvement!). There was still one remaining issue with compiling the classpath code with &lt;EM&gt;ikvmc&lt;/EM&gt;, I had to comment out a line of code in java/nio/charset/Charset.java:&lt;/P&gt;
&lt;P&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&amp;nbsp; &lt;FONT color=blue&gt;public final &lt;/FONT&gt;ByteBuffer encode (String str)&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=blue&gt;return&lt;/FONT&gt; encode (CharBuffer.wrap (str));&lt;BR&gt;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;CharBuffer.wrap takes an CharSequence as its argument, but my java.lang.String doesn&apos;t implement CharSequence (yet). It occurred to me that since it is legal for any reference type to be passed where an interface is expected (see &lt;A href=&quot;http://radio.weblogs.com/0109845/2002/11/30.html&quot;&gt;here&lt;/A&gt;) this code was legal as well (even if String doesn&apos;t implement CharSequence), so I added support to the compiler to insert casts when the arguments on the stack do not match with the expected method arguments (but only for interface references).&lt;/P&gt;
&lt;P&gt;Finally, there is still one patch required to Classpath, because new File(&quot;c://&quot;) hangs:&lt;/P&gt;&lt;PRE&gt;RCS file: /cvsroot/classpath/classpath/java/io/File.java,v&lt;BR&gt;retrieving revision 1.21&lt;BR&gt;diff -r1.21 File.java&lt;BR&gt;334,335c334&lt;BR&gt;&amp;lt; if (!PlatformHelper.isRootDirectory(path))&lt;BR&gt;&amp;lt; while (PlatformHelper.endWithSeparator(path))&lt;BR&gt;---&lt;BR&gt;&amp;gt; while (!PlatformHelper.isRootDirectory(path) &amp;amp;&amp;amp;&lt;BR&gt;&amp;gt;         PlatformHelper.endWithSeparator(path))&lt;/PRE&gt;
&lt;P&gt;You wouldn&apos;t expect this to be a common occurrence, but it turns out that this exact path is constructed by the code that computes the current directory, so if you use ikvm to run a Java application in the root directory of a drive it hangs (without this patch).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0109845/2003/02/12.html#a85</guid>
			<pubDate>Wed, 12 Feb 2003 11:46:52 GMT</pubDate>
			</item>
		<item>
			<title>Hello Mono</title>
			<link>http://radio.weblogs.com/0109845/2003/01/17.html#a84</link>
			<description>&lt;P&gt;Zoltan Varga wrote on the &lt;A href=&quot;https://lists.sourceforge.net/lists/listinfo/ikvm-developers&quot;&gt;ikvm-developers&lt;/A&gt; list:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp; After lots of hacking, I managed to get IKVM to run HelloWorld under mono. This involved lots of changes/bugfixes to IKVM, the mono runtime and the class libs. I intend to submit a big patch to the mono mailing list shortly with the changes.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Great news!&lt;/P&gt;
&lt;P&gt;Unrelated to the above, I checked in a bunch of changes and updated the &lt;A href=&quot;http://www.frijters.net/ikvm.zip&quot;&gt;source&lt;/A&gt; and &lt;A href=&quot;http://www.frijters.net/ikvmbin.zip&quot;&gt;binary&lt;/A&gt; snapshots. I&apos;ll be out of the country for two weeks, so there probably won&apos;t be much activity.&lt;/P&gt;</description>
			<guid>http://radio.weblogs.com/0109845/2003/01/17.html#a84</guid>
			<pubDate>Fri, 17 Jan 2003 20:04:28 GMT</pubDate>
			</item>
		</channel>
	</rss>
