David Miller wrote:
> This rewrites the sparc GLAPI code so that it's PIC friendly and works
> with all of the TLS/PTHREADS/64-bit/32-bit combinations properly.
> 
> As a result we can turn SPARC asm back on.  Currently it's only
> enabled on Linux, as that's the only place where I can test this
> stuff out.
> 
> For the moment the cliptest SPARC asm routines are disabled as they
> are non-working.  The problem is that they use register %g7 as a
> temporary which is where the threading libraries store the thread
> pointer on SPARC.  I will fix that code up in a future change as it's
> a pretty important routine to optimize.
> 
> Like x86 we do the runtime patch as a pthread once-invoked initializer
> in init_glapi_relocs().
> 
> Unlike x86, however, our GLAPI stubs on SPARC are just two instruction
> sequences that branch to a trampoline and put the GLAPI offset into a
> register.  The trampoline is what we run-time patch.  The stubs thus
> all look like:
> 
> glFoo:
>         ba              __glapi_sparc_foo_stub
>          sethi          GLAPI_OFFSET(glFOO) * PTR_SIZE, %g3
> 
> This actually makes generate_entrypoint() a lot simpler on SPARC.  For
> this case in generate_entrypoint() we generate stubs using a 'call'
> instead of the 'ba' above to make sure it can reach.
> 
> In order to get a proper tail call going here, in the unpatched case,
> we do several tricks.  To get the current PC, for example, we save the
> return address register into a temporary, do a call, save the return
> address register written by the call to another temporary, then
> restore the original return address register value.  This is to
> avoid having to allocate a stack frame.
> 
> This is necessary for PIC address formation.
> 
> This new GLAPI scheme lets us get rid of the ugly SPARC GLAPI hacks in
> __glXInitialize() and one_time_init().


Looks good to me, David, but git-am gave me a bunch of errors when I 
tried to apply the patch:

Applying mesa: Resurrect SPARC asm code.
error: patch failed: src/glx/x11/glxext.c:979
error: src/glx/x11/glxext.c: patch does not apply
error: patch failed: src/mesa/glapi/gl_SPARC_asm.py:39
error: src/mesa/glapi/gl_SPARC_asm.py: patch does not apply
error: patch failed: src/mesa/glapi/glapi.c:344
error: src/mesa/glapi/glapi.c: patch does not apply
error: patch failed: src/mesa/glapi/glapi_getproc.c:259
error: src/mesa/glapi/glapi_getproc.c: patch does not apply
error: patch failed: src/mesa/sparc/glapi_sparc.S:26
error: src/mesa/sparc/glapi_sparc.S: patch does not apply
error: patch failed: src/mesa/sparc/sparc.c:140
error: src/mesa/sparc/sparc.c: patch does not apply
Patch failed at 0001.

-Brian

------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to