Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmmx_blendtmp.h
Go to the documentation of this file.
00001 /* 00002 * Written by José Fonseca <j_r_fonseca@yahoo.co.uk> 00003 */ 00004 00005 00006 /* 00007 * void _mesa_mmx_blend( GLcontext *ctx, 00008 * GLuint n, 00009 * const GLubyte mask[], 00010 * GLchan rgba[][4], 00011 * CONST GLchan dest[][4] ) 00012 * 00013 */ 00014 ALIGNTEXT16 00015 GLOBL GLNAME( TAG(_mesa_mmx_blend) ) 00016 HIDDEN( TAG(_mesa_mmx_blend) ) 00017 GLNAME( TAG(_mesa_mmx_blend) ): 00018 00019 PUSH_L ( EBP ) 00020 MOV_L ( ESP, EBP ) 00021 PUSH_L ( ESI ) 00022 PUSH_L ( EDI ) 00023 PUSH_L ( EBX ) 00024 00025 MOV_L ( REGOFF(12, EBP), ECX ) /* n */ 00026 CMP_L ( CONST(0), ECX) 00027 JE ( LLTAG(GMB_return) ) 00028 00029 MOV_L ( REGOFF(16, EBP), EBX ) /* mask */ 00030 MOV_L ( REGOFF(20, EBP), EDI ) /* rgba */ 00031 MOV_L ( REGOFF(24, EBP), ESI ) /* dest */ 00032 00033 INIT 00034 00035 TEST_L ( CONST(4), EDI ) /* align rgba on an 8-byte boundary */ 00036 JZ ( LLTAG(GMB_align_end) ) 00037 00038 CMP_B ( CONST(0), REGIND(EBX) ) /* *mask == 0 */ 00039 JE ( LLTAG(GMB_align_continue) ) 00040 00041 /* runin */ 00042 #define ONE(x) x 00043 #define TWO(x) 00044 MAIN ( EDI, ESI ) 00045 #undef ONE 00046 #undef TWO 00047 00048 LLTAG(GMB_align_continue): 00049 00050 DEC_L ( ECX ) /* n -= 1 */ 00051 INC_L ( EBX ) /* mask += 1 */ 00052 ADD_L ( CONST(4), EDI ) /* rgba += 1 */ 00053 ADD_L ( CONST(4), ESI ) /* dest += 1 */ 00054 00055 LLTAG(GMB_align_end): 00056 00057 CMP_L ( CONST(2), ECX) 00058 JB ( LLTAG(GMB_loop_end) ) 00059 00060 ALIGNTEXT16 00061 LLTAG(GMB_loop_begin): 00062 00063 CMP_W ( CONST(0), REGIND(EBX) ) /* *mask == 0 && *(mask + 1) == 0 */ 00064 JE ( LLTAG(GMB_loop_continue) ) 00065 00066 /* main loop */ 00067 #define ONE(x) 00068 #define TWO(x) x 00069 MAIN ( EDI, ESI ) 00070 #undef ONE 00071 #undef TWO 00072 00073 LLTAG(GMB_loop_continue): 00074 00075 DEC_L ( ECX ) 00076 DEC_L ( ECX ) /* n -= 2 */ 00077 ADD_L ( CONST(2), EBX ) /* mask += 2 */ 00078 ADD_L ( CONST(8), EDI ) /* rgba += 2 */ 00079 ADD_L ( CONST(8), ESI ) /* dest += 2 */ 00080 CMP_L ( CONST(2), ECX ) 00081 JAE ( LLTAG(GMB_loop_begin) ) 00082 00083 LLTAG(GMB_loop_end): 00084 00085 CMP_L ( CONST(1), ECX ) 00086 JB ( LLTAG(GMB_done) ) 00087 00088 CMP_B ( CONST(0), REGIND(EBX) ) /* *mask == 0 */ 00089 JE ( LLTAG(GMB_done) ) 00090 00091 /* runout */ 00092 #define ONE(x) x 00093 #define TWO(x) 00094 MAIN ( EDI, ESI ) 00095 #undef ONE 00096 #undef TWO 00097 00098 LLTAG(GMB_done): 00099 00100 EMMS 00101 00102 LLTAG(GMB_return): 00103 00104 POP_L ( EBX ) 00105 POP_L ( EDI ) 00106 POP_L ( ESI ) 00107 MOV_L ( EBP, ESP ) 00108 POP_L ( EBP ) 00109 RET 00110 00111 #undef TAG 00112 #undef LLTAG 00113 #undef INIT 00114 #undef MAIN Generated on Sun May 27 2012 04:20:49 for ReactOS by
1.7.6.1
|