diff options
author | Kendall Bennett <[email protected]> | 2003-10-22 21:02:15 +0000 |
---|---|---|
committer | Kendall Bennett <[email protected]> | 2003-10-22 21:02:15 +0000 |
commit | 15c37348a5d47ece17ffef38978aa8253363e6ee (patch) | |
tree | 9158589d812955dbb7a8c4b210e592de6cc255c9 /src/mesa/glapi/glx86asm.py | |
parent | 23f45833aa6c9b90f48ce5aa08dca6dadc49f62f (diff) |
More SciTech SNAP updates. Some of these files didn't really change, but
they show up in the list (GLU stuff) for some reason. The major change
here is the addition of code in the glx86asm.py file to generate assembler
stub entry points with the correct name decorations for _stdcall calling
conventions so this can be used on Windows boxes.
Diffstat (limited to 'src/mesa/glapi/glx86asm.py')
-rw-r--r-- | src/mesa/glapi/glx86asm.py | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/src/mesa/glapi/glx86asm.py b/src/mesa/glapi/glx86asm.py index ea0479720de..f070c23ea18 100644 --- a/src/mesa/glapi/glx86asm.py +++ b/src/mesa/glapi/glx86asm.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# $Id: glx86asm.py,v 1.7 2003/10/14 23:47:21 kendallb Exp $ +# $Id: glx86asm.py,v 1.8 2003/10/22 21:02:15 kendallb Exp $ # Mesa 3-D graphics library # Version: 4.1 @@ -43,11 +43,13 @@ def PrintHead(): print '#include "glapioffsets.h"' print '' print '#ifndef __WIN32__' - print '' - print '#if defined(USE_MGL_NAMESPACE)' - print '#define GL_PREFIX(n) GLNAME(CONCAT(mgl,n))' + print '' + print '#if defined(STDCALL_API)' + print '#define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n2))' + print '#elif defined(USE_MGL_NAMESPACE)' + print '#define GL_PREFIX(n,n2) GLNAME(CONCAT(mgl,n))' print '#else' - print '#define GL_PREFIX(n) GLNAME(CONCAT(gl,n))' + print '#define GL_PREFIX(n,n2) GLNAME(CONCAT(gl,n))' print '#endif' print '' print '#define GL_OFFSET(x) CODEPTR(REGOFF(4 * x, EAX))' @@ -84,6 +86,19 @@ def FindOffset(funcName): return -1 #enddef +# Find the size of the arguments on the stack for _stdcall name mangling +def FindStackSize(typeList): + result = 0 + for typ in typeList: + if typ == 'GLdouble' or typ == 'GLclampd': + result += 8; + else: + result += 4; + #endif + #endfor + return result +#enddef + def EmitFunction(name, returnType, argTypeList, argNameList, alias, offset): argList = apiparser.MakeArgList(argTypeList, argNameList) if alias != '': @@ -105,18 +120,18 @@ def EmitFunction(name, returnType, argTypeList, argNameList, alias, offset): # save this info in case we need to look up an alias later records.append((name, dispatchName, offset)) + # Find the argument stack size for _stdcall name mangling + stackSize = FindStackSize(argTypeList) + # print the assembly code print 'ALIGNTEXT16' - print "GLOBL_FN(GL_PREFIX(%s))" % (name) - print "GL_PREFIX(%s):" % (name) + print "GLOBL_FN(GL_PREFIX(%s,%s@%s))" % (name, name, stackSize) + print "GL_PREFIX(%s,%s@%s):" % (name, name, stackSize) print '\tMOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX)' print "\tJMP(GL_OFFSET(_gloffset_%s))" % (dispatchName) print '' - #enddef - - PrintHead() apiparser.ProcessSpecFile("APIspec", EmitFunction) PrintTail() |