Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / February 2006

Tip: Looking for answers? Try searching our database.

Signum Benchmark revisited

Thread view: 
Roedy Green - 19 Feb 2006 09:58 GMT
This morning I was thinking about how Hotspot knows which code to
optimise. It can very well measure usage except at points were it
calls different methods.

I began to wonder if you ran a single method that took sever hours to
execute would it ever get around to optimising it.  Do you have to
arrange the crucial methods get CALLED many times to trigger the
optimisation?  

This was chewing away in the back of my mind when I received an email
from someone saying they had made a small mod to my benchmark, to
repeat it after the first was over, this time being fairly sure
optimisation was in place from the start.  

Lo! it made a HUGE difference.  Here are some results:

[JRockit 5.0 R26.0]
C:\Java\signum>\Program\Java\jrockit-R26.0.0-jdk1.5.0_04\bin\java
-Xms128m -Xmx128m TestSignum
<><><> Cold Test <><><>
Checking conformance on crucial corner values...
stephan fails at -9223372036854775808 giving 0
sgn fails at 0 giving 1
Checking conformance on 20 million random longs...
Running timing tests with 200000000 iterations per candidate.
nanoseconds : candidate
21413037132 : wibble
21520079228 : piotr
21609720788 : sgn
23680904416 : kobzda
24472920161 : Sun Long.signum
36069783451 : stephan
39119122682 : signOf
42178383565 : signHalf
53662121023 : twoifs
finished
<><><> Warm Test <><><>
Checking conformance on crucial corner values...
stephan fails at -9223372036854775808 giving 0
sgn fails at 0 giving 1
Checking conformance on 20 million random longs...
Running timing tests with 200000000 iterations per candidate.
.........
    nanoseconds : candidate
12086733649 : kobzda
12834817554 : piotr
13030512817 : signOf
15661405291 : wibble
15674467844 : sgn
16053298952 : Sun Long.signum
18162473722 : stephan
25837091585 : signHalf
29743114557 : twoifs
finished

[Sun HotSpot Client 1.5.0_06]
C:\Java\signum>\Program\Java\jre1.5.0_06\bin\java -Xbatch -Xms128m
-Xmx128m Test
<><><> Cold Test <><><>
Checking conformance on crucial corner values...
stephan fails at -9223372036854775808 giving 0
sgn fails at 0 giving 1
Checking conformance on 20 million random longs...
Running timing tests with 200000000 iterations per candidate.
    nanoseconds : candidate
35411795634 : kobzda
36982571808 : piotr
42080198461 : signOf
42749740260 : wibble
43042244196 : twoifs
49368676745 : signHalf
51636447370 : sgn
53070962091 : Sun Long.signum
70221175875 : stephan
finished

<><><> Warm Test <><><>

Checking conformance on crucial corner values...
stephan fails at -9223372036854775808 giving 0
sgn fails at 0 giving 1
Checking conformance on 20 million random longs...
Running timing tests with 200000000 iterations per candidate.
    nanoseconds : candidate
39064700960 : piotr
39122569209 : wibble
39165978358 : kobzda
41321444485 : twoifs
45712750084 : signOf
47069010167 : signHalf
51211896205 : sgn
51227077184 : Sun Long.signum
74266777481 : stephan
finished

JRockit wam        12086733649 : kobzda
Sun client warm 39064700960 : piotr

Not only did the optimal algorithms change over time, the best one
doubled in speed over time on JRockit.

Rockit's best was  3.25 times faster than Sun server's best. This is
surprise for me. I always thought of JRockit as primarily about memory
management and I/O optimisation, not this sort of low level bit
optimisation.

I have posted a fancier version of my own TestSignum program with
prettier results and both cold and warm competitions.  Source is
posted as usual at http://mindprod.com/jgloss/benchmark.html
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

Thomas Hawtin - 19 Feb 2006 11:33 GMT
> This morning I was thinking about how Hotspot knows which code to
> optimise. It can very well measure usage except at points were it
[quoted text clipped - 4 lines]
> arrange the crucial methods get CALLED many times to trigger the
> optimisation?  

The original HotSpot for 1.2 did not do "on stack replacement". I
believe 1.3 did. More of a problem than replacing interpreted code with
compiled code, is replacing compiled code with better compiled code. By
this time optimisation has mashed up the code, so options are limited
for swapping replacement in.

Tom Hawtin
Signature

Unemployed English Java programmer
http://jroller.com/page/tackline/

Roedy Green - 19 Feb 2006 18:57 GMT
On Sun, 19 Feb 2006 09:58:00 GMT, Roedy Green
<my_email_is_posted_on_my_website@munged.invalid> wrote, quoted or
indirectly quoted someone who said :

>Rockit's best was  3.25 times faster than Sun server's best.

oops. that is not correct. JRockit compared itself with Sun -client,
not -server.  I have posted the corrected figures, now in beautiful
HTML tables with a normalised speed index to make comparing easier.
http://mindprod.com/jgloss/benchmark.html

The bottom line, Jet is the best optimiser, with JRockit coming in
about 3/4 of Jet's speed, Java -server at 1/2 Jet's speed and Java
-client at 1/4 Jet's speed.

Piotr, kobzda or signhalf are the best algorithms, depending on
platform. Wibble does best before the optimiser has time to kick in.

This is a very narrow test and should not be taken as indicative of
overall speed in real world situations.

I would like to thank every who participated and especially
congratulate to Peter Kobzda who designed the overall fastest
algorithm and the Jet compiler team whose optimisation skills embedded
in the Jet AOT compiler converted it into the fasted machine code.

If you think you can beat these results, please feel free to submit
more entries.

all the source code is posted.  But here again is Peter's winning
algorithm:

/**
    * alternate to signum for use in compare. Not a true signum,
since it
    * returns ints other than +-1. Where there is any possibility of
overflow,
    * you should compare two longs with < rather than subtraction.
    *
    * @author Peter Kobzda, who came up with it 17 hours before
Wibble, whom I
    *         earlier gave the attribution to.
    * @param diff
    *        number to be collapsed to an int preserving sign and
zeroness.
    *        usually represents the difference of two long.
    * @return sign of diff, some -ve int, 0 or some -ve int.
    */
   public static final int kobzda ( long diff )
       {
    // the beauty of this method is most
    // of the work is in int, not long
    // which works well on 32-bit machines.
     return (int) ( diff >>> 32 ) | (int)diff >>> 1 | (int)diff & 1;
     }

I'd love to see the actual machine code that Jet generated or to
understand more fully why this particular algorithm and compiler did
so much better than the others.

If someone has access to a 64-bit JVM I'd like to see the speed. I
suspect Sun's elegant Long.signum, which does very badly on the
benchmarks will then come in first.
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

Rob Skedgell - 19 Feb 2006 23:28 GMT
[...]
> If someone has access to a 64-bit JVM I'd like to see the speed. I
> suspect Sun's elegant Long.signum, which does very badly on the
> benchmarks will then come in first.

As requested...

[rob@dionysus java]$ java com.mindprod.example.TestSignum "Opteron 244
1793MHz 2048MB" "Linux/2.6.15-git12-6-smp Java HotSpot(TM) 64-Bit
Server VM (build 1.5.0_06-b05, mixed mode)"

