PIPS
SIMD.c File Reference
#include <stdint.h>
#include <stdarg.h>
+ Include dependency graph for SIMD.c:

Go to the source code of this file.

Macros

#define RW   (RWBITS/8)
 
#define SIZEOF_VEC(T)   (RW/sizeof(CTYPE_##T))
 
#define VW(T)   SIZEOF_VEC(T)
 
#define CTYPE_PD   double
 
#define CTYPE_PS   float
 
#define CTYPE_DI   int64_t
 
#define CTYPE_D   int32_t
 
#define CTYPE_W   int16_t
 
#define CTYPE_B   int8_t
 
#define CTYPEP_PD   double
 
#define CTYPEP_PS   double
 
#define CTYPEP_DI   int64_t
 
#define CTYPEP_D   int32_t
 
#define CTYPEP_W   int32_t
 
#define CTYPEP_B   int32_t
 
#define LSTYPE_PD   DF
 
#define LSTYPE_PS   SF
 
#define LSTYPE_DI   DI
 
#define LSTYPE_D   SI
 
#define LSTYPE_W   HI
 
#define LSTYPE_B   QI
 
#define VW_64_PS   2
 
#define VW_64_PD   1
 
#define VW_64_DI   2
 
#define VW_64_D   2
 
#define VW_64_W   4
 
#define VW_64_B   8
 
#define VW_128_PS   4
 
#define VW_128_PD   2
 
#define VW_128_DI   2
 
#define VW_128_D   4
 
#define VW_128_W   8
 
#define VW_128_B   16
 
#define VW_256_PS   8
 
#define VW_256_PD   4
 
#define VW_256_DI   4
 
#define VW_256_D   8
 
#define VW_256_W   16
 
#define VW_256_B   32
 
#define VW_512_PS   16
 
#define VW_512_PD   8
 
#define VW_512_DI   8
 
#define VW_512_D   16
 
#define VW_512_W   32
 
#define VW_512_B   64
 
#define OP_ADD   +
 
#define OP_SUB   -
 
#define OP_DIV   /
 
#define OP_MUL   *
 
#define OP_F_TYPE(P, T)
 
#define OP_MULADD_TYPE(P, T)
 
#define OP_UMIN_TYPE(P, T)
 
#define SIMD_OP_TYPE(P, T)
 
#define _DEF_FOR_TYPES(F, P)
 
#define SIMD_OP(P)   _DEF_FOR_TYPES(SIMD_OP_TYPE,P)
 
#define OP_F(P)   _DEF_FOR_TYPES(OP_F_TYPE,P)
 
#define _ALIGNED   A
 
#define _UNALIGNED   V
 
#define SIMD_LOAD_TYPE(A, T)   _SIMD_LOAD_TYPE(T,RWBITS,A)
 
#define _SIMD_LOAD_TYPE(T, RWB, A)   __SIMD_LOAD_TYPE(T,RWB,A)
 
#define __SIMD_LOAD_TYPE(T, RWB, A)   ___SIMD_LOAD_TYPE(T,LSTYPE_##T,VW_##RWB##_##T,A)
 
#define ___SIMD_LOAD_TYPE(T, LST, VW, A)   ____SIMD_LOAD_TYPE(T,LST,VW,A)
 
#define ____SIMD_LOAD_TYPE(T, LST, VW, A)
 
#define SIMD_STORE_TYPE(A, T)   _SIMD_STORE_TYPE(T,RWBITS,A)
 
#define _SIMD_STORE_TYPE(T, RWB, A)   __SIMD_STORE_TYPE(T,RWB,A)
 
#define __SIMD_STORE_TYPE(T, RWB, A)   ___SIMD_STORE_TYPE(T,LSTYPE_##T,VW_##RWB##_##T,A)
 
#define ___SIMD_STORE_TYPE(T, LST, VW, A)   ____SIMD_STORE_TYPE(T,LST,VW,A)
 
#define ____SIMD_STORE_TYPE(T, LST, VW, A)
 
#define SIMD_ZERO_TYPE(A, T)   _SIMD_ZERO_TYPE(T,RWBITS,A)
 
