summaryrefslogtreecommitdiff
path: root/src/mesa/glapi
diff options
context:
space:
mode:
authorIan Romanick <idr@us.ibm.com>2005-07-28 00:11:10 +0000
committerIan Romanick <idr@us.ibm.com>2005-07-28 00:11:10 +0000
commit9f23a3a1bff6c8af93e651273c9887bbf119f555 (patch)
tree0bdc6e08b24ee9f855aa7132944d5a26e1edf37c /src/mesa/glapi
parent3e36986e5a59c734b7bd198a16fb9af3314860de (diff)
Fix SPARC assembly for 64-bit
- The test for whether or not we're building for 64-bit is '#ifdef __arch64__'. This appears to be correct on both Linux and Solaris. - The test for Solaris is now '#if defined(SVR4) || defined(__SVR4) || defined(__svr4__)'. GCC 3.4.0 has all three defined on Solaris 9. - Enables assembly language clip routines. - Fixes to make GLSL code build on Solaris. - Update gl_SPARC_asm.py.
Diffstat (limited to 'src/mesa/glapi')
-rw-r--r--src/mesa/glapi/gl_SPARC_asm.py33
-rw-r--r--src/mesa/glapi/glapi.c10
2 files changed, 22 insertions, 21 deletions
diff --git a/src/mesa/glapi/gl_SPARC_asm.py b/src/mesa/glapi/gl_SPARC_asm.py
index 9be4849010..1a8823cc40 100644
--- a/src/mesa/glapi/gl_SPARC_asm.py
+++ b/src/mesa/glapi/gl_SPARC_asm.py
@@ -40,15 +40,13 @@ class PrintGenericStubs(gl_XML.gl_print_base):
def printRealHeader(self):
print '#include "glapioffsets.h"'
print ''
- print '#define GLOBL_FN(x) .globl x ; .type x,#function'
- print ''
- print '#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))'
+ print '#ifdef __arch64__'
print '# define GL_STUB(fn,off)\t\t\t\t\\'
- print 'GLOBL_FN(fn) ; fn:\t\t\t\t\t\\'
- print '\tsethi\t%hi(0x00000000), %g4 ;\t\t\t\\'
- print '\tsethi\t%hi(0x00000000), %g1 ;\t\t\t\\'
- print '\tor\t%g4, %lo(0x00000000), %g4 ;\t\t\\'
- print '\tor\t%g1, %lo(0x00000000), %g1 ;\t\t\\'
+ print 'fn:\t\t\t\t\t\\'
+ print '\tsethi\t%hi(0xDEADBEEF), %g4 ;\t\t\t\\'
+ print '\tsethi\t%hi(0xDEADBEEF), %g1 ;\t\t\t\\'
+ print '\tor\t%g4, %lo(0xDEADBEEF), %g4 ;\t\t\\'
+ print '\tor\t%g1, %lo(0xDEADBEEF), %g1 ;\t\t\\'
print '\tsllx\t%g4, 32, %g4 ;\t\t\t\t\\'
print '\tldx\t[%g1 + %g4], %g1 ;\t\t\t\\'
print '\tsethi\t%hi(8 * off), %g4 ;\t\t\t\\'
@@ -58,19 +56,19 @@ class PrintGenericStubs(gl_XML.gl_print_base):
print '\tnop'
print '#else'
print '# define GL_STUB(fn,off)\t\t\t\t\\'
- print 'GLOBL_FN(fn) ; fn:\t\t\t\t\t\\'
- print '\tsethi\t%hi(0x00000000), %g1 ;\t\t\t\\'
- print '\tld\t[%g1 + %lo(0x00000000)], %g1 ;\t\t\\'
+ print 'fn:\t\t\t\t\t\\'
+ print '\tsethi\t%hi(0xDEADBEEF), %g1 ;\t\t\t\\'
+ print '\tld\t[%g1 + %lo(0xDEADBEEF)], %g1 ;\t\t\\'
print '\tld\t[%g1 + (4 * off)], %g5 ;\t\t\\'
print '\tjmpl\t%g5, %g0 ;\t\t\t\t\\'
print '\tnop'
print '#endif'
print ''
- print '#define GL_STUB_ALIAS(fn,alias) GLOBL_FN(fn) ; fn = alias'
+ print '#define GL_STUB_ALIAS(fn,alias) fn = alias'
print ''
print '.text'
print '.align 32'
- print 'GLOBL_FN(__glapi_sparc_icache_flush)'
+ print '\t\t.globl __glapi_sparc_icache_flush ; .type __glapi_sparc_icache_flush,#function'
print '__glapi_sparc_icache_flush: /* %o0 = insn_addr */'
print '\tflush\t%o0'
print '\tretl'
@@ -83,7 +81,10 @@ class PrintGenericStubs(gl_XML.gl_print_base):
def printBody(self, api):
- print 'GLOBL_FN(_mesa_sparc_glapi_begin)'
+ for f in api.functionIterateByOffset():
+ print '\t\t.globl gl%s ; .type gl%s,#function' % (f.name, f.name)
+
+ print '\t\t.globl _mesa_sparc_glapi_begin ; .type _mesa_sparc_glapi_begin,#function'
print '_mesa_sparc_glapi_begin:'
print ''
@@ -91,7 +92,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
print '\tGL_STUB(gl%s, _gloffset_%s)' % (f.name, f.name)
print ''
- print 'GLOBL_FN(_mesa_sparc_glapi_end)'
+ print '\t\t.globl _mesa_sparc_glapi_end ; .type _mesa_sparc_glapi_end,#function'
print '_mesa_sparc_glapi_end:'
print ''
@@ -99,7 +100,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
for f in api.functionIterateByOffset():
for n in f.entry_points:
if n != f.name:
- print '\tGL_STUB_ALIAS(gl%s, gl%s)' % (n, f.name)
+ print '\t.globl gl%s ; .type gl%s,#function ; gl%s = gl%s' % (n, n, n, f.name)
return
diff --git a/src/mesa/glapi/glapi.c b/src/mesa/glapi/glapi.c
index ff0199b833..5132bebaef 100644
--- a/src/mesa/glapi/glapi.c
+++ b/src/mesa/glapi/glapi.c
@@ -711,7 +711,7 @@ generate_entrypoint(GLuint functionOffset)
return (_glapi_proc) code;
#elif defined(USE_SPARC_ASM)
-#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+#ifdef __arch64__
static const unsigned int insn_template[] = {
0x05000000, /* sethi %uhi(_glapi_Dispatch), %g2 */
0x03000000, /* sethi %hi(_glapi_Dispatch), %g1 */
@@ -739,7 +739,7 @@ generate_entrypoint(GLuint functionOffset)
if (code) {
memcpy(code, insn_template, sizeof(insn_template));
-#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+#ifdef __arch64__
code[0] |= (glapi_addr >> (32 + 10));
code[1] |= ((glapi_addr & 0xffffffff) >> 10);
__glapi_sparc_icache_flush(&code[0]);
@@ -791,17 +791,17 @@ fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
/* XXX this hasn't been tested! */
unsigned int *code = (unsigned int *) entrypoint;
-#if (defined(__sparc_v9__) && (!defined(__linux__) || defined(__linux_sparc_64__)))
+#ifdef __arch64__
code[6] = 0x05000000; /* sethi %hi(8 * glapioffset), %g2 */
code[7] = 0x8410a000; /* or %g2, %lo(8 * glapioffset), %g2 */
code[6] |= ((offset * 8) >> 10);
code[7] |= ((offset * 8) & ((1 << 10) - 1));
__glapi_sparc_icache_flush(&code[6]);
-#else /* __sparc_v9__ && !linux */
+#else /* __arch64__ */
code[2] = 0xc6006000; /* ld [%g1 + %lo(4*glapioffset)], %g3 */
code[2] |= (offset * 4);
__glapi_sparc_icache_flush(&code[2]);
-#endif /* __sparc_v9__ && !linux */
+#endif /* __arch64__ */
#else