4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync#ifndef MMX_X64_H_INCLUDED
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync#define MMX_X64_H_INCLUDED
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync/* Implementation of x64 MMX substitition functions, before
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync * pixman is reimplemented not to use __m64 type on Visual C++
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync *
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync * Copyright (C)2009 by George Yohng
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync * Released in public domain.
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync#include <intrin.h>
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync#define M64C(a) (*(const __m64 *)(&a))
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync#define M64U(a) (*(const unsigned long long *)(&a))
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_from_int (int a)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync long long i64 = a;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (i64);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_mm_setzero_si64 ()
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync long long i64 = 0;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (i64);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_mm_set_pi32 (int i1, int i0)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long i64 = ((unsigned)i0) + (((unsigned long long)(unsigned)i1) << 32);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (i64);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline void
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_empty ()
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_mm_set1_pi16 (short w)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long i64 = ((unsigned long long)(unsigned short)(w)) * 0x0001000100010001ULL;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (i64);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline int
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_to_int (__m64 m)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return m.m64_i32[0];
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_mm_movepi64_pi64 (__m128i a)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (a.m128i_i64[0]);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_pand (__m64 a, __m64 b)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long i64 = M64U (a) & M64U (b);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (i64);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_por (__m64 a, __m64 b)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long i64 = M64U (a) | M64U (b);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (i64);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_pxor (__m64 a, __m64 b)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long i64 = M64U (a) ^ M64U (b);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (i64);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_pmulhuw (__m64 a, __m64 b) /* unoptimized */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned short d[4] =
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync {
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (unsigned short)((((unsigned)a.m64_u16[0]) * b.m64_u16[0]) >> 16),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (unsigned short)((((unsigned)a.m64_u16[1]) * b.m64_u16[1]) >> 16),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (unsigned short)((((unsigned)a.m64_u16[2]) * b.m64_u16[2]) >> 16),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (unsigned short)((((unsigned)a.m64_u16[3]) * b.m64_u16[3]) >> 16)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync };
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (d[0]);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_pmullw2 (__m64 a, __m64 b) /* unoptimized */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned short d[4] =
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync {
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (unsigned short)((((unsigned)a.m64_u16[0]) * b.m64_u16[0])),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (unsigned short)((((unsigned)a.m64_u16[1]) * b.m64_u16[1])),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (unsigned short)((((unsigned)a.m64_u16[2]) * b.m64_u16[2])),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (unsigned short)((((unsigned)a.m64_u16[3]) * b.m64_u16[3]))
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync };
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (d[0]);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_pmullw (__m64 a, __m64 b) /* unoptimized */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long x =
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync ((unsigned long long)(unsigned short)((((unsigned)a.m64_u16[0]) * b.m64_u16[0]))) +
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (((unsigned long long)(unsigned short)((((unsigned)a.m64_u16[1]) * b.m64_u16[1]))) << 16) +
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (((unsigned long long)(unsigned short)((((unsigned)a.m64_u16[2]) * b.m64_u16[2]))) << 32) +
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (((unsigned long long)(unsigned short)((((unsigned)a.m64_u16[3]) * b.m64_u16[3]))) << 48);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (x);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_paddusb (__m64 a, __m64 b) /* unoptimized */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long x = (M64U (a) & 0x00FF00FF00FF00FFULL) +
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (M64U (b) & 0x00FF00FF00FF00FFULL);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long y = ((M64U (a) >> 8) & 0x00FF00FF00FF00FFULL) +
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync ((M64U (b) >> 8) & 0x00FF00FF00FF00FFULL);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync x |= ((x & 0xFF00FF00FF00FF00ULL) >> 8) * 0xFF;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync y |= ((y & 0xFF00FF00FF00FF00ULL) >> 8) * 0xFF;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync x = (x & 0x00FF00FF00FF00FFULL) | ((y & 0x00FF00FF00FF00FFULL) << 8);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (x);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_paddusw (__m64 a, __m64 b) /* unoptimized */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long x = (M64U (a) & 0x0000FFFF0000FFFFULL) +
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync (M64U (b) & 0x0000FFFF0000FFFFULL);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long y = ((M64U (a) >> 16) & 0x0000FFFF0000FFFFULL) +
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync ((M64U (b) >> 16) & 0x0000FFFF0000FFFFULL);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync x |= ((x & 0xFFFF0000FFFF0000) >> 16) * 0xFFFF;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync y |= ((y & 0xFFFF0000FFFF0000) >> 16) * 0xFFFF;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync x = (x & 0x0000FFFF0000FFFFULL) | ((y & 0x0000FFFF0000FFFFULL) << 16);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (x);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_pshufw (__m64 a, int n) /* unoptimized */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned short d[4] =
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync {
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync a.m64_u16[n & 3],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync a.m64_u16[(n >> 2) & 3],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync a.m64_u16[(n >> 4) & 3],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync a.m64_u16[(n >> 6) & 3]
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync };
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (d[0]);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline unsigned char
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsyncsat16 (unsigned short d)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync if (d > 0xFF) return 0xFF;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync else return d & 0xFF;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync_m_packuswb (__m64 m1, __m64 m2) /* unoptimized */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned char d[8] =
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync {
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync sat16 (m1.m64_u16[0]),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync sat16 (m1.m64_u16[1]),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync sat16 (m1.m64_u16[2]),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync sat16 (m1.m64_u16[3]),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync sat16 (m2.m64_u16[0]),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync sat16 (m2.m64_u16[1]),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync sat16 (m2.m64_u16[2]),
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync sat16 (m2.m64_u16[3])
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync };
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (d[0]);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64 _m_punpcklbw (__m64 m1, __m64 m2) /* unoptimized */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned char d[8] =
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync {
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m1.m64_u8[0],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m2.m64_u8[0],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m1.m64_u8[1],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m2.m64_u8[1],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m1.m64_u8[2],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m2.m64_u8[2],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m1.m64_u8[3],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m2.m64_u8[3],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync };
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (d[0]);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64 _m_punpckhbw (__m64 m1, __m64 m2) /* unoptimized */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned char d[8] =
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync {
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m1.m64_u8[4],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m2.m64_u8[4],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m1.m64_u8[5],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m2.m64_u8[5],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m1.m64_u8[6],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m2.m64_u8[6],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m1.m64_u8[7],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync m2.m64_u8[7],
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync };
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (d[0]);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64 _m_psrlwi (__m64 a, int n) /* unoptimized */
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned short d[4] =
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync {
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync a.m64_u16[0] >> n,
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync a.m64_u16[1] >> n,
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync a.m64_u16[2] >> n,
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync a.m64_u16[3] >> n
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync };
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (d[0]);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64 _m_psrlqi (__m64 m, int n)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long x = M64U (m) >> n;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (x);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync__inline __m64 _m_psllqi (__m64 m, int n)
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync{
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync unsigned long long x = M64U (m) << n;
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync return M64C (x);
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync}
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync
4fedcd2da6f840dbadee84e579f146ad0f1fde22vboxsync#endif /* MMX_X64_H_INCLUDED */