glapi: organize arch-specific code by arch (2)
authorGeorge Sapountzis <gsapountzis@gmail.com>
Thu, 11 Mar 2010 16:04:02 +0000 (18:04 +0200)
committerGeorge Sapountzis <gsapountzis@gmail.com>
Sun, 14 Mar 2010 20:24:25 +0000 (22:24 +0200)
src/mesa/glapi/glapi_entrypoint.c

index 7fffd2986fa01adcf8f3242571322e3718ba2856..9bc38783541bc3e8b7755a50fb9014cb7ddb5358 100644 (file)
@@ -90,6 +90,55 @@ init_glapi_relocs( void )
 #endif
 }
 
+
+/**
+ * Generate a dispatch function (entrypoint) which jumps through
+ * the given slot number (offset) in the current dispatch table.
+ * We need assembly language in order to accomplish this.
+ */
+_glapi_proc
+generate_entrypoint(GLuint functionOffset)
+{
+   /* 32 is chosen as something of a magic offset.  For x86, the dispatch
+    * at offset 32 is the first one where the offset in the
+    * "jmp OFFSET*4(%eax)" can't be encoded in a single byte.
+    */
+   const GLubyte * const template_func = gl_dispatch_functions_start 
+     + (DISPATCH_FUNCTION_SIZE * 32);
+   GLubyte * const code = (GLubyte *) malloc(DISPATCH_FUNCTION_SIZE);
+
+
+   if ( code != NULL ) {
+      (void) memcpy(code, template_func, DISPATCH_FUNCTION_SIZE);
+      fill_in_entrypoint_offset( (_glapi_proc) code, functionOffset );
+   }
+
+   return (_glapi_proc) code;
+}
+
+
+/**
+ * This function inserts a new dispatch offset into the assembly language
+ * stub that was generated with the preceeding function.
+ */
+void
+fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
+{
+   GLubyte * const code = (GLubyte *) entrypoint;
+
+#if DISPATCH_FUNCTION_SIZE == 32
+   *((unsigned int *)(code + 11)) = 4 * offset;
+   *((unsigned int *)(code + 22)) = 4 * offset;
+#elif DISPATCH_FUNCTION_SIZE == 16 && defined( GLX_USE_TLS )
+   *((unsigned int *)(code +  8)) = 4 * offset;
+#elif DISPATCH_FUNCTION_SIZE == 16
+   *((unsigned int *)(code +  7)) = 4 * offset;
+#else
+# error Invalid DISPATCH_FUNCTION_SIZE!
+#endif
+}
+
+
 #elif defined(USE_SPARC_ASM)
 
 extern void __glapi_sparc_icache_flush(unsigned int *);
@@ -223,52 +272,6 @@ init_glapi_relocs( void )
 #endif
 }
 
-#else
-
-static void
-init_glapi_relocs( void ) { }
-
-#endif /* USE_*_ASM */
-
-
-void
-init_glapi_relocs_once( void )
-{
-#if defined(PTHREADS) || defined(GLX_USE_TLS)
-   static pthread_once_t once_control = PTHREAD_ONCE_INIT;
-   pthread_once( & once_control, init_glapi_relocs );
-#endif
-}
-
-
-#if defined(USE_X86_ASM)
-
-/**
- * Generate a dispatch function (entrypoint) which jumps through
- * the given slot number (offset) in the current dispatch table.
- * We need assembly language in order to accomplish this.
- */
-_glapi_proc
-generate_entrypoint(GLuint functionOffset)
-{
-   /* 32 is chosen as something of a magic offset.  For x86, the dispatch
-    * at offset 32 is the first one where the offset in the
-    * "jmp OFFSET*4(%eax)" can't be encoded in a single byte.
-    */
-   const GLubyte * const template_func = gl_dispatch_functions_start 
-     + (DISPATCH_FUNCTION_SIZE * 32);
-   GLubyte * const code = (GLubyte *) malloc(DISPATCH_FUNCTION_SIZE);
-
-
-   if ( code != NULL ) {
-      (void) memcpy(code, template_func, DISPATCH_FUNCTION_SIZE);
-      fill_in_entrypoint_offset( (_glapi_proc) code, functionOffset );
-   }
-
-   return (_glapi_proc) code;
-}
-
-#elif defined(USE_SPARC_ASM)
 
 _glapi_proc
 generate_entrypoint(GLuint functionOffset)
@@ -302,54 +305,33 @@ generate_entrypoint(GLuint functionOffset)
 #endif
 }
 
-#else
 
-_glapi_proc
-generate_entrypoint(GLuint functionOffset)
+void
+fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
 {
-   (void) functionOffset;
-   return NULL;
-}
+   unsigned int *code = (unsigned int *) entrypoint;
 
-#endif /* USE_*_ASM */
+   code[0] &= ~0x3fffff;
+   code[0] |= (offset * sizeof(void *)) & 0x3fffff;
+   __glapi_sparc_icache_flush(&code[0]);
+}
 
 
-#if defined(USE_X86_ASM)
+#else /* USE_*_ASM */
 
-/**
- * This function inserts a new dispatch offset into the assembly language
- * stub that was generated with the preceeding function.
- */
-void
-fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
+static void
+init_glapi_relocs( void )
 {
-   GLubyte * const code = (GLubyte *) entrypoint;
-
-#if DISPATCH_FUNCTION_SIZE == 32
-   *((unsigned int *)(code + 11)) = 4 * offset;
-   *((unsigned int *)(code + 22)) = 4 * offset;
-#elif DISPATCH_FUNCTION_SIZE == 16 && defined( GLX_USE_TLS )
-   *((unsigned int *)(code +  8)) = 4 * offset;
-#elif DISPATCH_FUNCTION_SIZE == 16
-   *((unsigned int *)(code +  7)) = 4 * offset;
-#else
-# error Invalid DISPATCH_FUNCTION_SIZE!
-#endif
 }
 
-#elif defined(USE_SPARC_ASM)
 
-void
-fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
+_glapi_proc
+generate_entrypoint(GLuint functionOffset)
 {
-   unsigned int *code = (unsigned int *) entrypoint;
-
-   code[0] &= ~0x3fffff;
-   code[0] |= (offset * sizeof(void *)) & 0x3fffff;
-   __glapi_sparc_icache_flush(&code[0]);
+   (void) functionOffset;
+   return NULL;
 }
 
-#else
 
 void
 fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
@@ -360,3 +342,13 @@ fill_in_entrypoint_offset(_glapi_proc entrypoint, GLuint offset)
 }
 
 #endif /* USE_*_ASM */
+
+
+void
+init_glapi_relocs_once( void )
+{
+#if defined(PTHREADS) || defined(GLX_USE_TLS)
+   static pthread_once_t once_control = PTHREAD_ONCE_INIT;
+   pthread_once( & once_control, init_glapi_relocs );
+#endif
+}