---- Opteron 244 1793MHz 2048MB : Linux/2.6.15-git12-6-smp Java
HotSpot(TM) 64-Bit Server VM (build 1.5.0_06-b05, mixed mode) : Cold
----
Checking conformance on crucial corner values...
stephan fails at -9,223,372,036,854,775,808 giving 0
sgn fails at 0 giving 1
Checking conformance on 20,000,000 random longs...
Running timing tests with 200,000,000 iterations per candidate.
.........
     nanoseconds : speed % : candidate
  19,502,732,000 :   60.03 : Sun Long.signum
  19,872,286,000 :   58.91 : wibble
  19,924,763,000 :   58.76 : kobzda
  20,677,618,000 :   56.62 : piotr
  20,915,422,000 :   55.98 : sgn
  22,283,347,000 :   52.54 : signOf
  23,077,739,000 :   50.73 : stephan
  28,219,911,000 :   41.49 : signHalf
  31,601,167,000 :   37.05 : twoifs
finished

---- Opteron 244 1793MHz 2048MB : Linux/2.6.15-git12-6-smp Java
HotSpot(TM) 64-Bit Server VM (build 1.5.0_06-b05, mixed mode) : Warm
----
Checking conformance on crucial corner values...
stephan fails at -9,223,372,036,854,775,808 giving 0
sgn fails at 0 giving 1
Checking conformance on 20,000,000 random longs...
Running timing tests with 200,000,000 iterations per candidate.
.........
     nanoseconds : speed % : candidate
  10,176,818,000 :  115.04 : signHalf
  12,184,700,000 :   96.09 : sgn
  12,421,622,000 :   94.25 : Sun Long.signum
  12,549,649,000 :   93.29 : twoifs
  12,754,350,000 :   91.79 : stephan
  12,767,143,000 :   91.70 : signOf
  13,646,727,000 :   85.79 : piotr
  14,988,245,000 :   78.11 : wibble
  15,074,235,000 :   77.67 : kobzda
finished

Signature

Rob Skedgell <rob+news@nephelococcygia.demon.co.uk>
GnuPG/PGP: 7DA3 1579 C0DD 8748 C05A  B984 E2A2 3234 D14B 6DD7

Roedy Green - 21 Feb 2006 16:12 GMT
On Sun, 19 Feb 2006 23:28:17 +0000, Rob Skedgell
<nospam@nephelococcygia.demon.co.uk> wrote, quoted or indirectly
quoted someone who said :

>As requested...

any chance you could run those again with the latest version and email
me the generated HTML so they will have the new columns and both
elapsed and cpu time.

Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

Rob Skedgell - 21 Feb 2006 19:19 GMT
> On Sun, 19 Feb 2006 23:28:17 +0000, Rob Skedgell
> <nospam@nephelococcygia.demon.co.uk> wrote, quoted or indirectly
[quoted text clipped - 5 lines]
> me the generated HTML so they will have the new columns and both
> elapsed and cpu time.

Done.

Signature

Rob Skedgell <rob+news@nephelococcygia.demon.co.uk>
GnuPG/PGP: 7DA3 1579 C0DD 8748 C05A  B984 E2A2 3234 D14B 6DD7

Roedy Green - 21 Feb 2006 16:12 GMT
On Sun, 19 Feb 2006 23:28:17 +0000, Rob Skedgell
<nospam@nephelococcygia.demon.co.uk> wrote, quoted or indirectly
quoted someone who said :

>      nanoseconds : speed % : candidate
>   19,502,732,000 :   60.03 : Sun Long.signum

aha , just as I predicted. They go from last to first place with
hardware 64-bit longs.

Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

Wibble - 21 Feb 2006 00:36 GMT
> On Sun, 19 Feb 2006 09:58:00 GMT, Roedy Green
> <my_email_is_posted_on_my_website@munged.invalid> wrote, quoted or
[quoted text clipped - 59 lines]
> suspect Sun's elegant Long.signum, which does very badly on the
> benchmarks will then come in first.

Its really funny that Wibble does better then piotr ever.

I typed it in and oops'd it back, since it was really just piotr with
an extra '&' thrown in, which does nothing.

I think that if wibble ever wins its an indicator that the signal to
noise is low in the benchmark.  At best the compiler will just optimize
them into identical code.
Roedy Green - 21 Feb 2006 16:31 GMT
>Its really funny that Wibble does better then piotr ever.
>
>I typed it in and oops'd it back, since it was really just piotr with
>an extra '&' thrown in, which does nothing.

The tool I need to solve many of these mysteries is something that
will let me stop the program in mid flight and examine the tight look
machine code it is executing, a 32-bit Periscope.

I think the biggest problem is simply random noise even in a machine
with nominally no other apps running with obvious background processes
shut down. There may be random elements within the JVM itself. The
amount of noise is much high than I would have predicted.  Maybe is in
the Homeland security microphone and webcam spyware throwing the
numbers off. :-)

I wrecked one benchmark run by clicking on the window, which of course
froze output for a while.

Puzzles for me, why did all code generators do so badly on hilo
generating such bad code and missing the obvious peephole
optimisations. Why did Jet so do well on piotr,  better than my best
hand-coded assembler for the algorithm?  How did Jet do that and what
machine code solution did it find?

I could imagine a very clever optimiser  working using a chess
analogy. It looks for "book openings".It sees a bit of JVM byte code
that matches the piotr-signum gambit (either in method or manually
inlined)  It looks in its book of how to code that algorithm for the
given platform, then plops in the pre-optimised machine code -- or
machine code template that permits things like fine tuning register
usage.

The key is these decisions are made at run time and might require some
statistics gathering, for example are most of the numbers positive,
negative or zero?

That way you can get code tuned to the platform so long as you code
with idioms in the code book.

This may be why up loops go faster than down loops. There are simply
more UP patterns in the play book. the more common idioms are more
likely to get the optimiser teams attention.
Signature

Canadian Mind Products, Roedy Green.
http://mindprod.com Java custom programming, consulting and coaching.

Wibble - 22 Feb 2006 01:38 GMT
>>Its really funny that Wibble does better then piotr ever.
>>
[quoted text clipped - 4 lines]
> will let me stop the program in mid flight and examine the tight look
> machine code it is executing, a 32-bit Periscope.

Pretty much any debugger will let you attach a running process
and dump the assembler.

> ps | grep java
prints process id
> gdb
attach pid
disassemble
Roedy Green - 22 Feb 2006 10:50 GMT
On Tue, 21 Feb 2006 16:31:55 GMT, Roedy Green
<my_email_is_posted_on_my_website@munged.invalid> wrote, quoted or
indirectly quoted someone who said :

>The tool I need to solve many of these mysteries is something that
>will let me stop the program in mid flight and examine the tight look
>machine code it is executing, a 32-bit Periscope.

I have such a tool, at least for an undocumented switch to get it to
squirt out the assembler code. I discovered the secret of how Jet
managed to pull off the piotr algorithm so cleverly.

it uses a lea instruction *load effective address) to shift left,
leave the orgininal intact and put the result in a second register all
in one cycle.  Very clever!!

lea ecx,[eax,eax]  adding eax to itself effectively shifts it left,
and lea allow you to keep the old eax without needing to make an extra
copy.

Years ago Michael Abrash (the guy who wrote most of Microsoft's NT
video drivers) used brute force try all possibilities to find the
fastest possible way to code short sequences i gave him. Once I knew
the "trick" I could generalise it to many another situations. However
it took brute force to discover the basic gambit.

This project has been a bit of a black hole. I originally intended to
spend no more than 15 minutes on it. Now curiosity has me hooked and I
want to figure out just what optimisations you can count on the
compiler doing for you.  I presume some of you too are curious.

Here is the asm for the various algorithms. It is a bit peculiar
assembler. It does not use the usual mnemonics, and it reverses the
Intel order of the operands. It just for study, not for reassembly.

       .file "TestSignum.class"
