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