[SDL] [PATCH] Altivec blitters...

Bob Ippolito bob at redivi.com
Sat Feb 19 07:02:54 PST 2005


On Feb 19, 2005, at 7:39 AM, Ryan C. Gordon wrote:

>> - I made sure the configure.in checks to see that the syntax 
>> extension you're using compiles.
>
> Apparently Apple's GCC uses -faltivec, but the FSF GCC uses -maltivec 
> and specify vector constants differently; can someone on linux/ppc 
> please test this patch?
>
>> - It no longer tries to execute the code (in the case you're 
>> compiling altivec support on a G3 for some reason)
>
> You need to put it in a seperate, non-inline function if you use 
> vector intrinsics: GCC inserts an Altivec opcode at the top of the 
> function if it sees a vector thing...so it'll still crash on a G3 
> as-is; the "if (0)" isn't enough to prevent it.

Ah, right.  D'oh!  I've never actually even used a G3, so I have no way 
of testing this.

>> - It checks for altivec on darwin (I assume you were testing from 
>> Xcode?)
>
> I tested from the command line, but not on a real Darwin system, just 
> Panther.

Then how did the configure.in possibly turn on Altivec?  Did you patch 
the makefile or configure script directly?

>> - Checks a sysctl to see if it should use prefetch or not (if L3 
>> cache present, or not OS X, it uses prefetch -- optimal for G4)
>
> I got a huge boost on my powerbook (L2, but not L3 cache) with the 
> prefetch. On a G5, the prefetch instructions cause pipeline stalls 
> (which seems a really silly design decision from where I'm sitting, 
> but whatever), so those should always avoid the prefetch. The G5, 
> however, starts automatically prefetching when you touch a few 
> cachelines linearly, which we do in this function, so it should get 
> the same result as long as you don't try to force it with vec_dst().
>
> I'm not sure how to check for this reliably; there's a way to ask 
> MacOS "am I on a G5?" but I'm not sure what that does when you are one 
> day on a G6...there might be a sysctl or Gestalt to query if there's 
> an automatic prefetch, though.
>
> The existance of G5-style prefetching is the only time we should avoid 
> vec_dst*, though.

My 1ghz titanium powerbook G4 has 1mb of l3 cache:
% sysctl hw.l3cachesize
hw.l3cachesize: 1048576

I think it's safe enough to use the version w/o prefetch on anything 
that looks like a G5.. when/if another processor comes out, then we can 
worry about fixing the test (if it also does not have L3).

>> - prefetch and no-prefetch 32-32 blits are separate functions (could 
>> be the same function with userdata I guess).
>
> There were three conditionals regardless of dataset; I'm not really 
> sure it's worth splitting it into a seperate function.

It was easiest this way because I didn't feel like reading more of the 
SDL headers to see what the userdata member of that struct was :)

-bob





More information about the SDL mailing list