xds_compiled:

.text
Ltext0:

       .align  4
.global _0com_mindprod_example_TestSignum_clinit
_0com_mindprod_example_TestSignum_clinit:
       pushl   %esi
       pushl   %edi
       addl    $-12, %esp
       cmpl    -3080(%esp), %esp
       pushl   _1java_text_DecimalFormat
       call    JR_NEW
       pushl   %eax
       pushl   _0com_mindprod_example_TestSignum_strtable
       call
_0java_text_DecimalFormat_init__Ljava_lang_String_2___Ljava_text_DecimalFormat_2
       movl    %eax, _4com_mindprod_example_TestSignum_df0
       pushl   _1java_text_DecimalFormat
       call    JR_NEW
       pushl   %eax
       pushl   _0com_mindprod_example_TestSignum_strtable+4
       call
_0java_text_DecimalFormat_init__Ljava_lang_String_2___Ljava_text_DecimalFormat_2
       movl    %eax, _4com_mindprod_example_TestSignum_df2
       pushl   _1java_lang_StringBuilder
       call    JR_NEW24
       movl    %eax, 8(%esp)
       pushl   %eax
       pushl   $3000
       call
_0java_lang_AbstractStringBuilder_init__I___Ljava_lang_AbstractStringBuilder_2
       pushl   $21
       pushl   $1
       pushl   $1
       movl    20(%esp), %eax
       movl    %eax, _4com_mindprod_example_TestSignum_html
       pushl   _1com_excelsior_internal_longTD
       call    X2J_NEW_OPEN
       movl    %eax, 20(%esp)
       leal    16(%eax), %edi
       movl    $$aggregate, %esi
       movl    $42, %ecx
       rep
       movsl
       movl    20(%esp), %ecx
       movl    %ecx,
_4com_mindprod_example_TestSignum_testSuiteValues
       movl    $95238095,
_4com_mindprod_example_TestSignum_suiteIterations
       movl    $1073741824,
_4com_mindprod_example_TestSignum_cpuTimeToBeatInNanos
       movl    $1105341934,
_4com_mindprod_example_TestSignum_cpuTimeToBeatInNanos+4
       subl    $-28, %esp
       popl    %edi
       popl    %esi
       ret
       pushl   $3
       call    JR_unwind_2RS
# -- _0com_mindprod_example_TestSignum_clinit

       .align  4
.global _3com_mindprod_example_TestSignum_access$200
_3com_mindprod_example_TestSignum_access$200:
       pushl   %ebp
       pushl   %ebx
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L0
L9:
       movb    12(%esp), %al
       movl    20(%esp), %ecx
==== Next deref = checknull 12
       movl    12(%ecx), %edx
       movl    16(%esp), %ebx
       movl    %ebx, %ebp
       subl    %edx, %ebp
       testl   %ebp, %ebp
       jle     L1
       movl    _0com_mindprod_example_TestSignum_strtable+116, %edx
       cmpl    %ebp, 12(%edx)
       jl      L2
       je      L3
       pushl   _1java_lang_String
       call    JR_NEW32
       movl    4(%edx), %ebx
       movl    %ebx, 4(%eax)
       movl    8(%edx), %ebx
       movl    %ebx, 8(%eax)
       movl    %ebp, 12(%eax)
       jmp     L4
L3:
       movl    %edx, %eax
L4:
       pushl   %ecx
       pushl   %eax
       pushl   $$$new_obj0
       call    JR_StrConcat
       subl    $-12, %esp
       jmp     L5
L1:
       testb   %al, %al
       je      L6
       cmpl    %ebx, %edx
       jl      L7
       testl   %ebx, %ebx
       jl      L8
       cmpl    %ebx, %edx
       je      L6
       pushl   _1java_lang_String
       call    JR_NEW32
       movl    4(%ecx), %edx
       movl    %edx, 4(%eax)
       movl    8(%ecx), %ebp
       movl    %ebp, 8(%eax)
       movl    %ebx, 12(%eax)
       jmp     L5
L6:
       movl    %ecx, %eax
L5:
       popl    %ebx
       popl    %ebp
       ret     $12
L0:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L9
L2:
       pushl   %ebp
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L8:
       pushl   %ebx
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L7:
       pushl   %ebx
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
       popl    %ebx
       popl    %ebp
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_access$200

       .align  4
.global _3com_mindprod_example_TestSignum_access$100
_3com_mindprod_example_TestSignum_access$100:
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L10
L11:
       movl    _4com_mindprod_example_TestSignum_df2, %eax
       ret
L10:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L11
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_access$100

       .align  4
.global _3com_mindprod_example_TestSignum_access$000
_3com_mindprod_example_TestSignum_access$000:
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L12
L13:
       movl    _4com_mindprod_example_TestSignum_df0, %eax
       ret
L12:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L13
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_access$000

       .align  4
.global _3com_mindprod_example_TestSignum_wibble
_3com_mindprod_example_TestSignum_wibble:
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L14
L15:
       movl    4(%esp), %eax
       movl    %eax, %ecx
       andl    $1, %ecx
       shrl    $1, %eax
       andl    $2147483647, %eax
       orl     8(%esp), %eax
       orl     %ecx, %eax
       ret     $8
L14:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L15
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_wibble

       .align  4
.global _3com_mindprod_example_TestSignum_twoifs
_3com_mindprod_example_TestSignum_twoifs:
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L16
L21:
       movl    4(%esp), %eax
       cmpl    $0, 8(%esp)
       jge     L17
       movl    $-1, %eax
       jmp     L18
L17:
       jne     L19
       testl   %eax, %eax
       je      L20
L19:
       movl    $1, %eax
       jmp     L18
L20:
       xorl    %eax, %eax
L18:
       ret     $8
L16:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L21
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_twoifs

       .align  4
.global _3com_mindprod_example_TestSignum_sunSignum
_3com_mindprod_example_TestSignum_sunSignum:
       pushl   %ebp
       pushl   %ebx
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L22
L23:
       pushl   $63
       movl    20(%esp), %ecx
       pushl   %ecx
       movl    20(%esp), %ebx
       pushl   %ebx
       call    JR_lshr
       movl    %eax, %ebp
       pushl   $63
       negl    %ebx
       adcl    $0, %ecx
       negl    %ecx
       pushl   %ecx
       pushl   %ebx
       call    JR_lushr
       orl     %ebp, %eax
       popl    %ebx
       popl    %ebp
       ret     $8
L22:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L23
       popl    %ebx
       popl    %ebp
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_sunSignum

       .align  4
.global _3com_mindprod_example_TestSignum_stephan
_3com_mindprod_example_TestSignum_stephan:
       pushl   %ebp
       pushl   %ebx
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L24
L25:
       pushl   $63
       movl    20(%esp), %ecx
       movl    16(%esp), %ebx
       movl    %ebx, %eax
       negl    %eax
       movl    %ecx, %edx
       adcl    $0, %edx
       negl    %edx
       pushl   %edx
       pushl   %eax
       call    JR_lshr
       pushl   $63
       movl    %eax, %ebp
       negl    %ebp
       pushl   %ecx
       pushl   %ebx
       call    JR_lshr
       negl    %eax
       subl    %eax, %ebp
       movl    %ebp, %eax
       popl    %ebx
       popl    %ebp
       ret     $8
L24:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L25
       popl    %ebx
       popl    %ebp
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_stephan

       .align  4
.global _3com_mindprod_example_TestSignum_signOf
_3com_mindprod_example_TestSignum_signOf:
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L26
L29:
       movl    8(%esp), %eax
       movl    4(%esp), %ecx
       orl     %eax, %ecx
       je      L27
       orl     $1, %eax
       jmp     L28
