Merge branch 'nouveau-import'
[mesa.git] / src / mesa / glapi / gl_SPARC_asm.py
index 76a545d90c9ec7e8bfce63c9103bcf1556da66be..178c00a227f50e809bb26ba0147ff2bfb6cbdd9e 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/python2
+#!/usr/bin/env python
 
 # (C) Copyright IBM Corporation 2004
 # All Rights Reserved.
 # Authors:
 #    Ian Romanick <idr@us.ibm.com>
 
-import gl_XML
 import license
+import gl_XML, glX_XML
 import sys, getopt
 
-class PrintGenericStubs(gl_XML.FilterGLAPISpecBase):
-       name = "gl_SPARC_asm.py (from Mesa)"
-
+class PrintGenericStubs(gl_XML.gl_print_base):
        def __init__(self):
-               gl_XML.FilterGLAPISpecBase.__init__(self)
+               gl_XML.gl_print_base.__init__(self)
+               self.name = "gl_SPARC_asm.py (from Mesa)"
                self.license = license.bsd_license_template % ( \
 """Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
 (C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
@@ -42,15 +41,13 @@ class PrintGenericStubs(gl_XML.FilterGLAPISpecBase):
        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\\'
@@ -60,17 +57,19 @@ class PrintGenericStubs(gl_XML.FilterGLAPISpecBase):
                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) 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'
@@ -79,21 +78,52 @@ class PrintGenericStubs(gl_XML.FilterGLAPISpecBase):
                print '.data'
                print '.align 64'
                print ''
-               print 'GLOBL_FN(_mesa_sparc_glapi_begin)'
+               return
+
+
+       def printBody(self, api):
+               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 ''
-               return
 
-       def printRealFooter(self):
+               for f in api.functionIterateByOffset():
+                       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:'
-               return
+               print ''
+
+
+               for f in api.functionIterateByOffset():
+                       for n in f.entry_points:
+                               if 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
 
-       def printFunction(self, f):
-               print '\tGL_STUB(gl%s, _gloffset_%s)' % (f.name, f.real_name)
                return
 
+
 def show_usage():
        print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
        sys.exit(1)
@@ -114,9 +144,10 @@ if __name__ == '__main__':
                        file_name = val
 
        if mode == "generic":
-               dh = PrintGenericStubs()
+               printer = PrintGenericStubs()
        else:
                print "ERROR: Invalid mode \"%s\" specified." % mode
                show_usage()
 
-       gl_XML.parse_GL_API( dh, file_name )
+       api = gl_XML.parse_GL_API(file_name, glX_XML.glx_item_factory())
+       printer.Print(api)