blob: 7bd9ec3d2465500d64fbe9d8ddea351a88766b76 [file] [log] [blame]
#include "assyntax.h"
#if !defined(NASM_ASSEMBLER) && !defined(MASM_ASSEMBLER)
#define LLBL(a) .L ## a
#else
#define LLBL(a) a
#endif
SEG_TEXT
ALIGNTEXT16
GLOBL GLNAME(gl_mmx_blend_transparency)
GLNAME( gl_mmx_blend_transparency ):
PUSH_L ( EBP )
MOV_L ( ESP, EBP )
SUB_L ( CONST(52), ESP )
PUSH_L ( EBX )
MOV_L ( CONST(16711680), REGOFF(-8, EBP) )
MOV_L ( CONST(16711680), REGOFF(-4, EBP) )
MOV_L ( CONST(0), REGOFF(-16, EBP) )
MOV_L ( CONST(-1), REGOFF(-12, EBP) )
MOV_L ( CONST(-1), REGOFF(-24, EBP) )
MOV_L ( CONST(0), REGOFF(-20, EBP) )
MOV_L ( REGOFF(24, EBP), EAX )
ADD_L ( CONST(4), EAX )
MOV_L ( EAX, EDX )
AND_L ( REGOFF(20, EBP), EDX )
MOV_L ( EDX, EAX )
AND_L ( CONST(4), EAX )
CMP_L ( CONST(8), EAX )
JNE ( LLBL(GMBT_2) )
MOV_L ( REGOFF(20, EBP), EAX )
ADD_L ( CONST(3), EAX )
XOR_L ( EDX, EDX )
MOV_B ( REGIND(EAX), DL )
MOV_L ( EDX, REGOFF(-32, EBP) )
MOV_L ( CONST(255), EAX )
MOV_L ( EAX, EBX )
SUB_L ( REGOFF(-32, EBP), EBX )
MOV_L ( EBX, REGOFF(-36, EBP) )
MOV_L ( REGOFF(20, EBP), EAX )
XOR_L ( EDX, EDX )
MOV_B ( REGIND(EAX), DL )
MOV_L ( EDX, EAX )
IMUL_L ( REGOFF(-32, EBP), EAX )
MOV_L ( REGOFF(24, EBP), EDX )
XOR_L ( ECX, ECX )
MOV_B ( REGIND(EDX), CL )
MOV_L ( ECX, EDX )
IMUL_L ( REGOFF(-36, EBP), EDX )
ADD_L ( EDX, EAX )
MOV_L ( EAX, EBX )
SAR_L ( CONST(8), EBX )
MOV_L ( EBX, REGOFF(-40, EBP) )
MOV_L ( REGOFF(20, EBP), EAX )
INC_L ( EAX )
XOR_L ( EDX, EDX )
MOV_B ( REGIND(EAX), DL )
MOV_L ( EDX, EAX )
IMUL_L ( REGOFF(-32, EBP), EAX )
MOV_L ( REGOFF(24, EBP), EDX )
INC_L ( EDX )
XOR_L ( ECX, ECX )
MOV_B ( REGIND(EDX), CL )
MOV_L ( ECX, EDX )
IMUL_L ( REGOFF(-36, EBP), EDX )
ADD_L ( EDX, EAX )
MOV_L ( EAX, EBX )
SAR_L ( CONST(8), EBX )
MOV_L ( EBX, REGOFF(-44, EBP) )
MOV_L ( REGOFF(20, EBP), EAX )
ADD_L ( CONST(2), EAX )
XOR_L ( EDX, EDX )
MOV_B ( REGIND(EAX), DL )
MOV_L ( EDX, EAX )
IMUL_L ( REGOFF(-32, EBP), EAX )
MOV_L ( REGOFF(24, EBP), EDX )
ADD_L ( CONST(2), EDX )
XOR_L ( ECX, ECX )
MOV_B ( REGIND(EDX), CL )
MOV_L ( ECX, EDX )
IMUL_L ( REGOFF(-36, EBP), EDX )
ADD_L ( EDX, EAX )
MOV_L ( EAX, EBX )
SAR_L ( CONST(8), EBX )
MOV_L ( EBX, REGOFF(-48, EBP) )
MOV_L ( REGOFF(20, EBP), EAX )
ADD_L ( CONST(3), EAX )
XOR_L ( EDX, EDX )
MOV_B ( REGIND(EAX), DL )
MOV_L ( EDX, EAX )
IMUL_L ( REGOFF(-32, EBP), EAX )
MOV_L ( REGOFF(24, EBP), EDX )
ADD_L ( CONST(3), EDX )
XOR_L ( ECX, ECX )
MOV_B ( REGIND(EDX), CL )
MOV_L ( ECX, EDX )
IMUL_L ( REGOFF(-36, EBP), EDX )
ADD_L ( EDX, EAX )
MOV_L ( EAX, EBX )
SAR_L ( CONST(8), EBX )
MOV_L ( EBX, REGOFF(-52, EBP) )
MOV_L ( REGOFF(20, EBP), EAX )
MOV_B ( REGOFF(-40, EBP), DL )
MOV_B ( DL, REGIND(EAX) )
MOV_L ( REGOFF(20, EBP), EAX )
INC_L ( EAX )
MOV_B ( REGOFF(-44, EBP), DL )
MOV_B ( DL, REGIND(EAX) )
MOV_L ( REGOFF(20, EBP), EAX )
ADD_L ( CONST(2), EAX )
MOV_B ( REGOFF(-48, EBP), DL )
MOV_B ( DL, REGIND(EAX) )
MOV_L ( REGOFF(20, EBP), EAX )
ADD_L ( CONST(3), EAX )
MOV_B ( REGOFF(-52, EBP), DL )
MOV_B ( DL, REGIND(EAX) )
INC_L ( REGOFF(16, EBP) )
ADD_L ( CONST(4), REGOFF(20, EBP) )
ADD_L ( CONST(4), REGOFF(24, EBP) )
DEC_L ( REGOFF(12, EBP) )
LLBL( GMBT_2 ):
CMP_L ( CONST(0), REGOFF(12, EBP) )
JE ( LLBL(GMBT_3) )
MOV_L ( CONST(0), REGOFF(-28, EBP) )
ALIGNTEXT4
LLBL( GMBT_4 ):
MOV_L ( REGOFF(12, EBP), EDX )
MOV_L ( EDX, EAX )
SHR_L ( CONST(1), EAX )
CMP_L ( EAX, REGOFF(-28, EBP) )
JB ( LLBL(GMBT_7) )
JMP ( LLBL(GMBT_5) )
ALIGNTEXT16
LLBL( GMBT_7 ):
MOV_L ( REGOFF(-28, EBP), EAX )
LEA_L ( REGDIS(0,EAX,2), EDX )
MOV_L ( REGOFF(16, EBP), EAX )
CMP_B ( CONST(0), REGBI(EAX,EDX) )
JE ( LLBL(GMBT_6) )
MOV_L ( REGOFF(-28, EBP), EAX )
MOV_L ( EAX, EDX )
LEA_L ( REGDIS(0,EDX,8), ECX )
MOV_L ( ECX, EAX )
ADD_L ( REGOFF(20, EBP), EAX )
MOV_L ( REGOFF(-28, EBP), EDX )
MOV_L ( EDX, ECX )
LEA_L ( REGDIS(0,ECX,8), EDX )
MOV_L ( EDX, ECX )
ADD_L ( REGOFF(24, EBP), ECX )
MOVQ ( REGIND(EAX), MM4 )
PXOR ( MM5, MM5 )
MOVQ ( MM4, MM1 )
MOVQ ( REGIND(ECX), MM7 )
PUNPCKLBW ( MM5, MM1 )
MOVQ ( MM7, MM6 )
MOVQ ( MM1, MM0 )
PUNPCKLBW ( MM5, MM6 )
MOVQ ( MM1, MM2 )
PSRLQ ( CONST(48), MM0 )
PUNPCKHBW ( MM5, MM4 )
PACKSSDW ( MM0, MM0 )
MOVQ ( MM0, MM3 )
PUNPCKHBW ( MM5, MM7 )
PSLLQ ( CONST(16), MM3 )
POR ( REGOFF(-8, EBP), MM0 )
PUNPCKLWD ( MM6, MM1 )
PSUBW ( MM3, MM0 )
PUNPCKHWD ( MM6, MM2 )
MOVQ ( MM4, MM3 )
PSRLQ ( CONST(48), MM3 )
PACKSSDW ( MM3, MM3 )
MOVQ ( MM3, MM6 )
POR ( REGOFF(-8, EBP), MM3 )
PSLLQ ( CONST(16), MM6 )
PSUBW ( MM6, MM3 )
MOVQ ( MM4, MM5 )
PUNPCKLWD ( MM7, MM4 )
PUNPCKHWD ( MM7, MM5 )
PMADDWD ( MM0, MM1 )
PMADDWD ( MM3, MM4 )
PMADDWD ( MM0, MM2 )
PMADDWD ( MM3, MM5 )
PSRLD ( CONST(8), MM1 )
PSRLD ( CONST(8), MM2 )
PSRLD ( CONST(8), MM4 )
PACKSSDW ( MM2, MM1 )
PSRLD ( CONST(8), MM5 )
PACKUSWB ( MM1, MM1 )
PACKSSDW ( MM5, MM4 )
PAND ( REGOFF(-24, EBP), MM1 )
PACKUSWB ( MM4, MM4 )
PAND ( REGOFF(-16, EBP), MM4 )
POR ( MM1, MM4 )
MOVQ ( MM4, REGIND(EAX) )
LLBL( GMBT_8 ):
LLBL( GMBT_6 ):
INC_L ( REGOFF(-28, EBP) )
JMP ( LLBL(GMBT_4) )
ALIGNTEXT16
LLBL( GMBT_5 ):
EMMS
LLBL( GMBT_3 ):
MOV_L ( REGOFF(12, EBP), EAX )
AND_L ( CONST(1), EAX )
TEST_L ( EAX, EAX )
JE ( LLBL(GMBT_9) )
MOV_L ( REGOFF(12, EBP), EAX )
LEA_L ( REGDIS(0,EAX,4), EDX )
MOV_L ( EDX, EAX )
ADD_L ( REGOFF(20, EBP), EAX )
LEA_L ( REGOFF(-1, EAX), EDX )
XOR_L ( EAX, EAX )
MOV_B ( REGIND(EDX), AL )
MOV_L ( EAX, REGOFF(-52, EBP) )
MOV_L ( CONST(255), EAX )
MOV_L ( EAX, EBX )
SUB_L ( REGOFF(-52, EBP), EBX )
MOV_L ( EBX, REGOFF(-48, EBP) )
MOV_L ( REGOFF(12, EBP), EAX )
LEA_L ( REGDIS(0,EAX,4), EDX )
MOV_L ( EDX, EAX )
ADD_L ( REGOFF(20, EBP), EAX )
LEA_L ( REGOFF(-4, EAX), EDX )
XOR_L ( ECX, ECX )
MOV_B ( REGIND(EDX), CL )
MOV_L ( ECX, EAX )
IMUL_L ( REGOFF(-52, EBP), EAX )
MOV_L ( REGOFF(12, EBP), EDX )
LEA_L ( REGDIS(0,EDX,4), ECX )
MOV_L ( ECX, EDX )
ADD_L ( REGOFF(24, EBP), EDX )
LEA_L ( REGOFF(-4, EDX), ECX )
XOR_L ( EDX, EDX )
MOV_B ( REGIND(ECX), DL )
MOV_L ( EDX, ECX )
IMUL_L ( REGOFF(-48, EBP), ECX )
ADD_L ( ECX, EAX )
MOV_L ( EAX, EBX )
SAR_L ( CONST(8), EBX )
MOV_L ( EBX, REGOFF(-44, EBP) )
MOV_L ( REGOFF(12, EBP), EAX )
LEA_L ( REGDIS(0,EAX,4), EDX )
MOV_L ( EDX, EAX )
ADD_L ( REGOFF(20, EBP), EAX )
LEA_L ( REGOFF(-3, EAX), EDX )
XOR_L ( ECX, ECX )
MOV_B ( REGIND(EDX), CL )
MOV_L ( ECX, EAX )
IMUL_L ( REGOFF(-52, EBP), EAX )
MOV_L ( REGOFF(12, EBP), EDX )
LEA_L ( REGDIS(0,EDX,4), ECX )
MOV_L ( ECX, EDX )
ADD_L ( REGOFF(24, EBP), EDX )
LEA_L ( REGOFF(-3, EDX), ECX )
XOR_L ( EDX, EDX )
MOV_B ( REGIND(ECX), DL )
MOV_L ( EDX, ECX )
IMUL_L ( REGOFF(-48, EBP), ECX )
ADD_L ( ECX, EAX )
MOV_L ( EAX, EBX )
SAR_L ( CONST(8), EBX )
MOV_L ( EBX, REGOFF(-40, EBP) )
MOV_L ( REGOFF(12, EBP), EAX )
LEA_L ( REGDIS(0,EAX,4), EDX )
MOV_L ( EDX, EAX )
ADD_L ( REGOFF(20, EBP), EAX )
LEA_L ( REGOFF(-2, EAX), EDX )
XOR_L ( ECX, ECX )
MOV_B ( REGIND(EDX), CL )
MOV_L ( ECX, EAX )
IMUL_L ( REGOFF(-52, EBP), EAX )
MOV_L ( REGOFF(12, EBP), EDX )
LEA_L ( REGDIS(0,EDX,4), ECX )
MOV_L ( ECX, EDX )
ADD_L ( REGOFF(24, EBP), EDX )
LEA_L ( REGOFF(-2, EDX), ECX )
XOR_L ( EDX, EDX )
MOV_B ( REGIND(ECX), DL )
MOV_L ( EDX, ECX )
IMUL_L ( REGOFF(-48, EBP), ECX )
ADD_L ( ECX, EAX )
MOV_L ( EAX, EBX )
SAR_L ( CONST(8), EBX )
MOV_L ( EBX, REGOFF(-36, EBP) )
MOV_L ( REGOFF(12, EBP), EAX )
LEA_L ( REGDIS(0,EAX,4), EDX )
MOV_L ( EDX, EAX )
ADD_L ( REGOFF(20, EBP), EAX )
LEA_L ( REGOFF(-1, EAX), EDX )
XOR_L ( ECX, ECX )
MOV_B ( REGIND(EDX), CL )
MOV_L ( ECX, EAX )
IMUL_L ( REGOFF(-52, EBP), EAX )
MOV_L ( REGOFF(12, EBP), EDX )
LEA_L ( REGDIS(0,EDX,4), ECX )
MOV_L ( ECX, EDX )
ADD_L ( REGOFF(24, EBP), EDX )
LEA_L ( REGOFF(-1, EDX), ECX )
XOR_L ( EDX, EDX )
MOV_B ( REGIND(ECX), DL )
MOV_L ( EDX, ECX )
IMUL_L ( REGOFF(-48, EBP), ECX )
ADD_L ( ECX, EAX )
MOV_L ( EAX, EBX )
SAR_L ( CONST(8), EBX )
MOV_L ( EBX, REGOFF(-32, EBP) )
MOV_L ( REGOFF(12, EBP), EAX )
LEA_L ( REGDIS(0,EAX,4), EDX )
MOV_L ( EDX, EAX )
ADD_L ( REGOFF(20, EBP), EAX )
LEA_L ( REGOFF(-4, EAX), EDX )
MOV_B ( REGOFF(-44, EBP), AL )
MOV_B ( AL, REGIND(EDX) )
MOV_L ( REGOFF(12, EBP), EAX )
LEA_L ( REGDIS(0,EAX,4), EDX )
MOV_L ( EDX, EAX )
ADD_L ( REGOFF(20, EBP), EAX )
LEA_L ( REGOFF(-3, EAX), EDX )
MOV_B ( REGOFF(-40, EBP), AL )
MOV_B ( AL, REGIND(EDX) )
MOV_L ( REGOFF(12, EBP), EAX )
LEA_L ( REGDIS(0,EAX,4), EDX )
MOV_L ( EDX, EAX )
ADD_L ( REGOFF(20, EBP), EAX )
LEA_L ( REGOFF(-2, EAX), EDX )
MOV_B ( REGOFF(-36, EBP), AL )
MOV_B ( AL, REGIND(EDX) )
MOV_L ( REGOFF(12, EBP), EAX )
LEA_L ( REGDIS(0,EAX,4), EDX )
MOV_L ( EDX, EAX )
ADD_L ( REGOFF(20, EBP), EAX )
LEA_L ( REGOFF(-1, EAX), EDX )
MOV_B ( REGOFF(-32, EBP), AL )
MOV_B ( AL, REGIND(EDX) )
LLBL( GMBT_9 ):
LLBL( GMBT_1 ):
MOV_L ( REGOFF(-56, EBP), EBX )
MOV_L ( EBP, ESP )
POP_L ( EBP )
RET