L27:
       xorl    %eax, %eax
L28:
       ret     $8
L26:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L29
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_signOf

       .align  4
.global _3com_mindprod_example_TestSignum_signHalf
_3com_mindprod_example_TestSignum_signHalf:
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L30
L33:
       movl    4(%esp), %eax
       movl    8(%esp), %ecx
       testl   %ecx, %ecx
       jl      L31
       jne     L32
       testl   %eax, %eax
       je      L31
L32:
       movl    $1, %ecx
L31:
       movl    %ecx, %eax
       ret     $8
L30:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L33
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_signHalf

       .align  4
.global _3com_mindprod_example_TestSignum_sgn
_3com_mindprod_example_TestSignum_sgn:
       pushl   %ebp
       pushl   %ebx
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L34
L35:
       pushl   $63
       movl    20(%esp), %ecx
       pushl   %ecx
       movl    20(%esp), %ebx
       pushl   %ebx
       call    JR_lshr
       movl    %eax, %ebp
       pushl   $63
       notl    %ecx
       pushl   %ecx
       notl    %ebx
       pushl   %ebx
       call    JR_lushr
       orl     %ebp, %eax
       popl    %ebx
       popl    %ebp
       ret     $8
L34:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L35
       popl    %ebx
       popl    %ebp
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_sgn

       .align  4
.global _3com_mindprod_example_TestSignum_piotr
_3com_mindprod_example_TestSignum_piotr:
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L36
L37:
       movl    4(%esp), %eax
       leal    (%eax, %eax), %ecx
       orl     %ecx, %eax
       shrl    $1, %eax
       orl     8(%esp), %eax
       ret     $8
L36:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L37
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_piotr

       .align  4
.global _3com_mindprod_example_TestSignum_main
_3com_mindprod_example_TestSignum_main:
       pushl   %ebp
       pushl   %ebx
       pushl   %esi
       pushl   %edi
       addl    $-64, %esp
       cmpl    -3088(%esp), %esp
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L38
L88:
       movl    84(%esp), %ecx
==== Next deref = checknull 8
       cmpl    $3, 8(%ecx)
       jne     L39
       movl    16(%ecx), %edi
==== Next deref = checknull 8
       movl    8(%edi), %edx
       movl    4(%edi), %ebx
       movl    12(%edi), %eax
       movl    %eax, 44(%esp)
       testl   %eax, %eax
       jle     L40
==== Next deref = checknull 0
       cmpl    %ebx, (%ebx)
       leal    16(%ebx), %eax
       cmpw    $32, (%eax, %edx, 2)
       ja      L40
       xorl    %ebp, %ebp
       jmp     L41
       .align  4
L43:
       leal    (%edx, %ebp), %esi
       cmpw    $32, (%eax, %esi, 2)
       ja      L42
L41:
       addl    $1, %ebp
       cmpl    %ebp, 44(%esp)
       jg      L43
       jmp     L42
L40:
       xorl    %ebp, %ebp
L42:
       movl    44(%esp), %eax
       movl    %eax, 24(%esp)
       jmp     L44
       .align  4
L46:
       movl    24(%esp), %esi
       addl    $-1, %esi
==== Next deref = checknull 0
       cmpl    %ebx, (%ebx)
       leal    (%edx, %esi), %eax
       cmpw    $32, 16(%ebx, %eax, 2)
       ja      L45
       movl    %esi, 24(%esp)
L44:
       cmpl    %ebp, 24(%esp)
       jg      L46
L45:
       testl   %ebp, %ebp
       jle     L47
       movl    24(%esp), %esi
       cmpl    %esi, 44(%esp)
       jge     L48
       jmp     L49
L47:
       movl    44(%esp), %eax
       cmpl    %eax, 24(%esp)
       jge     L50
       testl   %ebp, %ebp
       jne     L51
L48:
       cmpl    %ebp, 24(%esp)
       jl      L52
       testl   %ebp, %ebp
       jne     L53
       movl    24(%esp), %esi
       cmpl    %esi, 44(%esp)
       je      L50
L53:
       pushl   _1java_lang_String
       call    JR_NEW32
       movl    %eax, %edi
       movl    %ebx, 4(%edi)
       addl    %ebp, %edx
       movl    %edx, 8(%edi)
       movl    24(%esp), %eax
       subl    %ebp, %eax
       movl    %eax, 12(%edi)
L50:
       movl    %edi, 60(%esp)
       movl    20(%ecx), %esi
==== Next deref = checknull 8
       movl    8(%esi), %edx
       movl    4(%esi), %ebx
       movl    12(%esi), %eax
       movl    %eax, 20(%esp)
       testl   %eax, %eax
       jle     L54
==== Next deref = checknull 0
       cmpl    %ebx, (%ebx)
       leal    16(%ebx), %eax
       cmpw    $32, (%eax, %edx, 2)
       ja      L54
       movl    $0, 48(%esp)
       jmp     L55
       .align  4
L57:
       movl    48(%esp), %ebp
       addl    %edx, %ebp
       cmpw    $32, (%eax, %ebp, 2)
       ja      L56
L55:
       addl    $1, 48(%esp)
       movl    20(%esp), %ebp
       cmpl    %ebp, 48(%esp)
       jl      L57
       jmp     L56
L54:
       movl    $0, 48(%esp)
L56:
       movl    20(%esp), %eax
       movl    %eax, 28(%esp)
       jmp     L58
       .align  4
L60:
       addl    $-1, %ebp
==== Next deref = checknull 0
       cmpl    %ebx, (%ebx)
       leal    (%edx, %ebp), %eax
       cmpw    $32, 16(%ebx, %eax, 2)
       ja      L59
       movl    %ebp, 28(%esp)
L58:
       movl    28(%esp), %ebp
       cmpl    %ebp, 48(%esp)
       jl      L60
L59:
       cmpl    $0, 48(%esp)
       jle     L61
       movl    28(%esp), %ebp
       cmpl    %ebp, 20(%esp)
       jge     L62
       jmp     L63
L61:
       movl    20(%esp), %eax
       cmpl    %eax, 28(%esp)
       jge     L64
       cmpl    $0, 48(%esp)
       jne     L65
L62:
       movl    48(%esp), %ebp
       cmpl    %ebp, 28(%esp)
       jl      L66
       testl   %ebp, %ebp
       jne     L67
       movl    28(%esp), %ebp
       cmpl    %ebp, 20(%esp)
       je      L64
L67:
       pushl   _1java_lang_String
       call    JR_NEW32
       movl    %eax, %esi
       movl    %ebx, 4(%esi)
       addl    48(%esp), %edx
       movl    %edx, 8(%esi)
       movl    28(%esp), %eax
       subl    48(%esp), %eax
       movl    %eax, 12(%esi)
L64:
       movl    %esi, 56(%esp)
       movl    24(%ecx), %ebp
==== Next deref = checknull 8
       movl    8(%ebp), %edx
       movl    4(%ebp), %ecx
       movl    12(%ebp), %eax
       movl    %eax, 12(%esp)
       testl   %eax, %eax
       jle     L68
==== Next deref = checknull 0
       cmpl    %ecx, (%ecx)
       leal    16(%ecx), %eax
       cmpw    $32, (%eax, %edx, 2)
       ja      L68
       movl    $0, 40(%esp)
       jmp     L69
       .align  4
L71:
       movl    40(%esp), %ebx
       addl    %edx, %ebx
       cmpw    $32, (%eax, %ebx, 2)
       ja      L70