#define _SIMD_ZERO_TYPE(T, RWB, A)   __SIMD_ZERO_TYPE(T,RWB,A)
 
#define __SIMD_ZERO_TYPE(T, RWB, A)   ___SIMD_ZERO_TYPE(T,LSTYPE_##T,VW_##RWB##_##T,A)
 
#define ___SIMD_ZERO_TYPE(T, LST, VW, A)   ____SIMD_ZERO_TYPE(T,LST,VW,A)
 
#define ____SIMD_ZERO_TYPE(T, LST, VW, A)
 
#define SIMD_SHUFFLE_TYPE(A, T)   _SIMD_SHUFFLE_TYPE(T,RWBITS,A)
 
#define _SIMD_SHUFFLE_TYPE(T, RWB, A)   __SIMD_SHUFFLE_TYPE(T,RWB,A)
 
#define __SIMD_SHUFFLE_TYPE(T, RWB, A)   ___SIMD_SHUFFLE_TYPE(T,LSTYPE_##T,VW_##RWB##_##T,A)
 
#define ___SIMD_SHUFFLE_TYPE(T, LST, VW, A)   ____SIMD_SHUFFLE_TYPE(T,LST,VW,A)
 
#define ____SIMD_SHUFFLE_TYPE(T, LST, VW, A)
 
#define SIMD_INVERT_TYPE(A, T)   _SIMD_INVERT_TYPE(T,RWBITS,A)
 
#define _SIMD_INVERT_TYPE(T, RWB, A)   __SIMD_INVERT_TYPE(T,RWB,A)
 
#define __SIMD_INVERT_TYPE(T, RWB, A)   ___SIMD_INVERT_TYPE(T,LSTYPE_##T,VW_##RWB##_##T,A)
 
#define ___SIMD_INVERT_TYPE(T, LST, VW, A)   ____SIMD_INVERT_TYPE(T,LST,VW,A)
 
#define ____SIMD_INVERT_TYPE(T, LST, VW, A)
 
#define SIMD_LOAD_CONV(A, TO, TD)   _SIMD_LOAD_CONV(A,TO,TD,RWBITS)
 TO: original type TD: destination type RWD: register width in bits VWD: destination type vector length. More...
 
#define _SIMD_LOAD_CONV(A, TO, TD, RWB)   __SIMD_LOAD_CONV(A, TO, TD, RWB)
 
#define __SIMD_LOAD_CONV(A, TO, TD, RWB)   ___SIMD_LOAD_CONV(A,TO,TD,VW_##RWB##_##TD,LSTYPE_##TO,LSTYPE_##TD)
 
#define ___SIMD_LOAD_CONV(A, TO, TD, VWD, TOLST, TDLST)   ____SIMD_LOAD_CONV(A,TO,TD,VWD,TOLST,TDLST)
 
#define ____SIMD_LOAD_CONV(A, TO, TD, VWD, TOLST, TDLST)
 
#define SIMD_STORE_CONV(A, TO, TD)   _SIMD_STORE_CONV(A,TO,TD,RWBITS)
 
#define _SIMD_STORE_CONV(A, TO, TD, RWB)   __SIMD_STORE_CONV(A, TO, TD, RWB)
 
#define __SIMD_STORE_CONV(A, TO, TD, RWB)   ___SIMD_STORE_CONV(A,TO,TD,VW_##RWB##_##TD,LSTYPE_##TO,LSTYPE_##TD)
 
#define ___SIMD_STORE_CONV(A, TO, TD, VWD, TOLST, TDLST)   ____SIMD_STORE_CONV(A,TO,TD,VWD,TOLST,TDLST)
 
#define ____SIMD_STORE_CONV(A, TD, TO, VWD, TDLST, TOLST)
 
#define SIMD_LOADS(A)   _DEF_FOR_TYPES(SIMD_LOAD_TYPE,A)
 
#define SIMD_STORES(A)   _DEF_FOR_TYPES(SIMD_STORE_TYPE,A)
 
#define SIMD_ZEROS(A)   _DEF_FOR_TYPES(SIMD_ZERO_TYPE,A)
 
