Merge branch 'nouveau-import'
[mesa.git] / src / mesa / glapi / gl_SPARC_asm.py
index 9be4849010d4e5723a99a2bb88ee6416c9590af7..178c00a227f50e809bb26ba0147ff2bfb6cbdd9e 100644 (file)
@@ -25,7 +25,8 @@
 # Authors:
 #    Ian Romanick <idr@us.ibm.com>
 
-import gl_XML, license
+import license
+import gl_XML, glX_XML
 import sys, getopt
 
 class PrintGenericStubs(gl_XML.gl_print_base):
@@ -40,15 +41,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 +57,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,15 +82,28 @@ class PrintGenericStubs(gl_XML.gl_print_base):
 
 
        def printBody(self, api):
-               print 'GLOBL_FN(_mesa_sparc_glapi_begin)'
+               for f in api.functionIterateByOffset():
+                       if f.is_static_entry_point(f.name):
+                               name = f.name
+                       else:
+                               name = "_dispatch_stub_%u" % (f.offset)
+
+                       print '\t\t.globl gl%s ; .type gl%s,#function' % (name, name)
+
+               print '\t\t.globl _mesa_sparc_glapi_begin ; .type _mesa_sparc_glapi_begin,#function'
                print '_mesa_sparc_glapi_begin:'
                print ''
 
                for f in api.functionIterateByOffset():
-                       print '\tGL_STUB(gl%s, _gloffset_%s)' % (f.name, f.name)
+                       if f.is_static_entry_point(f.name):
+                               name = f.name
+                       else:
+                               name = "_dispatch_stub_%u" % (f.offset)
+
+                       print '\tGL_STUB(gl%s, _gloffset_%s)' % (name, 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 +111,15 @@ 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)
+                                       if f.is_static_entry_point(n):
+                                               text = '\t.globl gl%s ; .type gl%s,#function ; gl%s = gl%s' % (n, n, n, f.name)
+
+                                               if f.has_different_protocol(n):
+                                                       print '#ifndef GLX_INDIRECT_RENDERING'
+                                                       print text
+                                                       print '#endif'
+                                               else:
+                                                       print text
 
                return
 
@@ -129,6 +149,5 @@ if __name__ == '__main__':
                print "ERROR: Invalid mode \"%s\" specified." % mode
                show_usage()
 
-       api = gl_XML.parse_GL_API( file_name )
-
-       printer.Print( api )
+       api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+       printer.Print(api)