L69:
       addl    $1, 40(%esp)
       movl    12(%esp), %ebx
       cmpl    %ebx, 40(%esp)
       jl      L71
       jmp     L70
L68:
       movl    $0, 40(%esp)
L70:
       movl    12(%esp), %eax
       movl    %eax, 32(%esp)
       jmp     L72
       .align  4
L74:
       addl    $-1, %ebx
==== Next deref = checknull 0
       cmpl    %ecx, (%ecx)
       leal    (%edx, %ebx), %eax
       cmpw    $32, 16(%ecx, %eax, 2)
       ja      L73
       movl    %ebx, 32(%esp)
L72:
       movl    32(%esp), %ebx
       cmpl    %ebx, 40(%esp)
       jl      L74
L73:
       cmpl    $0, 40(%esp)
       jle     L75
       movl    32(%esp), %ebx
       cmpl    %ebx, 12(%esp)
       jge     L76
       jmp     L77
L75:
       movl    12(%esp), %eax
       cmpl    %eax, 32(%esp)
       jge     L78
       cmpl    $0, 40(%esp)
       jne     L79
L76:
       movl    40(%esp), %ebx
       cmpl    %ebx, 32(%esp)
       jl      L80
       testl   %ebx, %ebx
       jne     L81
       movl    32(%esp), %ebx
       cmpl    %ebx, 12(%esp)
       je      L78
L81:
       pushl   _1java_lang_String
       call    JR_NEW32
       movl    %eax, %ebp
       movl    %ecx, 4(%ebp)
       addl    40(%esp), %edx
       movl    %edx, 8(%ebp)
       movl    32(%esp), %eax
       subl    40(%esp), %eax
       movl    %eax, 12(%ebp)
L78:
       movl    _4com_mindprod_example_TestSignum_html, %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+212
       pushl   _0com_mindprod_example_TestSignum_strtable+208
       pushl   %ebp
       pushl   _0com_mindprod_example_TestSignum_strtable+204
       pushl   _0com_mindprod_example_TestSignum_strtable+200
       pushl   %esi
       pushl   _0com_mindprod_example_TestSignum_strtable+196
       pushl   _0com_mindprod_example_TestSignum_strtable+192
       pushl   %edi
       pushl   _0com_mindprod_example_TestSignum_strtable+188
       pushl   $$$new_obj1
       movl    %ebp, 96(%esp)
       call    JR_StrConcat
       movl    %eax, 80(%esp)
==== Next deref = checknull 0
       cmpl    %ebx, (%ebx)
       subl    $-44, %esp
       testl   %eax, %eax
       jne     L82
       movl    _0java_lang_AbstractStringBuilder_strtable, %edx
       movl    52(%edx), %eax
       movl    %eax, 36(%esp)
==== Next deref = checknull 0
       cmpl    %eax, (%eax)
L82:
       movl    36(%esp), %ecx
       movl    12(%ecx), %eax
       movl    %eax, 4(%esp)
       testl   %eax, %eax
       je      L83
       movl    4(%ebx), %edx
==== Next deref = checknull 8
       movl    8(%edx), %eax
       movl    8(%ebx), %ecx
       movl    %ecx, 8(%esp)
       movl    8(%esp), %ecx
       addl    4(%esp), %ecx
       movl    %ecx, 16(%esp)
       cmpl    %eax, %ecx
       jle     L84
       leal    (%eax, %eax), %ecx
       addl    $2, %ecx
       jns     L85
       movl    $2147483647, %ecx
       jmp     L86
L85:
       cmpl    %ecx, 16(%esp)
       jle     L86
       movl    16(%esp), %ecx
L86:
       pushl   %edx
       pushl   %ecx
       pushl   16(%esp)
       pushl   $0
       call    _3com_excelsior_MemoryManager_Heap_expandCharArray
       movl    %eax, 4(%ebx)
L84:
       pushl   36(%esp)
       pushl   4(%ebx)
       pushl   8(%ebx)
       call    _3com_excelsior_util_Chars_unsafeGetChars
       movl    16(%esp), %eax
       movl    %eax, 8(%ebx)
L83:
       pushl   %edi
       pushl   %esi
       pushl   %ebp
       pushl   _0com_mindprod_example_TestSignum_strtable+16
       call    _3com_mindprod_example_TestSignum_trial
       movl    _1java_lang_System, %eax
       cmpl    $0, 52(%eax)
       je      L87
L89:
       movl    _4java_lang_System_out, %ecx
       pushl   (%ecx)
       pushl   _0com_mindprod_example_TestSignum_strtable+20
       movl    (%ecx), %edx
==== Next deref = checknull -4
       movl    -4(%edx), %eax
       call    *256(%eax)
       pushl   $0
       pushl   $10000
       call    _3java_lang_Thread_sleep__J___V
L92:
       pushl   %edi
       pushl   %esi
       pushl   %ebp
       pushl   _0com_mindprod_example_TestSignum_strtable+28
       call    _3com_mindprod_example_TestSignum_trial
       movl    _4java_lang_System_err, %eax
       pushl   (%eax)
       pushl   _4com_mindprod_example_TestSignum_html
       movl    (%eax), %ecx
==== Next deref = checknull -4
       movl    -4(%ecx), %edx
       call    *260(%edx)
       movl    _4java_lang_System_out, %eax
       pushl   (%eax)
       pushl   _0com_mindprod_example_TestSignum_strtable+32
       movl    (%eax), %ecx
==== Next deref = checknull -4
       movl    -4(%ecx), %edx
       call    *256(%edx)
       subl    $-64, %esp
       popl    %edi
       popl    %esi
       popl    %ebx
       popl    %ebp
       ret     $4
L38:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L88
L49:
       pushl   %esi
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L52:
       movl    24(%esp), %eax
       subl    %ebp, %eax
       pushl   %eax
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L51:
       pushl   %ebp
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L63:
       pushl   %ebp
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L66:
       movl    28(%esp), %eax
       subl    %ebp, %eax
       pushl   %eax
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L65:
       pushl   48(%esp)
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L77:
       pushl   %ebx
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L80:
       movl    32(%esp), %eax
       subl    %ebx, %eax
       pushl   %eax
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L79:
       pushl   40(%esp)
       pushl
$_0java_lang_StringIndexOutOfBoundsException_init__I___Ljava_lang_StringIndexOutOfBoundsException_2
       pushl   TDINDEX(_1java_lang_StringIndexOutOfBoundsException)
       call    JR_ThrowNewThrowable_I
L87:
       pushl   TDINDEX(_1java_lang_System)
       call    JR_Clinit
       jmp     L89
       movl    fs:[0], %eax
       movl    8(%eax), %ecx
       movl    4(%ecx), %edx
       movl    $0, 4(%ecx)
       movl    _1java_lang_InterruptedException, %eax
       movl    -4(%edx), %ebx
       cmpl    %eax, 120(%ebx)
       je      L90
       movl    %edx, 4(%ecx)
       jmp     L91
L90:
       movl    _4java_lang_System_out, %eax
       pushl   (%eax)
       pushl   _0com_mindprod_example_TestSignum_strtable+24
       movl    (%eax), %ecx
==== Next deref = checknull -4
       movl    -4(%ecx), %eax
       call    *256(%eax)
       movl    60(%esp), %edi
       movl    56(%esp), %esi
       movl    52(%esp), %ebp
       jmp     L92
L39:
       pushl   _0com_mindprod_example_TestSignum_strtable+12
       pushl