#define SIMD_SHUFFLES(A)   _DEF_FOR_TYPES(SIMD_SHUFFLE_TYPE,A)
 
#define SIMD_INVERTS(A)   _DEF_FOR_TYPES(SIMD_INVERT_TYPE,A)
 
#define CTYPE_PD   double
 
#define CTYPE_PS   float
 
#define CTYPE_DI   int64_t
 
#define CTYPE_D   int32_t
 
#define CTYPE_W   int16_t
 
#define CTYPE_B   int8_t
 
#define _DEF_ALL_CONV(F, A)
 
#define SIMD_LOAD_CONVS(A)   _DEF_ALL_CONV(SIMD_LOAD_CONV,A)
 
#define SIMD_STORE_CONVS(A)   _DEF_ALL_CONV(SIMD_STORE_CONV,A)
 

Macro Definition Documentation

◆ ____SIMD_INVERT_TYPE

#define ____SIMD_INVERT_TYPE (   T,
  LST,
  VW,
  A 
)
Value:
void SIMD_INVERT_V##VW##LST(CTYPE_##T res[VW], CTYPE_##T vec[VW])\
{\
int i;\
for (i = 0; i < (VW); i++)\
res[VW-i-1] = vec[i];\
}
#define VW(T)
Definition: SIMD.c:7
Definition: pip__tab.h:48

Definition at line 232 of file SIMD.c.

◆ ____SIMD_LOAD_CONV

#define ____SIMD_LOAD_CONV (   A,
  TO,
  TD,
  VWD,
  TOLST,
  TDLST 
)
Value:
void SIMD_LOAD_##A##VWD##TOLST##_TO_##A##VWD##TDLST(CTYPE_##TD dst[VWD], CTYPE_##TO src[VWD])\
{\
int i;\
for (i = 0; i < VWD; i++)\
dst[i] = src[i];\
}\
\
void SIMD_LOAD_GENERIC_##A##VWD##TOLST##_TO_##A##VWD##TDLST(CTYPE_##TD vec[VWD], ...)\
{\
int i;\
va_list ap;\
CTYPE_##TO n;\
va_start(ap, vec);\
for (i = 0; i < (VWD); i++)\
{\
n = (CTYPE_##TO) va_arg(ap, CTYPEP_##TO);\
vec[i] = n;\
}\
va_end(ap);\
}
#define src(name, suf)
HPFC by Fabien Coelho, May 1993 and later...
Definition: compile.c:41
Definition: pip__tab.h:25

Definition at line 250 of file SIMD.c.

◆ ____SIMD_LOAD_TYPE

#define ____SIMD_LOAD_TYPE (   T,
  LST,
  VW,
  A 
)
Value:
void SIMD_LOAD_##A##VW##LST(CTYPE_##T vec[VW], CTYPE_##T base[VW])\
{\
int i;\
for (i = 0; i < (VW); i++)\
vec[i] = base[i];\
}\
\
void SIMD_LOAD_GENERIC_##A##VW##LST(CTYPE_##T vec[VW], ...)\
{\
int i;\
va_list ap;\
CTYPE_##T n;\
va_start(ap, vec);\
for (i = 0; i < (VW); i++)\
{\
n = (CTYPE_##T) va_arg(ap, CTYPEP_##T);\
vec[i] = n;\
}\
va_end(ap);\
}\
\
void SIMD_LOAD_BROADCAST_##A##VW##LST(CTYPE_##T vec[VW], CTYPE_##T base)\
{\
int i;\
for (i = 0; i < (VW); i++)\
vec[i] = base;\
}\
bdt base
Current expression.
Definition: bdt_read_paf.c:100
#define T
Definition: freia-utils.c:50

Definition at line 139 of file SIMD.c.

◆ ____SIMD_SHUFFLE_TYPE

#define ____SIMD_SHUFFLE_TYPE (   T,
  LST,
  VW,
  A 
)
Value:
void SIMD_SHUFFLE_V##VW##LST(CTYPE_##T res[VW], CTYPE_##T vec[VW], ...)\
{\
int i;\
int p;\
va_list ap;\
va_start(ap, vec);\
for (i = 0; i < (VW); i++)\
{\
p = va_arg(ap, int);\
res[p] = vec[i];\
}\
}

