[maemo-developers] [maemo-developers] Improving Cairo performance on the N800

From: Zeeshan Ali zeenix at gstreamer.net
Date: Tue Jan 16 12:08:46 EET 2007

> Now, the recently announced Nokia N800 is different from the 770 in
> various ways that are interesting for Cairo performance. I've got my
> eye on the ARMv6 SIMD instructions and the PowerVR MBX accelerator.

   Yeah! me too. The combined power of these two can make it possible
to optimize a lot of nice free software out there for the N800 device.
 However! while former is fully documented and the documentation is
available for general public, it doesn't have a lot to offer. ARMv6
SIMD only operate on 32-bit words and hence i find it unlikely that it
can be used to optimize double fp emulation in contrast to the intel
wirelesss MMX, which provides a big bunch of 128-bit (CORRECTME: or
was it 64- bit?) SIMD instructions. OTOH, these few SIMD instructions
can still be used to optimize a lot of code but would it be a good
idea for cairo if you need to convert the operand values to ints and
the result(s) back to float?

  I have already been thinking on utilizing ARMv6 before the N800 was
release to public. My proposed plan of attack for the community (and
also the Nokia employees) is simply the following:

1. Patch GCC to provide ARMv6 intrinsics. (1 MM at most)
2. Patch liboil [1] to utilize these intrinsics when compiled for
ARMv6 target (1-3 MM)
3. Make all the software utilize liboil wherever appropriate or ARMv6
intrinsics directly if needed.

   The 3rd step would ensure that you are optimizing your software for
all the platforms for which liboil provides optimizations. OTOH! one
can skip step#1 and write liboil implementations in assembly.

   I already did a little progress on this and the result is two
header files which provides inline functions abstracting the assembly
instructions. I am attaching the headers. One of my friend was
supposed to convert them to gcc intrinsics and patch gcc but i never
got around to finish them. However I am attaching the headers so
anyone can use it as a starter if he/she likes.

  Using PowerVR MBX accelerator is a completely different story.
Although it has a lot to offer but I failed to find any documentation
on it. There were tons of documentation on how to use the OpenGL ES
implemented on top of MBX. If you come across any documentation on
that, please let me know.

[1] http://liboil.freedesktop.org/


Zeeshan Ali
Design Engineer, SW
Open Source Software Operations
Nokia Multimedia
-------------- next part --------------
A non-text attachment was scrubbed...
Name: armv6_arithmetic.h
Type: text/x-chdr
Size: 6748 bytes
Desc: not available
Url : http://lists.maemo.org/pipermail/maemo-developers/attachments/20070116/0fd45a12/attachment.h 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: armv6_nonarithmetic.h
Type: text/x-chdr
Size: 484 bytes
Desc: not available
Url : http://lists.maemo.org/pipermail/maemo-developers/attachments/20070116/0fd45a12/attachment-0001.h 
More information about the maemo-developers mailing list