$_0java_lang_IllegalArgumentException_init__Ljava_lang_String_2___Ljava_lang_IllegalArgumentException_2
       pushl   TDINDEX(_1java_lang_IllegalArgumentException)
       call    JR_ThrowNewThrowable_String
L91:
       pushl   $16
       call    JR_unwind_4RS
# -- _3com_mindprod_example_TestSignum_main

       .align  4
.global _3com_mindprod_example_TestSignum_lohi32
_3com_mindprod_example_TestSignum_lohi32:
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L93
L95:
       movl    4(%esp), %eax
       movl    8(%esp), %ecx
       testl   %ecx, %ecx
       je      L94
       movl    %ecx, %eax
L94:
       ret     $8
L93:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L95
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_lohi32

       .align  4
.global _3com_mindprod_example_TestSignum_kobzda
_3com_mindprod_example_TestSignum_kobzda:
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L96
L97:
       movl    4(%esp), %eax
       movl    %eax, %ecx
       andl    $1, %ecx
       shrl    $1, %eax
       orl     8(%esp), %eax
       orl     %ecx, %eax
       ret     $8
L96:
       pushl   TDINDEX(_1com_mindprod_example_TestSignum)
       call    JR_Clinit
       jmp     L97
       call    JR_unwind
# -- _3com_mindprod_example_TestSignum_kobzda

       .align  4
.global _3com_mindprod_example_TestSignum_trial
_3com_mindprod_example_TestSignum_trial:
       pushl   %ebp
       pushl   %ebx
       pushl   %esi
       pushl   %edi
       addl    $-124, %esp
       cmpl    -3112(%esp), %esp
       cmpl    $0, _1com_mindprod_example_TestSignum+52
       je      L98
L126:
       movl    _1java_lang_System, %eax
       cmpl    $0, 52(%eax)
       je      L99
L127:
       movl    _4java_lang_System_out, %ecx
       pushl   (%ecx)
       movl    (%ecx), %edx
==== Next deref = checknull -4
       movl    -4(%edx), %eax
       call    *284(%eax)
       movl    _4java_lang_System_out, %ecx
       movl    (%ecx), %edx
       pushl   _0com_mindprod_example_TestSignum_strtable+48
       movl    148(%esp), %edi
       pushl   %edi
       pushl   _0com_mindprod_example_TestSignum_strtable+44
       pushl   160(%esp)
       pushl   _0com_mindprod_example_TestSignum_strtable+40
       movl    172(%esp), %esi
       pushl   %esi
       pushl   _0com_mindprod_example_TestSignum_strtable+36
       pushl   $$$new_obj2
       call    JR_StrConcat
       pushl   %edx
       pushl   %eax
==== Next deref = checknull -4
       movl    -4(%edx), %eax
       call    *256(%eax)
       movl    _4com_mindprod_example_TestSignum_html, %ebp
==== Next deref = checknull 0
       cmpl    %edi, (%edi)
       pushl   %edi
       pushl   _0com_mindprod_example_TestSignum_strtable+124
       call    _2java_lang_String_equalsIgnoreCase
       subl    $-32, %esp
       testb   %al, %al
       je      L100
       movl    _0com_mindprod_example_TestSignum_strtable+128, %ecx
       jmp     L101
L100:
       movl    _0com_mindprod_example_TestSignum_strtable+132, %ecx
L101:
       pushl   %edi
       pushl   _0com_mindprod_example_TestSignum_strtable+164
       movl    %ecx, 120(%esp)
       call    _2java_lang_String_equalsIgnoreCase
       movl    112(%esp), %ecx
       testb   %al, %al
       je      L102
       movl    _0com_mindprod_example_TestSignum_strtable+168, %edx
       movl    %edx, %ebx
       jmp     L103
L102:
       movl    _0com_mindprod_example_TestSignum_strtable+172, %edx
       movl    %edx, %ebx
L103:
       movl    %ecx, 112(%esp)
       call
_3com_mindprod_example_TestSignum$BenchmarkMeasurement_toHTMLHeading
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   _0com_mindprod_example_TestSignum_strtable+184
       pushl   _0com_mindprod_example_TestSignum_strtable+180
       pushl   %edi
       pushl   _0com_mindprod_example_TestSignum_strtable+176
       pushl   %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+160
       pushl   _0com_mindprod_example_TestSignum_strtable+156
       pushl   180(%esp)
       pushl   _0com_mindprod_example_TestSignum_strtable+152
       pushl   _0com_mindprod_example_TestSignum_strtable+148
       pushl   %esi
       pushl   _0com_mindprod_example_TestSignum_strtable+144
       pushl   _0com_mindprod_example_TestSignum_strtable+140
       pushl   212(%esp)
       pushl   _0com_mindprod_example_TestSignum_strtable+136
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+120
       pushl   $$$new_obj3
       call    JR_StrConcat
==== Next deref = checknull 0
       cmpl    %ebp, (%ebp)
       subl    $-76, %esp
       pushl   %ebp
       pushl   %eax
       call
_2java_lang_AbstractStringBuilder_append__Ljava_lang_String_2___Ljava_lang_AbstractStringBuilder_2
       movl    _4java_lang_System_out, %eax
       pushl   (%eax)
       pushl   _0com_mindprod_example_TestSignum_strtable+52
       movl    (%eax), %ecx
==== Next deref = checknull -4
       movl    -4(%ecx), %edx
       call    *256(%edx)
       movl    _4com_mindprod_example_TestSignum_testSuiteValues,
%edi
==== Next deref = checknull 8
       movl    8(%edi), %eax
       movl    %eax, 20(%esp)
       testl   %eax, %eax
       jle     L104
       movl    _0com_mindprod_example_TestSignum_strtable+260, %esi
       testb   $1, %al
       je      L105
       movl    20(%edi), %ebp
       pushl   %ebp
       movl    16(%edi), %ebx
       pushl   %ebx
       call    _3com_mindprod_example_TestSignum_kobzda
       pushl   %eax
       pushl   %ebp
       pushl   %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+224
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       pushl   %ebp
       pushl   %ebx
       call    _3com_mindprod_example_TestSignum_lohi32
       pushl   %eax
       pushl   %ebp
       pushl   %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+228
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       pushl   %ebp
       pushl   %ebx
       call    _3com_mindprod_example_TestSignum_piotr
       pushl   %eax
       pushl   %ebp
       pushl   %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+232
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       pushl   %ebp
       pushl   %ebx
       call    _3com_mindprod_example_TestSignum_sgn
       pushl   %eax
       pushl   %ebp
       pushl   %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+236
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       pushl   %ebp
       pushl   %ebx
       call    _3com_mindprod_example_TestSignum_signHalf
       pushl   %eax
       pushl   %ebp
       pushl   %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+240
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       pushl   %ebp
       pushl   %ebx
       call    _3com_mindprod_example_TestSignum_signOf
       pushl   %eax
       pushl   %ebp
       pushl   %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+244
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       pushl   %ebp
       pushl   %ebx
       call    _3com_mindprod_example_TestSignum_stephan
       pushl   %eax
       pushl   %ebp
       pushl   %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+248
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       pushl   %ebp
       pushl   %ebx
       call    _3java_lang_Long_signum
       pushl   %eax
       pushl   %ebp
       pushl   %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+252
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       pushl   %ebp
       pushl   %ebx
       call    _3com_mindprod_example_TestSignum_twoifs
       pushl   %eax
       pushl   %ebp
       pushl   %ebx
       pushl   _0com_mindprod_example_TestSignum_strtable+256
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       pushl   %ebp
       pushl   %ebx
       call    _3com_mindprod_example_TestSignum_wibble
       pushl   %eax
       pushl   %ebp
       pushl   %ebx
       pushl   %esi
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       cmpl    $1, 20(%esp)
       je      L104
       movl    $1, %ebp
       jmp     L106