Definition at line 213 of file SIMD.c.

◆ ____SIMD_STORE_CONV

#define ____SIMD_STORE_CONV (   A,
  TD,
  TO,
  VWD,
  TDLST,
  TOLST 
)
Value:
void SIMD_STORE_##A##VWD##TOLST##_TO_##A##VWD##TDLST(CTYPE_##TO src[VWD], CTYPE_##TD dst[VWD])\
{\
int i;\
for (i = 0; i < VWD; i++)\
dst[i] = src[i];\
}\
void SIMD_STORE_##A##VWD##TDLST##_TO_##A##VWD##TOLST(CTYPE_##TD src[VWD], CTYPE_##TO dst[VWD])\
{\
int i;\
for (i = 0; i < VWD; i++)\
dst[i] = src[i];\
}

Definition at line 276 of file SIMD.c.

◆ ____SIMD_STORE_TYPE

#define ____SIMD_STORE_TYPE (   T,
  LST,
  VW,
  A 
)
Value:
void SIMD_STORE_##A##VW##LST(CTYPE_##T vec[VW], CTYPE_##T base[VW])\
{\
int i;\
for (i = 0; i < (VW); i++)\
base[i] = vec[i];\
}\
\
void SIMD_STORE_GENERIC_##A##VW##LST(CTYPE_##T vec[VW], ...)\
{\
int i;\
va_list ap;\
CTYPE_##T *pn;\
va_start(ap, vec);\
for (i = 0; i < (VW); i++)\
{\
pn = va_arg(ap, CTYPE_##T *);\
*pn = vec[i];\
}\
va_end(ap);\
}

Definition at line 173 of file SIMD.c.

◆ ____SIMD_ZERO_TYPE

#define ____SIMD_ZERO_TYPE (   T,
  LST,
  VW,
  A 
)
Value:
void SIMD_ZERO_##A##VW##LST(CTYPE_##T vec[VW])\
{\
int i;\
for (i = 0; i < (VW); i++)\
vec[i] = 0;\
}

Definition at line 200 of file SIMD.c.

◆ ___SIMD_INVERT_TYPE

#define ___SIMD_INVERT_TYPE (   T,
  LST,
  VW,
  A 
)    ____SIMD_INVERT_TYPE(T,LST,VW,A)

Definition at line 231 of file SIMD.c.

◆ ___SIMD_LOAD_CONV

#define ___SIMD_LOAD_CONV (   A,
  TO,
  TD,
  VWD,
  TOLST,
  TDLST 
)    ____SIMD_LOAD_CONV(A,TO,TD,VWD,TOLST,TDLST)

Definition at line 249 of file SIMD.c.

◆ ___SIMD_LOAD_TYPE

#define ___SIMD_LOAD_TYPE (   T,
  LST,
  VW,
  A 
)    ____SIMD_LOAD_TYPE(T,LST,VW,A)

Definition at line 138 of file SIMD.c.

◆ ___SIMD_SHUFFLE_TYPE

#define ___SIMD_SHUFFLE_TYPE (   T,
  LST,
  VW,
  A 
)    ____SIMD_SHUFFLE_TYPE(T,LST,VW,A)

Definition at line 212 of file SIMD.c.

◆ ___SIMD_STORE_CONV

#define ___SIMD_STORE_CONV (   A,
  TO,
  TD,
  VWD,
  TOLST,
  TDLST 
)    ____SIMD_STORE_CONV(A,TO,TD,VWD,TOLST,TDLST)

Definition at line 275 of file SIMD.c.

◆ ___SIMD_STORE_TYPE

#define ___SIMD_STORE_TYPE (   T,
  LST,
  VW,
  A 
)    ____SIMD_STORE_TYPE(T,LST,VW,A)

Definition at line 172 of file SIMD.c.

◆ ___SIMD_ZERO_TYPE

#define ___SIMD_ZERO_TYPE (   T,
  LST,
  VW,
  A 
)    ____SIMD_ZERO_TYPE(T,LST,VW,A)

Definition at line 199 of file SIMD.c.

