-#!/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")
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\\'
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'
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)
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)