L105:
       xorl    %ebp, %ebp
       .align  4
L106:
       movl    20(%edi, %ebp, 8), %ebx
       pushl   %ebx
       movl    16(%edi, %ebp, 8), %ecx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_kobzda
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+224
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_lohi32
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+228
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_piotr
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+232
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_sgn
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+236
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_signHalf
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+240
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_signOf
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+244
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_stephan
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+248
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3java_lang_Long_signum
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+252
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       call    _3com_mindprod_example_TestSignum_twoifs
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+256
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_wibble
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   %esi
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    28(%edi, %ebp, 8), %ebx
       pushl   %ebx
       movl    24(%edi, %ebp, 8), %ecx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_kobzda
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+224
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_lohi32
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+228
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_piotr
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+232
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_sgn
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+236
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_signHalf
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+240
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_signOf
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+244
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_stephan
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+248
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3java_lang_Long_signum
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+252
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       call    _3com_mindprod_example_TestSignum_twoifs
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   _0com_mindprod_example_TestSignum_strtable+256
       movl    %ecx, 128(%esp)
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       movl    112(%esp), %ecx
       pushl   %ebx
       pushl   %ecx
       movl    %ecx, 120(%esp)
       call    _3com_mindprod_example_TestSignum_wibble
       movl    112(%esp), %ecx
       pushl   %eax
       pushl   %ebx
       pushl   %ecx
       pushl   %esi
       call
_3com_mindprod_example_TestSignum_checkConformanceOfOneValue
       addl    $2, %ebp
       cmpl    %ebp, 20(%esp)
       jg      L106
L104:
       movl    _1java_util_Random, %esi
       movl    %esi, 36(%esp)
       movl    _4java_lang_System_out, %eax
       movl    (%eax), %ebp
       movl    _0com_mindprod_example_TestSignum_strtable+56, %ebx
       movl    _4com_mindprod_example_TestSignum_df0, %edi
==== Next deref = checknull 0
       cmpl    %edi, (%edi)
       pushl   _1java_lang_StringBuffer
       call    JR_NEW24
       pushl   %eax
       call _0java_lang_StringBuffer_init___Ljava_lang_StringBuffer_2
       movl    _1java_text_DontCareFieldPosition, %ecx
       cmpl    $0, 52(%ecx)
       je      L107
L128:
       pushl   %edi
       pushl   $0
       pushl   $20000000
       pushl   %eax
       movl    _4java_text_DontCareFieldPosition_INSTANCE, %edx
       pushl   (%edx)
       movl    -4(%edi), %eax
       call    *320(%eax)
==== Next deref = checknull 0
       cmpl    %eax, (%eax)
       pushl   %eax
       call    _2java_lang_StringBuffer_toString
       pushl   _0com_mindprod_example_TestSignum_strtable+60
       pushl   %eax
       pushl   %ebx
       pushl   $$$new_obj4
       call    JR_StrConcat
       pushl   %ebp
       pushl   %eax
==== Next deref = checknull -4
       movl    -4(%ebp), %ecx
       call    *256(%ecx)
       subl    $-16, %esp
       cmpl    $0, 52(%esi)
       je      L108
L129:
       movl    $0, 32(%esp)
       leal    40(%esp), %edi
       movl    $5, %ecx
       xorl    %eax, %eax
       rep
       stosl
       movl    _4java_util_Random_seedUniquifier, %ecx
       fildq   (%ecx)
       fistpq  96(%esp)
       movl    100(%esp), %edi
       movl    96(%esp), %eax
       movl    %eax, %esi
       addl    $1, %esi
       adcl    $0, %edi
       movl    %esi, %eax
       movl    %edi, %edx
       movl    %edx, 116(%esp)
       movl    %eax, 112(%esp)
       fildq   112(%esp)
       fistpq  (%ecx)
       <generic_lock>  add [esp], 0 (MEMBAR)
       call    _3java_lang_System_nanoTime
       movl    %edx, %ecx
       leal    40(%esp), %edx
       pushl   %edx
       addl    %esi, %eax
       adcl    %edi, %ecx
       pushl   %ecx
       pushl   %eax
       call    _0java_util_Random_init__J___Ljava_util_Random_2
       movl    $10000000, %edi
       .align  4
L109:
       leal    40(%esp), %eax
       pushl   %eax
       addl    $-1, %edi
       pushl   $32
       call    _2java_util_Random_next
       movl    %eax, %esi
       leal    40(%esp), %ecx
       pushl   %ecx
       pushl   $32
       call    _2java_util_Random_next
       movl    %eax, %edx
       sarl    $31, %edx
       addl    %edx, %esi
       pushl   %esi
       pushl   %eax
       call
_3com_mindprod_example_TestSignum_checkConformanceOfAllCandidates
       leal    40(%esp), %eax
       pushl   %eax
       pushl   $32
       call    _2java_util_Random_next
       movl    %eax, %ebp
       leal    40(%esp), %ecx
       pushl   %ecx
       pushl   $32
       call    _2java_util_Random_next
       movl    %eax, %edx
       sarl    $31, %edx
       addl    %edx, %ebp
       pushl   %ebp
       pushl   %eax
       call
_3com_mindprod_example_TestSignum_checkConformanceOfAllCandidates
       testl   %edi, %edi
       jg      L109
       pushl   _1java_lang_StringBuffer
       movl    _4java_lang_System_out, %eax
       movl    (%eax), %ebx
       movl    _0com_mindprod_example_TestSignum_strtable+64, %edi
       movl    _4com_mindprod_example_TestSignum_df0, %esi
==== Next deref = checknull 0
       cmpl    %esi, (%esi)
       call    JR_NEW24
       movl    %eax, %ebp
       pushl   %ebp
       pushl   $16
       call
_0java_lang_AbstractStringBuilder_init__I___Ljava_lang_AbstractStringBuilder_2
       pushl   %esi
       pushl   $0
       pushl   $2000000000
       pushl   %ebp
       movl    _4java_text_DontCareFieldPosition_INSTANCE, %ecx
       pushl   (%ecx)
       movl    -4(%esi), %eax
       call    *320(%eax)
==== Next deref = checknull 0
       cmpl    %eax, (%eax)
       pushl   %eax
       call    _2java_lang_StringBuffer_toString
       pushl   _0com_mindprod_example_TestSignum_strtable+68
       pushl   %eax
       pushl   %edi
       pushl   $$$new_obj5
       call    JR_StrConcat
       pushl   %ebx
       pushl   %eax
==== Next deref = checknull -4
       movl    -4(%ebx), %ecx
       call    *256(%ecx)
       pushl   _1java_util_ArrayList
       call    JR_NEW24
       movl    %eax, 32(%esp)
       pushl   %eax
       call    _0java_util_AbstractList_init
       pushl   $15
       pushl   $1
       pushl   $1
       pushl   _1java_lang_Object
       call    X2J_NEW_OPEN
       pushl $_1com_mindprod_example_TestSignum$BenchmarkMeasurement
       movl    52(%esp), %ebx
       movl    %eax, 8(%ebx)
       call    JR_NEW24
       movl    %eax, %edi
       call    _3com_mindprod_example_TestSignum_measureKobzda
       movl    %eax, %esi
       movl    %edx, %ebp
       movl    _4java_lang_System_out, %ecx
       pushl   (%ecx)
       pushl   $46
       movl    (%ecx), %eax
