17#include <freerdp/config.h> 
   20#include <freerdp/types.h> 
   21#include <freerdp/primitives.h> 
   22#include <winpr/sysinfo.h> 
   24#include "prim_internal.h" 
   25#include "prim_avxsse.h" 
   29#if defined(SSE_AVX_INTRINSICS_ENABLED) 
   34static pstatus_t sse2_set_8u(BYTE val, BYTE* WINPR_RESTRICT pDst, UINT32 ulen)
 
   43    return generic->set_8u(val, pDst, ulen);
 
   49  while ((ULONG_PTR)dptr & 0x0f)
 
   54      return PRIMITIVES_SUCCESS;
 
   57  xmm0 = mm_set1_epu8(
byte);
 
   65    STORE_SI128(dptr, xmm0);
 
   67    STORE_SI128(dptr, xmm0);
 
   69    STORE_SI128(dptr, xmm0);
 
   71    STORE_SI128(dptr, xmm0);
 
   73    STORE_SI128(dptr, xmm0);
 
   75    STORE_SI128(dptr, xmm0);
 
   77    STORE_SI128(dptr, xmm0);
 
   79    STORE_SI128(dptr, xmm0);
 
   81    STORE_SI128(dptr, xmm0);
 
   83    STORE_SI128(dptr, xmm0);
 
   85    STORE_SI128(dptr, xmm0);
 
   87    STORE_SI128(dptr, xmm0);
 
   89    STORE_SI128(dptr, xmm0);
 
   91    STORE_SI128(dptr, xmm0);
 
   93    STORE_SI128(dptr, xmm0);
 
   95    STORE_SI128(dptr, xmm0);
 
  106    STORE_SI128(dptr, xmm0);
 
  114  return PRIMITIVES_SUCCESS;
 
  118static pstatus_t sse2_set_32u(UINT32 val, UINT32* WINPR_RESTRICT pDst, UINT32 ulen)
 
  132    return PRIMITIVES_SUCCESS;
 
  136  if (((ULONG_PTR)dptr & 0x03) != 0)
 
  138    return prim->set_32u(val, pDst, ulen);
 
  142  while ((ULONG_PTR)dptr & 0x0f)
 
  147      return PRIMITIVES_SUCCESS;
 
  150  xmm0 = mm_set1_epu32(val);
 
  158    STORE_SI128(dptr, xmm0);
 
  160    STORE_SI128(dptr, xmm0);
 
  162    STORE_SI128(dptr, xmm0);
 
  164    STORE_SI128(dptr, xmm0);
 
  166    STORE_SI128(dptr, xmm0);
 
  168    STORE_SI128(dptr, xmm0);
 
  170    STORE_SI128(dptr, xmm0);
 
  172    STORE_SI128(dptr, xmm0);
 
  174    STORE_SI128(dptr, xmm0);
 
  176    STORE_SI128(dptr, xmm0);
 
  178    STORE_SI128(dptr, xmm0);
 
  180    STORE_SI128(dptr, xmm0);
 
  182    STORE_SI128(dptr, xmm0);
 
  184    STORE_SI128(dptr, xmm0);
 
  186    STORE_SI128(dptr, xmm0);
 
  188    STORE_SI128(dptr, xmm0);
 
  199    STORE_SI128(dptr, xmm0);
 
  207  return PRIMITIVES_SUCCESS;
 
  211static pstatus_t sse2_set_32s(INT32 val, INT32* WINPR_RESTRICT pDst, UINT32 len)
 
  213  UINT32 uval = *((UINT32*)&val);
 
  214  return sse2_set_32u(uval, (UINT32*)pDst, len);
 
  219void primitives_init_set_sse2_int(
primitives_t* WINPR_RESTRICT prims)
 
  221#if defined(SSE_AVX_INTRINSICS_ENABLED) 
  222  generic = primitives_get_generic();
 
  226  WLog_VRB(PRIM_TAG, 
"SSE2/SSE3 optimizations");
 
  227  prims->set_8u = sse2_set_8u;
 
  228  prims->set_32s = sse2_set_32s;
 
  229  prims->set_32u = sse2_set_32u;
 
  232  WLog_VRB(PRIM_TAG, 
"undefined WITH_SIMD or SSE2 intrinsics not available");