◆ __SIMD_INVERT_TYPE

#define __SIMD_INVERT_TYPE (   T,
  RWB,
  A 
)    ___SIMD_INVERT_TYPE(T,LSTYPE_##T,VW_##RWB##_##T,A)

Definition at line 230 of file SIMD.c.

◆ __SIMD_LOAD_CONV

#define __SIMD_LOAD_CONV (   A,
  TO,
  TD,
  RWB 
)    ___SIMD_LOAD_CONV(A,TO,TD,VW_##RWB##_##TD,LSTYPE_##TO,LSTYPE_##TD)

Definition at line 248 of file SIMD.c.

◆ __SIMD_LOAD_TYPE

#define __SIMD_LOAD_TYPE (   T,
  RWB,
  A 
)    ___SIMD_LOAD_TYPE(T,LSTYPE_##T,VW_##RWB##_##T,A)

Definition at line 137 of file SIMD.c.

◆ __SIMD_SHUFFLE_TYPE

#define __SIMD_SHUFFLE_TYPE (   T,
  RWB,
  A 
)    ___SIMD_SHUFFLE_TYPE(T,LSTYPE_##T,VW_##RWB##_##T,A)

Definition at line 211 of file SIMD.c.

◆ __SIMD_STORE_CONV

#define __SIMD_STORE_CONV (   A,
  TO,
  TD,
  RWB 
)    ___SIMD_STORE_CONV(A,TO,TD,VW_##RWB##_##TD,LSTYPE_##TO,LSTYPE_##TD)

Definition at line 274 of file SIMD.c.

◆ __SIMD_STORE_TYPE

#define __SIMD_STORE_TYPE (   T,
  RWB,
  A 
)    ___SIMD_STORE_TYPE(T,LSTYPE_##T,VW_##RWB##_##T,A)

Definition at line 171 of file SIMD.c.

◆ __SIMD_ZERO_TYPE

#define __SIMD_ZERO_TYPE (   T,
  RWB,
  A 
)    ___SIMD_ZERO_TYPE(T,LSTYPE_##T,VW_##RWB##_##T,A)

Definition at line 198 of file SIMD.c.

◆ _ALIGNED

#define _ALIGNED   A

Definition at line 132 of file SIMD.c.

◆ _DEF_ALL_CONV

#define _DEF_ALL_CONV (   F,
  A 
)
Value:
F(A, PS, PD)\
F(A, DI, PD)\
F(A, D, PD)\
F(A, W, PD)\
F(A, B, PD)\
F(A, D, PS)\
F(A, W, PS)\
F(A, B, PS)\
F(A, D, DI)\
F(A, W, DI)\
F(A, B, DI)\
F(A, W, D)\
F(A, D, W)\
F(A, B, D)\
F(A, B, W)
#define F
Definition: freia-utils.c:51
#define B(A)
Definition: iabrev.h:61
#define D(A)
Definition: iabrev.h:56

Definition at line 303 of file SIMD.c.

◆ _DEF_FOR_TYPES

#define _DEF_FOR_TYPES (   F,
 
)
Value:
F(P, PS)\
F(P, PD)\
F(P, DI)\
F(P, D)\
F(P, W)\
F(P, B)

Definition at line 119 of file SIMD.c.

◆ _SIMD_INVERT_TYPE

#define _SIMD_INVERT_TYPE (   T,
  RWB,
  A 
)    __SIMD_INVERT_TYPE(T,RWB,A)

Definition at line 229 of file SIMD.c.

◆ _SIMD_LOAD_CONV

#define _SIMD_LOAD_CONV (   A,
  TO,
  TD,
  RWB 
)    __SIMD_LOAD_CONV(A, TO, TD, RWB)

Definition at line 247 of file SIMD.c.

◆ _SIMD_LOAD_TYPE

#define _SIMD_LOAD_TYPE (   T,
  RWB,
  A 
)    __SIMD_LOAD_TYPE(T,RWB,A)

Definition at line 136 of file SIMD.c.

◆ _SIMD_SHUFFLE_TYPE

#define _SIMD_SHUFFLE_TYPE (   T,
  RWB,
  A 
)    __SIMD_SHUFFLE_TYPE(T,RWB,A)