==== Next deref = checknull -4
       movl    -4(%eax), %ecx
       call    *328(%ecx)
       pushl   %ebx
       movl    %esi, 8(%edi)
       movl    %ebp, 12(%edi)
       movl    _0com_mindprod_example_TestSignum_strtable+72, %eax
       movl    %eax, 4(%edi)
       movl    12(%ebx), %ecx
       addl    $1, %ecx
       pushl   %ecx
       call    _2java_util_ArrayList_ensureCapacity
       pushl $_1com_mindprod_example_TestSignum$BenchmarkMeasurement
       movl    12(%ebx), %eax
       leal    1(%eax), %ecx
       movl    %ecx, 12(%ebx)
       movl    8(%ebx), %edx
==== Next deref = checknull 8
       cmpl    %eax, 8(%edx)
       jbe     label_trial_JR_ThrowArrayIndexOutOfBoundsException
       movl    %edi, 16(%edx, %eax, 4)
       call    JR_NEW24
       movl    %eax, %edi
       call    _3com_mindprod_example_TestSignum_measureLoHi32
       movl    %eax, %esi
       movl    %edx, %ebp
       movl    _4java_lang_System_out, %ecx
       pushl   (%ecx)
       pushl   $46
       movl    (%ecx), %eax
==== Next deref = checknull -4
       movl    -4(%eax), %ecx
       call    *328(%ecx)
       pushl   %ebx
       movl    %esi, 8(%edi)
       movl    %ebp, 12(%edi)
       movl    _0com_mindprod_example_TestSignum_strtable+76, %eax
       movl    %eax, 4(%edi)
       movl    12(%ebx), %ecx
       addl    $1, %ecx
       pushl   %ecx
       call    _2java_util_ArrayList_ensureCapacity
       pushl $_1com_mindprod_example_TestSignum$BenchmarkMeasurement
       movl    12(%ebx), %eax
       leal    1(%eax), %ecx
       movl    %ecx, 12(%ebx)
       movl    8(%ebx), %edx
==== Next deref = checknull 8
       cmpl    %eax, 8(%edx)
       jbe     label_trial_JR_ThrowArrayIndexOutOfBoundsException
       movl    %edi, 16(%edx, %eax, 4)
       call    JR_NEW24
       movl    %eax, %edi
       call    _3com_mindprod_example_TestSignum_measurePiotr
       movl    %eax, %esi
       movl    %edx, %ebp
       movl    _4java_lang_System_out, %ecx
       pushl   (%ecx)
       pushl   $46
       movl    (%ecx), %eax
==== Next deref = checknull -4
       movl    -4(%eax), %ecx
       call    *328(%ecx)
       pushl   %ebx
       movl    %esi, 8(%edi)
       movl    %ebp, 12(%edi)
       movl    _0com_mindprod_example_TestSignum_strtable+80, %eax
       movl    %eax, 4(%edi)
       movl    12(%ebx), %ecx
       addl    $1, %ecx
       pushl   %ecx
       call    _2java_util_ArrayList_ensureCapacity
       pushl $_1com_mindprod_example_TestSignum$BenchmarkMeasurement
       movl    12(%ebx), %eax
       leal    1(%eax), %ecx
       movl    %ecx, 12(%ebx)
       movl    8(%ebx), %edx
==== Next deref = checknull 8
       cmpl    %eax, 8(%edx)
       jbe     label_trial_JR_ThrowArrayIndexOutOfBoundsException
       movl    %edi, 16(%edx, %eax, 4)
       call    JR_NEW24
       movl    %eax, %edi
       call    _3com_mindprod_example_TestSignum_measureSignHalf
       movl    %eax, %esi
       movl    %edx, %ebp
       movl    _4java_lang_System_out, %ecx
       pushl   (%ecx)
       pushl   $46
       movl    (%ecx), %eax
==== Next deref = checknull -4
       movl    -4(%eax), %ecx
       call    *328(%ecx)
       pushl   %ebx
       movl    %esi, 8(%edi)
       movl    %ebp, 12(%edi)
       movl    _0com_mindprod_example_TestSignum_strtable+84, %eax
       movl    %eax, 4(%edi)
       movl    12(%ebx), %ecx
       addl    $1, %ecx
       pushl   %ecx
       call    _2java_util_ArrayList_ensureCapacity
       pushl $_1com_mindprod_example_TestSignum$BenchmarkMeasurement
       movl    12(%ebx), %eax
       leal    1(%eax), %ecx
       movl    %ecx, 12(%ebx)
       movl    8(%ebx), %edx
==== Next deref = checknull 8
       cmpl    %eax, 8(%edx)
       jbe     label_trial_JR_ThrowArrayIndexOutOfBoundsException
       movl    %edi, 16(%edx, %eax, 4)
       call    JR_NEW24
       movl    %eax, %edi
       call    _3com_mindprod_example_TestSignum_measureSignOf
       movl    %eax, %esi
       movl    %edx, %ebp
       movl    _4java_lang_System_out, %ecx
       pushl   (%ecx)
       pushl   $46
       movl    (%ecx), %eax
==== Next deref = checknull -4
       movl    -4(%eax), %ecx
       call    *328(%ecx)
       pushl   %ebx
       movl    %esi, 8(%edi)
       movl    %ebp, 12(%edi)
       movl    _0com_mindprod_example_TestSignum_strtable+88, %eax
       movl    %eax, 4(%edi)
       movl    12(%ebx), %ecx
       addl    $1, %ecx
       pushl   %ecx
       call    _2java_util_ArrayList_ensureCapacity
       pushl $_1com_mindprod_example_TestSignum$BenchmarkMeasurement
       movl    12(%ebx), %eax
       leal    1(%eax), %ecx
       movl    %ecx, 12(%ebx)
       movl    8(%ebx), %edx
==== Next deref = checknull 8
       cmpl    %eax, 8(%edx)
       jbe     label_trial_JR_ThrowArrayIndexOutOfBoundsException
       movl    %edi, 16(%edx, %eax, 4)
       call    JR_NEW24
       movl    %eax, %edi
       call    _3java_lang_System_nanoTime
       movl    %edx, %ecx
       movl    %ecx, 40(%esp)
       movl    %eax, 44(%esp)
       movl    _4com_mindprod_example_TestSignum_suiteIterations,
%eax
       subl    $-32, %esp
       testl   %eax, %eax
       jle     L110
       movl    _4com_mindprod_example_TestSignum_testSuiteValues,
%ecx
       movl    $0, 28(%esp)
       movl    $0, 24(%esp)
       .align  4
L115:
==== Next deref = checknull 8
       movl    8(%ecx), %esi
       testl   %esi, %esi
       jle     L111
       testl   $1, %esi
       je      L112
       pushl   20(%ecx)
       pushl   16(%ecx)
       movl    %ecx, 120(%esp)
       call    _3java_lang_Long_signum
       movl    112(%esp), %ecx
       addl    %eax, 28(%esp)
       cmpl    $1, %esi
       je      L113
       movl    $1, %ebp
       jmp     L114
L112:
       xorl    %ebp, %ebp
       .align  4
L114:
       pushl   20(%ecx, %ebp, 8)
       pushl   16(%ecx, %ebp, 8)
       movl    %ecx, 120(%esp)
       call    _3java_lang_Long_signum
       movl    112(%esp), %ecx
       pushl   28(%ecx, %ebp, 8)
       pushl   24(%ecx, %ebp, 8)
       movl    36(%esp), %ebx
       addl    %eax, %ebx
       movl    %ecx, 120(%esp)
    &n