--- xc.old/extras/Mesa/src/mesa/x86/mmx_blendtmp.h 2005-05-30 22:44:48.000000000 +0100 +++ xc/extras/Mesa/src/mesa/x86/mmx_blendtmp.h 2005-05-30 23:03:06.000000000 +0100 @@ -14,6 +14,11 @@ ALIGNTEXT16 GLOBL GLNAME( TAG(_mesa_mmx_blend) ) +LLBL( TAG(mesa_mmx_blend_get_eip) ): + /* store eip in edx */ + MOV_L ( REGIND(ESP), EDX ) + RET + GLNAME( TAG(_mesa_mmx_blend) ): PUSH_L ( EBP ) @@ -30,6 +35,9 @@ GLNAME( TAG(_mesa_mmx_blend) ): MOV_L ( REGOFF(20, EBP), EDI ) /* rgba */ MOV_L ( REGOFF(24, EBP), ESI ) /* dest */ + CALL ( LLBL( TAG(mesa_mmx_blend_get_eip) ) ) + ADD_L ( CONST(_GLOBAL_OFFSET_TABLE_), EDX ) + INIT TEST_L ( CONST(4), EDI ) /* align rgba on an 8-byte boundary */ --- xc.old/extras/Mesa/src/mesa/x86/mmx_blend.S 2005-05-30 22:44:44.000000000 +0100 +++ xc/extras/Mesa/src/mesa/x86/mmx_blend.S 2005-05-30 23:10:00.000000000 +0100 @@ -302,8 +302,10 @@ TWO(MOVQ ( MM1, REGIND(rgba) )) #define TAG(x) CONCAT(x,_min) #define LLTAG(x) LLBL2(x,_min) +//MOV_L ( REGOFF(xxxxx@GOT, EDX), EDX ) + #define INIT \ - MOVQ ( CONTENT(const_80), MM7 ) /* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/ + MOVQ ( CONTENT ( REGOFF(const_80@GOTOFF, EDX) ), MM7 ) /* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/ #define MAIN( rgba, dest ) \ GMB_LOAD( rgba, dest, MM1, MM2 ) ;\ @@ -327,7 +329,7 @@ TWO(MOVQ ( MM1, REGIND(rgba) )) #define LLTAG(x) LLBL2(x,_max) #define INIT \ - MOVQ ( CONTENT(const_80), MM7 ) /* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/ + MOVQ ( CONTENT ( REGOFF(const_80@GOTOFF, EDX) ), MM7 ) /* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/ #define MAIN( rgba, dest ) \ GMB_LOAD( rgba, dest, MM1, MM2 ) ;\ @@ -352,7 +354,7 @@ TWO(MOVQ ( MM1, REGIND(rgba) )) #define INIT \ PXOR ( MM0, MM0 ) /* 0x0000 | 0x0000 | 0x0000 | 0x0000 */ ;\ - MOVQ ( CONTENT(const_0080), MM7 ) /* 0x0080 | 0x0080 | 0x0080 | 0x0080 */ + MOVQ ( CONTENT (REGOFF(const_0080@GOTOFF, EDX) ), MM7 ) /* 0x0080 | 0x0080 | 0x0080 | 0x0080 */ #define MAIN( rgba, dest ) \ GMB_LOAD( rgba, dest, MM1, MM2 ) ;\ --- xc.old/extras/Mesa/src/mesa/x86/glapi_x86.S 2005-05-30 23:26:58.000000000 +0100 +++ xc/extras/Mesa/src/mesa/x86/glapi_x86.S 2005-05-30 23:48:04.000000000 +0100 @@ -57,12 +57,20 @@ # define THREADS #endif +GL_PREFIX(get_eip, get_eip): + /* store eip in eax */ + MOV_L( REGIND(ESP), EAX ) + RET + #if defined(PTHREADS) # define GL_STUB(fn,off,fn_alt) \ ALIGNTEXT16; \ GLOBL_FN(GL_PREFIX(fn, fn_alt)); \ GL_PREFIX(fn, fn_alt): \ - MOV_L(CONTENT(GLNAME(_glapi_DispatchTSD)), EAX) ; \ + CALL(GL_PREFIX(get_eip, get_eip)) ; \ + ADD_L(CONST(_GLOBAL_OFFSET_TABLE_), EAX) ; \ + LEA_L(REGOFF(GLNAME(_glapi_DispatchTSD)@GOT, EAX), EAX) ; \ + MOV_L(REGIND(EAX), EAX) ; \ TEST_L(EAX, EAX) ; \ JE(1f) ; \ JMP(GL_OFFSET(off)) ; \ @@ -73,7 +81,9 @@ GL_PREFIX(fn, fn_alt): \ ALIGNTEXT16; \ GLOBL_FN(GL_PREFIX(fn, fn_alt)); \ GL_PREFIX(fn, fn_alt): \ - MOV_L(CONTENT(GLNAME(_glapi_DispatchTSD)), EAX) ; \ + CALL(GL_PREFIX(get_eip, get_eip)) ; \ + ADD_L(CONST(_GLOBAL_OFFSET_TABLE_), EAX) ; \ + MOV_L(REGOFF(GLNAME(_glapi_DispatchTSD)@GOTOFF, EAX), EAX) ; \ TEST_L(EAX, EAX) ; \ JE(1f) ; \ JMP(GL_OFFSET(off)) ; \ @@ -84,7 +94,10 @@ GL_PREFIX(fn, fn_alt): \ ALIGNTEXT16; \ GLOBL_FN(GL_PREFIX(fn, fn_alt)); \ GL_PREFIX(fn, fn_alt): \ - MOV_L(CONTENT(GLNAME(_glapi_Dispatch)), EAX) ; \ + CALL(GL_PREFIX(get_eip, get_eip)) ; \ + ADD_L(CONST(_GLOBAL_OFFSET_TABLE_), EAX) ; \ + LEA_L(REGOFF(GLNAME(_glapi_Dispatch)@GOT, EAX), EAX) ; \ + MOV_L(REGIND(EAX), EAX) ; \ JMP(GL_OFFSET(off)) #endif