Definition at line 210 of file SIMD.c.

◆ _SIMD_STORE_CONV

#define _SIMD_STORE_CONV (   A,
  TO,
  TD,
  RWB 
)    __SIMD_STORE_CONV(A, TO, TD, RWB)

Definition at line 273 of file SIMD.c.

◆ _SIMD_STORE_TYPE

#define _SIMD_STORE_TYPE (   T,
  RWB,
  A 
)    __SIMD_STORE_TYPE(T,RWB,A)

Definition at line 170 of file SIMD.c.

◆ _SIMD_ZERO_TYPE

#define _SIMD_ZERO_TYPE (   T,
  RWB,
  A 
)    __SIMD_ZERO_TYPE(T,RWB,A)

Definition at line 197 of file SIMD.c.

◆ _UNALIGNED

#define _UNALIGNED   V

Definition at line 133 of file SIMD.c.

◆ CTYPE_B [1/2]

#define CTYPE_B   int8_t

Definition at line 301 of file SIMD.c.

◆ CTYPE_B [2/2]

#define CTYPE_B   int8_t

Definition at line 301 of file SIMD.c.

◆ CTYPE_D [1/2]

#define CTYPE_D   int32_t

Definition at line 299 of file SIMD.c.

◆ CTYPE_D [2/2]

#define CTYPE_D   int32_t

Definition at line 299 of file SIMD.c.

◆ CTYPE_DI [1/2]

#define CTYPE_DI   int64_t

Definition at line 298 of file SIMD.c.

◆ CTYPE_DI [2/2]

#define CTYPE_DI   int64_t

Definition at line 298 of file SIMD.c.

◆ CTYPE_PD [1/2]

#define CTYPE_PD   double

Definition at line 296 of file SIMD.c.

◆ CTYPE_PD [2/2]

#define CTYPE_PD   double

Definition at line 296 of file SIMD.c.

◆ CTYPE_PS [1/2]

#define CTYPE_PS   float

Definition at line 297 of file SIMD.c.

◆ CTYPE_PS [2/2]

#define CTYPE_PS   float

Definition at line 297 of file SIMD.c.

◆ CTYPE_W [1/2]

#define CTYPE_W   int16_t

Definition at line 300 of file SIMD.c.

◆ CTYPE_W [2/2]

#define CTYPE_W   int16_t

Definition at line 300 of file SIMD.c.

◆ CTYPEP_B

#define CTYPEP_B   int32_t

Definition at line 26 of file SIMD.c.

◆ CTYPEP_D

#define CTYPEP_D   int32_t

Definition at line 24 of file SIMD.c.

◆ CTYPEP_DI

#define CTYPEP_DI   int64_t

Definition at line 23 of file SIMD.c.

◆ CTYPEP_PD

#define CTYPEP_PD   double

Definition at line 21 of file SIMD.c.

◆ CTYPEP_PS

#define CTYPEP_PS   double

Definition at line 22 of file SIMD.c.

◆ CTYPEP_W

#define CTYPEP_W   int32_t

Definition at line 25 of file SIMD.c.

◆ LSTYPE_B

#define LSTYPE_B   QI

Definition at line 36 of file SIMD.c.

◆ LSTYPE_D

#define LSTYPE_D   SI

Definition at line 34 of file SIMD.c.

◆ LSTYPE_DI

#define LSTYPE_DI   DI

Definition at line 33 of file SIMD.c.

◆ LSTYPE_PD

#define LSTYPE_PD   DF

Definition at line 31 of file SIMD.c.

◆ LSTYPE_PS

#define LSTYPE_PS   SF

Definition at line 32 of file SIMD.c.

◆ LSTYPE_W

#define LSTYPE_W   HI

Definition at line 35 of file SIMD.c.

◆ OP_ADD

#define OP_ADD   +

Definition at line 66 of file SIMD.c.

◆ OP_DIV

#define OP_DIV   /

Definition at line 68 of file SIMD.c.

◆ OP_F

#define OP_F (   P)    _DEF_FOR_TYPES(OP_F_TYPE,P)

