Re: [Ikvm-developers] Float problems
Brought to you by:
jfrijters
From: Dennis U. <ls...@ya...> - 2007-05-24 20:48:42
|
Hi. You wrote: JF> Please be careful. This license on that file doesn't allow modification. Oh... Didn't notice. Actually it has an error at line 821, it's float wide cancellation test. They sum 2 values and then subtract another one without storing intermediate result in local variable. This is correct only for strict mode. In non-strict, sum must be stored in a local variable, so it can be truncated. It passes on JVM because all known JVM's are working in strict mode. JF> Interesting. Where are you doing the conv.r4/8? I would expect JF> them to be necessary only after a mul/div/rem/add/sub operation. Adding them after arithmetic operations is correct, but it gives too much performance degrade (see ikvm_scimark_float_fix_full_strict.log) and it's only required for strict mode. So, I add conv.r4/8 only after 'escape'-operations like dstore/fstore, dup, putfield/putstatic except dastore/daload (because it has no impact on my tests - FloatTest and DaCapo.lusearch and it's too slow). This is compliant with Java Specification. Also I've improved compare methods. They no longer need that pack of branch instructions. Result is based on that fact: cmp(a,b) = cgt(a,b) - clt(a,b) JF> I'm not a big fan of command line switches. So my initial thought JF> would be to only do "compliant", but I haven't made up my mind yet. If you decide that switches are necessary, write me, I can add this functionality. -- Bye, Dennis mailto:ls...@ya... |