~ubuntu-branches/ubuntu/quantal/mesa/quantal

« back to all changes in this revision

Viewing changes to src/mesa/glapi/gl_SPARC_asm.py

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2007-02-21 12:44:07 UTC
  • mfrom: (1.2.1 upstream)
  • mto: This revision was merged to the branch mainline in revision 22.
  • Revision ID: james.westby@ubuntu.com-20070221124407-rgcacs32mycrtadl
ImportĀ upstreamĀ versionĀ 6.5.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
 
3
 
# (C) Copyright IBM Corporation 2004
4
 
# All Rights Reserved.
5
 
#
6
 
# Permission is hereby granted, free of charge, to any person obtaining a
7
 
# copy of this software and associated documentation files (the "Software"),
8
 
# to deal in the Software without restriction, including without limitation
9
 
# on the rights to use, copy, modify, merge, publish, distribute, sub
10
 
# license, and/or sell copies of the Software, and to permit persons to whom
11
 
# the Software is furnished to do so, subject to the following conditions:
12
 
#
13
 
# The above copyright notice and this permission notice (including the next
14
 
# paragraph) shall be included in all copies or substantial portions of the
15
 
# Software.
16
 
#
17
 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
 
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
 
# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
20
 
# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
 
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
 
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
23
 
# IN THE SOFTWARE.
24
 
#
25
 
# Authors:
26
 
#    Ian Romanick <idr@us.ibm.com>
27
 
 
28
 
import gl_XML, license
29
 
import sys, getopt
30
 
 
31
 
class PrintGenericStubs(gl_XML.gl_print_base):
32
 
        def __init__(self):
33
 
                gl_XML.gl_print_base.__init__(self)
34
 
                self.name = "gl_SPARC_asm.py (from Mesa)"
35
 
                self.license = license.bsd_license_template % ( \
36
 
"""Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
37
 
(C) Copyright IBM Corporation 2004""", "BRIAN PAUL, IBM")
38
 
 
39
 
 
40
 
        def printRealHeader(self):
41
 
                print '#include "glapioffsets.h"'
42
 
                print ''
43
 
                print '#ifdef __arch64__'
44
 
                print '#  define GL_STUB(fn,off)\t\t\t\t\\'
45
 
                print 'fn:\t\t\t\t\t\\'
46
 
                print '\tsethi\t%hi(0xDEADBEEF), %g4 ;\t\t\t\\'
47
 
                print '\tsethi\t%hi(0xDEADBEEF), %g1 ;\t\t\t\\'
48
 
                print '\tor\t%g4, %lo(0xDEADBEEF), %g4 ;\t\t\\'
49
 
                print '\tor\t%g1, %lo(0xDEADBEEF), %g1 ;\t\t\\'
50
 
                print '\tsllx\t%g4, 32, %g4 ;\t\t\t\t\\'
51
 
                print '\tldx\t[%g1 + %g4], %g1 ;\t\t\t\\'
52
 
                print '\tsethi\t%hi(8 * off), %g4 ;\t\t\t\\'
53
 
                print '\tor\t%g4, %lo(8 * off), %g4 ;\t\t\\'
54
 
                print '\tldx\t[%g1 + %g4], %g5 ;\t\t\t\\'
55
 
                print '\tjmpl\t%g5, %g0 ;\t\t\t\t\\'
56
 
                print '\tnop'
57
 
                print '#else'
58
 
                print '#  define GL_STUB(fn,off)\t\t\t\t\\'
59
 
                print 'fn:\t\t\t\t\t\\'
60
 
                print '\tsethi\t%hi(0xDEADBEEF), %g1 ;\t\t\t\\'
61
 
                print '\tld\t[%g1 + %lo(0xDEADBEEF)], %g1 ;\t\t\\'
62
 
                print '\tld\t[%g1 + (4 * off)], %g5 ;\t\t\\'
63
 
                print '\tjmpl\t%g5, %g0 ;\t\t\t\t\\'
64
 
                print '\tnop'
65
 
                print '#endif'
66
 
                print ''
67
 
                print '#define GL_STUB_ALIAS(fn,alias) fn = alias'
68
 
                print ''
69
 
                print '.text'
70
 
                print '.align 32'
71
 
                print '\t\t.globl __glapi_sparc_icache_flush ; .type __glapi_sparc_icache_flush,#function'
72
 
                print '__glapi_sparc_icache_flush: /* %o0 = insn_addr */'
73
 
                print '\tflush\t%o0'
74
 
                print '\tretl'
75
 
                print '\tnop'
76
 
                print ''
77
 
                print '.data'
78
 
                print '.align 64'
79
 
                print ''
80
 
                return
81
 
 
82
 
 
83
 
        def printBody(self, api):
84
 
                for f in api.functionIterateByOffset():
85
 
                        print '\t\t.globl gl%s ; .type gl%s,#function' % (f.name, f.name)
86
 
 
87
 
                print '\t\t.globl _mesa_sparc_glapi_begin ; .type _mesa_sparc_glapi_begin,#function'
88
 
                print '_mesa_sparc_glapi_begin:'
89
 
                print ''
90
 
 
91
 
                for f in api.functionIterateByOffset():
92
 
                        print '\tGL_STUB(gl%s, _gloffset_%s)' % (f.name, f.name)
93
 
 
94
 
                print ''
95
 
                print '\t\t.globl _mesa_sparc_glapi_end ; .type _mesa_sparc_glapi_end,#function'
96
 
                print '_mesa_sparc_glapi_end:'
97
 
                print ''
98
 
 
99
 
 
100
 
                for f in api.functionIterateByOffset():
101
 
                        for n in f.entry_points:
102
 
                                if n != f.name:
103
 
                                        print '\t.globl gl%s ; .type gl%s,#function ; gl%s = gl%s' % (n, n, n, f.name)
104
 
 
105
 
                return
106
 
 
107
 
 
108
 
def show_usage():
109
 
        print "Usage: %s [-f input_file_name] [-m output_mode]" % sys.argv[0]
110
 
        sys.exit(1)
111
 
 
112
 
if __name__ == '__main__':
113
 
        file_name = "gl_API.xml"
114
 
        mode = "generic"
115
 
 
116
 
        try:
117
 
                (args, trail) = getopt.getopt(sys.argv[1:], "m:f:")
118
 
        except Exception,e:
119
 
                show_usage()
120
 
 
121
 
        for (arg,val) in args:
122
 
                if arg == '-m':
123
 
                        mode = val
124
 
                elif arg == "-f":
125
 
                        file_name = val
126
 
 
127
 
        if mode == "generic":
128
 
                printer = PrintGenericStubs()
129
 
        else:
130
 
                print "ERROR: Invalid mode \"%s\" specified." % mode
131
 
                show_usage()
132
 
 
133
 
        api = gl_XML.parse_GL_API( file_name )
134
 
 
135
 
        printer.Print( api )