summaryrefslogtreecommitdiff
path: root/src/mesa/sparc/sparc.c
diff options
context:
space:
mode:
authordavem69 <davem69>2001-06-05 23:54:00 +0000
committerdavem69 <davem69>2001-06-05 23:54:00 +0000
commit775355a88a0927e2e3a855036c26950397a61d7b (patch)
tree21cb0c4eb6e3829ccfb3099933cfd80921516ef0 /src/mesa/sparc/sparc.c
parent0fab0702b03a0036e20cd823ad31bdc361f8fc1b (diff)
Sparc optimized GLAPI dispatch table.
Diffstat (limited to 'src/mesa/sparc/sparc.c')
-rw-r--r--src/mesa/sparc/sparc.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/mesa/sparc/sparc.c b/src/mesa/sparc/sparc.c
index 29bb32bec4..c25a758a73 100644
--- a/src/mesa/sparc/sparc.c
+++ b/src/mesa/sparc/sparc.c
@@ -1,4 +1,4 @@
-/* $Id: sparc.c,v 1.2 2001/05/23 14:42:47 brianp Exp $ */
+/* $Id: sparc.c,v 1.3 2001/06/05 23:54:01 davem69 Exp $ */
/*
* Mesa 3-D graphics library
@@ -29,7 +29,6 @@
*/
-#include "glheader.h"
#include "context.h"
#include "math/m_vertices.h"
#include "math/m_xform.h"
@@ -107,3 +106,33 @@ void _mesa_init_all_sparc_transform_asm(void)
#endif
}
+
+extern unsigned int _mesa_sparc_glapi_begin;
+extern unsigned int _mesa_sparc_glapi_end;
+
+void _mesa_init_sparc_glapi_relocs(void)
+{
+ unsigned int *insn_ptr, *end_ptr;
+ unsigned long disp_addr;
+
+ insn_ptr = &_mesa_sparc_glapi_begin;
+ end_ptr = &_mesa_sparc_glapi_end;
+ disp_addr = (unsigned long) &_glapi_Dispatch;
+
+ while (insn_ptr < end_ptr) {
+#ifdef __sparc_v9__
+ insn_ptr[0] |= (disp_addr >> (32 + 10));
+ insn_ptr[1] |= ((disp_addr & 0xffffffff) >> 10);
+ _mesa_sparc_icache_flush(&insn_ptr[0]);
+ insn_ptr[2] |= ((disp_addr >> 32) & ((1 << 10) - 1));
+ insn_ptr[3] |= (disp_addr & ((1 << 10) - 1));
+ _mesa_sparc_icache_flush(&insn_ptr[2]);
+ insn_ptr += 10;
+#else
+ insn_ptr[0] |= (disp_addr >> 10);
+ insn_ptr[1] |= (disp_addr & ((1 << 10) - 1));
+ _mesa_sparc_icache_flush(&insn_ptr[0]);
+ insn_ptr += 4;
+#endif
+ }
+}