ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

mmx_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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.