typedef struct _pW {
	char high;
	char low;
} _packedWord;

typedef struct _pDW {
	_packedWord high;
	_packedWord low;
} _packedDWord;

typedef struct _pQW {
	_packedDWord high;
	_packedDWord low;
} _packedQWord;

typedef struct __Union {
	_packedQWord packed;
	int dwords[2];
	short words[4];
	char bytes[8];
} _mmxdata;
	
void _stdcall _emms(void);
/* pack with signed saturation */
void _stdcall _packsswb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _packsswbi(_mmxdata *array,_mmxdata *imm,int n);
void _stdcall _packssdw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _packssdwi(_mmxdata *array,_mmxdata *imm,int n);
/* pack with unsigned saturation */
void _stdcall _packuswb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _packuswbi(_mmxdata *array,_mmxdata *imm,int n);
/* packed add */
void _stdcall _paddb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _paddbi(_mmxdata *array,_mmxdata *imm,int n);
void _stdcall _paddw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _paddwi(_mmxdata *array,_mmxdata *imm,int n);
void _stdcall _paddd(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _padddi(_mmxdata *array,_mmxdata *imm,int n);
/* packed add with saturation */
void _stdcall _paddsb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _paddusb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _paddusbi(_mmxdata *array1,_mmxdata *_imm,int n);
void _stdcall _paddsbi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _paddsw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _paddusw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _padduswi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _paddswi(_mmxdata *array,_mmxdata *imm,int n);
/* pand */
void _stdcall _pand(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pandi(void *array1,_mmxdata *imm,int n);
/* pandn */
void _stdcall _pandn(void *array1,void *array2,int n);
void _stdcall _pandni(void *array1,_mmxdata *imm,int n);
/* pcmeq */
void _stdcall _pcmpeqb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pcmeqbi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _pcmpeqw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pcmpeqwi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _pcmpeqd(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pcmpeqdi(_mmxdata *array1,_mmxdata *imm,int n);
/* pcmpgt */
void _stdcall _pcmpgtb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pcmpgtbi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _pcmpgtw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pcmpgtwi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _pcmpgtd(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pcmpgtdi(_mmxdata *array1,_mmxdata *imm,int n);
/* pmaddwd */
void _stdcall _pmaddwd(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pmaddwdi(_mmxdata *array1,_mmxdata *imm,int n);
/* pmulhw */
void _stdcall _pmulhw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pmulhwi(_mmxdata *array1,_mmxdata *array2,int n);
/* pmullw */
void _stdcall _pmullw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pmullwi(_mmxdata *array1,_mmxdata *imm,int n);
/* por */
void _stdcall _por(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _pori(_mmxdata *array1,_mmxdata *array2,int n);
/* psl */
void _stdcall _psllw(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _psllwi(_mmxdata *array,unsigned char int8,int n);
void _stdcall _pslld(_mmxdata *array,_mmxdata *imm,int n);
void _stdcall _pslldi(_mmxdata *array,unsigned char int8,int n);
void _stdcall _psllq(_mmxdata *array,_mmxdata *imm,int n);
void _stdcall _psllqi(_mmxdata *array,unsigned char int8,int n);
/* psra */
void _stdcall _psraw(_mmxdata *array,_mmxdata *imm,int n);
void _stdcall _psrawi(_mmxdata *array,unsigned char int8,int n);
void _stdcall _psrad(_mmxdata *array,_mmxdata *imm,int n);
void _stdcall _psradi(_mmxdata *array,unsigned char int8,int n);
/* psrl */
void _stdcall _psrlw(_mmxdata *array,_mmxdata *imm,int n);
void _stdcall _psrlwi(_mmxdata *array,unsigned char int8,int n);
void _stdcall _psrld(_mmxdata *array,_mmxdata *imm,int n);
void _stdcall _psrldi(_mmxdata *array,unsigned char int8,int n);
void _stdcall _psrlq(_mmxdata *array,_mmxdata *imm,int n);
void _stdcall _psrlqi(_mmxdata *array,unsigned char int8,int n);
/* packed sub routines */
void _stdcall _psubb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _psubbi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _psubw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _psubwi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _psubd(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _psubdi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _psubsb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _psubsbi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _psubsw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _psubswi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _psubsb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _psubsbi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _psubsw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _psubswi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _psubusb(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _psubusbi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _psubusw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _psubuswi(_mmxdata *array1,_mmxdata *imm,int n);
/* punpckhwd */
void _stdcall _punpckhbw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _punpckhbwi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _punpckhwd(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _punpckhwdi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _punpckhdq(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _punpckhdqi(_mmxdata *array1,_mmxdata *imm,int n);
/* punpckl */
void _stdcall _punpcklbw(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _punpcklbwi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _punpcklwd(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _punpcklwdi(_mmxdata *array1,_mmxdata *imm,int n);
void _stdcall _punpckldq(_mmxdata *array1,_mmxdata *array2,int n);
void _stdcall _punpckldqi(_mmxdata *array1,_mmxdata *imm,int n);

void _stdcall _pxor(_mmxdata *array1,_mmxdata *array2,int n);