Definition at line 128 of file SIMD.c.

◆ OP_F_TYPE

#define OP_F_TYPE (   P,
  T 
)
Value:
CTYPE_##T F_##P##T(int i, va_list ap)\
{\
CTYPE_##T *v1,*v2,r;\
v1 = va_arg(ap, CTYPE_##T *);\
v2 = va_arg(ap, CTYPE_##T *);\
r = v1[i] OP_##P v2[i];\
return r;\
}

Definition at line 72 of file SIMD.c.

◆ OP_MUL

#define OP_MUL   *

Definition at line 69 of file SIMD.c.

◆ OP_MULADD_TYPE

#define OP_MULADD_TYPE (   P,
  T 
)
Value:
CTYPE_##T F_MULADD##T(int i, va_list ap)\
{\
CTYPE_##T *v1,*v2,*v3;\
v1 = va_arg(ap, CTYPE_##T *);\
v2 = va_arg(ap, CTYPE_##T *);\
v3 = va_arg(ap, CTYPE_##T *);\
return v1[i] + v2[i]*v3[i];\
}

Definition at line 84 of file SIMD.c.

◆ OP_SUB

#define OP_SUB   -

Definition at line 67 of file SIMD.c.

◆ OP_UMIN_TYPE

#define OP_UMIN_TYPE (   P,
  T 
)
Value:
CTYPE_##T F_UMIN##T(int i, va_list ap)\
{\
CTYPE_##T *v1;\
v1 = va_arg(ap, CTYPE_##T *);\
return - (v1[i]);\
}

Definition at line 96 of file SIMD.c.

◆ RW

#define RW   (RWBITS/8)

Definition at line 5 of file SIMD.c.

◆ SIMD_INVERT_TYPE

#define SIMD_INVERT_TYPE (   A,
  T 
)    _SIMD_INVERT_TYPE(T,RWBITS,A)

Definition at line 228 of file SIMD.c.

◆ SIMD_INVERTS

#define SIMD_INVERTS (   A)    _DEF_FOR_TYPES(SIMD_INVERT_TYPE,A)

Definition at line 294 of file SIMD.c.

◆ SIMD_LOAD_CONV

#define SIMD_LOAD_CONV (   A,
  TO,
  TD 
)    _SIMD_LOAD_CONV(A,TO,TD,RWBITS)

TO: original type TD: destination type RWD: register width in bits VWD: destination type vector length.

Definition at line 246 of file SIMD.c.

◆ SIMD_LOAD_CONVS

#define SIMD_LOAD_CONVS (   A)    _DEF_ALL_CONV(SIMD_LOAD_CONV,A)

Definition at line 320 of file SIMD.c.

◆ SIMD_LOAD_TYPE

#define SIMD_LOAD_TYPE (   A,
  T 
)    _SIMD_LOAD_TYPE(T,RWBITS,A)

Definition at line 135 of file SIMD.c.

◆ SIMD_LOADS

#define SIMD_LOADS (   A)    _DEF_FOR_TYPES(SIMD_LOAD_TYPE,A)

Definition at line 290 of file SIMD.c.

◆ SIMD_OP

#define SIMD_OP (   P)    _DEF_FOR_TYPES(SIMD_OP_TYPE,P)

Definition at line 127 of file SIMD.c.

◆ SIMD_OP_TYPE

#define SIMD_OP_TYPE (   P,
  T 
)
Value:
void SIMD_##P##T(CTYPE_##T *dst, ...)\
{\
int i;\
va_list ap,ap_f;\
va_start(ap,dst);\
for (i = 0; i < (VW(T)); i++)\
{\
va_copy(ap_f,ap);\
dst[i] = F_##P##T(i,ap_f);\
}\
va_end(ap);\
}

Definition at line 105 of file SIMD.c.

◆ SIMD_SHUFFLE_TYPE

#define SIMD_SHUFFLE_TYPE (   A,
  T 
)    _SIMD_SHUFFLE_TYPE(T,RWBITS,A)

Definition at line 209 of file SIMD.c.

◆ SIMD_SHUFFLES

