#ifndef MMX_X64_H_INCLUDED
#define MMX_X64_H_INCLUDED
/* Implementation of x64 MMX substitition functions, before
* pixman is reimplemented not to use __m64 type on Visual C++
*
* Copyright (C)2009 by George Yohng
* Released in public domain.
*/
#include <intrin.h>
#define M64U(a) (*(const unsigned long long *)(&a))
_m_from_int (int a)
{
long long i64 = a;
}
{
long long i64 = 0;
}
{
}
__inline void
_m_empty ()
{
}
_mm_set1_pi16 (short w)
{
}
__inline int
{
return m.m64_i32[0];
}
{
}
{
}
{
}
{
}
{
unsigned short d[4] =
{
};
return M64C (d[0]);
}
{
unsigned short d[4] =
{
};
return M64C (d[0]);
}
{
unsigned long long x =
return M64C (x);
}
{
unsigned long long x = (M64U (a) & 0x00FF00FF00FF00FFULL) +
(M64U (b) & 0x00FF00FF00FF00FFULL);
x |= ((x & 0xFF00FF00FF00FF00ULL) >> 8) * 0xFF;
y |= ((y & 0xFF00FF00FF00FF00ULL) >> 8) * 0xFF;
x = (x & 0x00FF00FF00FF00FFULL) | ((y & 0x00FF00FF00FF00FFULL) << 8);
return M64C (x);
}
{
unsigned long long x = (M64U (a) & 0x0000FFFF0000FFFFULL) +
(M64U (b) & 0x0000FFFF0000FFFFULL);
x |= ((x & 0xFFFF0000FFFF0000) >> 16) * 0xFFFF;
y |= ((y & 0xFFFF0000FFFF0000) >> 16) * 0xFFFF;
x = (x & 0x0000FFFF0000FFFFULL) | ((y & 0x0000FFFF0000FFFFULL) << 16);
return M64C (x);
}
{
unsigned short d[4] =
{
a.m64_u16[n & 3],
};
return M64C (d[0]);
}
__inline unsigned char
sat16 (unsigned short d)
{
if (d > 0xFF) return 0xFF;
else return d & 0xFF;
}
{
unsigned char d[8] =
{
};
return M64C (d[0]);
}
{
unsigned char d[8] =
{
};
return M64C (d[0]);
}
{
unsigned char d[8] =
{
};
return M64C (d[0]);
}
{
unsigned short d[4] =
{
a.m64_u16[0] >> n,
a.m64_u16[1] >> n,
a.m64_u16[2] >> n,
a.m64_u16[3] >> n
};
return M64C (d[0]);
}
{
unsigned long long x = M64U (m) >> n;
return M64C (x);
}
{
unsigned long long x = M64U (m) << n;
return M64C (x);
}
#endif /* MMX_X64_H_INCLUDED */