gallium/draw: initial code to properly support llvm in the draw module
[mesa.git] / src / mesa / glapi / gl_x86-64_asm.py
index 1bfe3db591a80d76118a4b0f7b833f3734323b69..31c1a2b93a87ed4adcdb157a1b3cf120c3c3e669 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, copy
 
 def should_use_push(registers):
@@ -121,7 +122,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                print " * the symbol visibility mode to 'default'."
                print ' */'
                print ''
-               print '#include "assyntax.h"'
+               print '#include "x86/assyntax.h"'
                print ''
                print '#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 303'
                print '#  pragma GCC visibility push(default)'
@@ -132,11 +133,12 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                print ''
                print '# if defined(USE_MGL_NAMESPACE)'
                print '#  define GL_PREFIX(n) GLNAME(CONCAT(mgl,n))'
+               print '#  define _glapi_Dispatch _mglapi_Dispatch'
                print '# else'
                print '#  define GL_PREFIX(n) GLNAME(CONCAT(gl,n))'
                print '# endif'
                print ''
-               print '#if defined(PTHREADS) || defined(USE_XTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)'
+               print '#if defined(PTHREADS) || defined(SOLARIS_THREADS) || defined(WIN32_THREADS) || defined(BEOS_THREADS)'
                print '#  define THREADS'
                print '#endif'
                print ''
@@ -190,6 +192,10 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                print ' .long   2,4,20    /* Minimum kernel version w/TLS */'
                print '3:       .p2align 2        /* pad out section */'
                print '#endif /* GLX_USE_TLS */'
+               print ''
+               print '#if defined (__ELF__) && defined (__linux__)'
+               print ' .section .note.GNU-stack,"",%progbits'
+               print '#endif'
                return
 
 
@@ -232,10 +238,14 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                        registers.append( ["%rbp", 0] )
 
 
+               name = f.dispatch_name()
+
                print '\t.p2align\t4,,15'
-               print '\t.globl\tGL_PREFIX(%s)' % (f.name)
-               print '\t.type\tGL_PREFIX(%s), @function' % (f.name)
-               print 'GL_PREFIX(%s):' % (f.name)
+               print '\t.globl\tGL_PREFIX(%s)' % (name)
+               print '\t.type\tGL_PREFIX(%s), @function' % (name)
+               if not f.is_static_entry_point(f.name):
+                       print '\tHIDDEN(GL_PREFIX(%s))' % (name)
+               print 'GL_PREFIX(%s):' % (name)
                print '#if defined(GLX_USE_TLS)'
                print '\tcall\t_x86_64_get_dispatch@PLT'
                print '\tmovq\t%u(%%rax), %%r11' % (f.offset * 8)
@@ -269,7 +279,7 @@ class PrintGenericStubs(gl_XML.gl_print_base):
                print '\tjmp\t*%r11'
                print '#endif /* defined(GLX_USE_TLS) */'
 
-               print '\t.size\tGL_PREFIX(%s), .-GL_PREFIX(%s)' % (f.name, f.name)
+               print '\t.size\tGL_PREFIX(%s), .-GL_PREFIX(%s)' % (name, name)
                print ''
                return
 
@@ -280,9 +290,18 @@ class PrintGenericStubs(gl_XML.gl_print_base):
 
 
                for f in api.functionIterateByOffset():
+                       dispatch = f.dispatch_name()
                        for n in f.entry_points:
                                if n != f.name:
-                                       print '\t.globl GL_PREFIX(%s) ; .set GL_PREFIX(%s), GL_PREFIX(%s)' % (n, n, f.name)
+                                       if f.is_static_entry_point(n):
+                                               text = '\t.globl GL_PREFIX(%s) ; .set GL_PREFIX(%s), GL_PREFIX(%s)' % (n, n, dispatch)
+
+                                               if f.has_different_protocol(n):
+                                                       print '#ifndef GLX_INDIRECT_RENDERING'
+                                                       print text
+                                                       print '#endif'
+                                               else:
+                                                       print text
 
                return
 
@@ -311,6 +330,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)