Java Forum / General / February 2006
Signum Benchmark revisited
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
|
|