[OpenJDK 2D-Dev] Various fixes to pisces stroke widening code

Jim Graham james.graham at oracle.com
Tue Jul 13 19:30:37 UTC 2010

Hi Denis,

float operations are pretty fast and they are usually done in a separate 
part of the processor so the compiler can schedule a lot of bookkeeping 
instructions to run in parallel with waiting for the results of the FP 
instruction.  In the end, they often end up being "free" if there are 
enough bookkeeping instructions (branches, fetching data, etc.) in 
amongst the data.

Given how many alternate instructions you are pointing out for the fixed 
point code it would be very likely that this would be a "win".

The main reason that Pisces is implemented heavily in fixed point is 
that it was originally written for the mobile platform where there are 
no FP instructions.  We don't have to worry about that on the desktop 
(any more).

I strongly support you converting things to fp if you want to do it...


On 7/12/2010 8:05 AM, Denis Lila wrote:
> Hello.
> Is it ok if I do this? I already started working on it on Friday.
> I think I should be done by tomorrow.
> But yes, I agree that we should convert to floating point. As for
> performance, there's also the fact that right now we're trading
> one double multiplication for 2 casts to long, 1 long multiplication,
> 1 bit shift of a long, and 1 cast back to an int. I don't know much
> about how these are done in hardware, but it doesn't seem like they'd
> be faster than the double multiplication.
> As for large coordinates, there's a bug report about it (one not
> reported by me :) ) here: https://bugzilla.redhat.com/show_bug.cgi?id=597227
> I submitted a matching bug report on bugs.sun.com (ID 6967436), but I
> can't find it when I search for it.
> Denis.
> ----- "Jim Graham"<james.graham at oracle.com>  wrote:
>> Sigh...
>> Pisces could really stand to upgrade to floats/doubles everywhere, for
>> several reasons:
>> - FPU ops are likely as fast if not faster on modern hardware due to
>> parallel execution of FP instructions alongside regular instructions.
>> - Don't have to worry about getting coordinates larger than 32K (I
>> don't
>> think this is well tested, but I imagine that Pisces will not deal
>> with
>> it very gracefully).
>> - Lots of code is greatly simplified not having to deal with the
>> semantics of how to do fixed point multiplies, divides, and
>> conversions.
>> I meant to do this during the original integration, but I wanted to
>> get
>> the task done as quickly as possible so that we could have an open
>> source alternative to the closed Ductus code so I left that task for a
>> later update.  But, now that a lot of work is being done on the code
>> to
>> fix it up, it might be better to do the float conversion now so that
>> the
>> maintenance is easier and before we end up creating a lot of new fixed
>> point code.
>> My plate is full right now, but hopefully I can interest someone else
>> in
>> doing a cleanup cycle?  (Donning my Tom Sawyer hat... ;-)
>> 			...jim

More information about the 2d-dev mailing list