#define SIMD_SHUFFLES (   A)    _DEF_FOR_TYPES(SIMD_SHUFFLE_TYPE,A)

Definition at line 293 of file SIMD.c.

◆ SIMD_STORE_CONV

#define SIMD_STORE_CONV (   A,
  TO,
  TD 
)    _SIMD_STORE_CONV(A,TO,TD,RWBITS)

Definition at line 272 of file SIMD.c.

◆ SIMD_STORE_CONVS

#define SIMD_STORE_CONVS (   A)    _DEF_ALL_CONV(SIMD_STORE_CONV,A)

Definition at line 321 of file SIMD.c.

◆ SIMD_STORE_TYPE

#define SIMD_STORE_TYPE (   A,
  T 
)    _SIMD_STORE_TYPE(T,RWBITS,A)

Definition at line 169 of file SIMD.c.

◆ SIMD_STORES

#define SIMD_STORES (   A)    _DEF_FOR_TYPES(SIMD_STORE_TYPE,A)

Definition at line 291 of file SIMD.c.

◆ SIMD_ZERO_TYPE

#define SIMD_ZERO_TYPE (   A,
  T 
)    _SIMD_ZERO_TYPE(T,RWBITS,A)

Definition at line 196 of file SIMD.c.

◆ SIMD_ZEROS

#define SIMD_ZEROS (   A)    _DEF_FOR_TYPES(SIMD_ZERO_TYPE,A)

Definition at line 292 of file SIMD.c.

◆ SIZEOF_VEC

#define SIZEOF_VEC (   T)    (RW/sizeof(CTYPE_##T))

Definition at line 6 of file SIMD.c.

◆ VW

#define VW (   T)    SIZEOF_VEC(T)

Definition at line 7 of file SIMD.c.

◆ VW_128_B

#define VW_128_B   16

Definition at line 51 of file SIMD.c.

◆ VW_128_D

#define VW_128_D   4

Definition at line 49 of file SIMD.c.

◆ VW_128_DI

#define VW_128_DI   2

Definition at line 48 of file SIMD.c.

◆ VW_128_PD

#define VW_128_PD   2

Definition at line 47 of file SIMD.c.

◆ VW_128_PS

#define VW_128_PS   4

Definition at line 46 of file SIMD.c.

◆ VW_128_W

#define VW_128_W   8

Definition at line 50 of file SIMD.c.

◆ VW_256_B

#define VW_256_B   32

Definition at line 57 of file SIMD.c.

◆ VW_256_D

#define VW_256_D   8

Definition at line 55 of file SIMD.c.

◆ VW_256_DI

#define VW_256_DI   4

Definition at line 54 of file SIMD.c.

◆ VW_256_PD

#define VW_256_PD   4

Definition at line 53 of file SIMD.c.

◆ VW_256_PS

#define VW_256_PS   8

Definition at line 52 of file SIMD.c.

◆ VW_256_W

#define VW_256_W   16

Definition at line 56 of file SIMD.c.

◆ VW_512_B

#define VW_512_B   64

Definition at line 63 of file SIMD.c.

◆ VW_512_D

#define VW_512_D   16

Definition at line 61 of file SIMD.c.

◆ VW_512_DI

#define VW_512_DI   8

Definition at line 60 of file SIMD.c.

◆ VW_512_PD

#define VW_512_PD   8

Definition at line 59 of file SIMD.c.

◆ VW_512_PS

#define VW_512_PS   16

Definition at line 58 of file SIMD.c.

◆ VW_512_W

#define VW_512_W   32

Definition at line 62 of file SIMD.c.

◆ VW_64_B

#define VW_64_B   8

Definition at line 45 of file SIMD.c.

◆ VW_64_D

#define VW_64_D   2

Definition at line 43 of file SIMD.c.

◆ VW_64_DI

#define VW_64_DI   2

Definition at line 42 of file SIMD.c.

◆ VW_64_PD

#define VW_64_PD   1

Definition at line 41 of file SIMD.c.

◆ VW_64_PS

#define VW_64_PS   2

Definition at line 40 of file SIMD.c.

◆ VW_64_W

#define VW_64_W   4

Definition at line 44 of file SIMD.c.