blob: 9471bbaa0810128614bbceac6dbd8988c2071001 [file] [log] [blame]
/* { dg-do compile { target i?86*-*-darwin* } } */
/* { dg-options { -fasm-blocks -O2 } } */
/* Radar 5315594 */
typedef unsigned char unsigned8;
typedef long long int64;
typedef long int32;
typedef short int16;
typedef char int8;
typedef unsigned long uint32;
typedef uint32 DWORD;
typedef struct MMARRAY
{
DWORD RESULT1[ 2 ];
DWORD RESULT2[ 2 ];
DWORD Fst4DSTPIX[ 2 ];
DWORD Snd4DSTPIX[ 2 ];
DWORD _scr[ 2 ];
} MMARRAY;
void X_ScreenBlend ( const unsigned8 *sPtr, unsigned8 *dPtr, const unsigned8 *mPtr,
int32 rows, int32 cols, int32 sRowBytes, int32 dRowBytes,
int32 mRowBytes)
{
int32 sRowB, dRowB, mRowB, Loop8Extras, NumCols;
int64 RNDVAL = 0x007F007F007F007FLL;
int64 LoByteMask = 0x00FF00FF00FF00FFLL;
int64 val254 = 0x00fe00fe00fe00feLL;
int64 ZEROMASK = 0x0;
int64 ONESMASK = 0x0001000100010001LL;
int64 SIGNMASK = 0x8000800080008000LL;
MMARRAY *pqArray;
MMARRAY qArray;
if ( rows <= 0 || cols <= 0 )
return;
asm {
xor eax, eax
xor edx, edx
mov ax, WORD PTR sRowBytes
xor ecx, ecx
mov dx, WORD PTR dRowBytes
mov sRowB, eax
mov cx, WORD PTR mRowBytes
xor eax, eax
mov ax, WORD PTR cols
mov mRowB, ecx
mov dRowB, edx
lea ecx, qArray
mov ebx, eax
add ecx, 7
shr eax, 3
and ecx, 0fffffff8h
mov pqArray, ecx
and ebx, 7
mov NumCols, eax
mov Loop8Extras, ebx
Row:
mov esi, sPtr
mov edi, dPtr
mov edx, mPtr
mov ebx, sRowB
mov ecx, dRowB
add ebx, esi
mov eax, mRowB
mov sPtr, ebx
add ecx, edi
add eax, edx
mov dPtr, ecx
mov mPtr, eax
mov ecx, NumCols
mov ebx, 4
}
}