SASC
DVBSoftCAM

parallel_128_2mmx.h File Reference

#include <mmintrin.h>

Go to the source code of this file.

Classes

struct  group_t
struct  batch_t

Defines

#define MEMALIGN_VAL   16
#define GROUP_PARALLELISM   128
#define BYTES_PER_BATCH   16
#define XOR_8_BY(d, s1, s2)
#define XOREQ_8_BY(d, s)
#define COPY_8_BY(d, s)
#define BEST_SPAN   8
#define XOR_BEST_BY(d, s1, s2)   do{ XOR_8_BY(d,s1,s2); }while(0);
#define XOREQ_BEST_BY(d, s)   do{ XOREQ_8_BY(d,s); }while(0);
#define COPY_BEST_BY(d, s)   do{ COPY_8_BY(d,s); }while(0);

Typedefs

typedef struct group_t group
typedef struct batch_t batch

Functions

static group FF0 ()
static group FF1 ()
static group FFAND (group a, group b)
static group FFOR (group a, group b)
static group FFXOR (group a, group b)
static group FFNOT (group a)
static void FFTABLEIN (unsigned char *tab, int g, unsigned char *data)
static void FFTABLEOUT (unsigned char *data, unsigned char *tab, int g)
static void FFTABLEOUTXORNBY (int n, unsigned char *data, unsigned char *tab, int g)
static batch B_FFAND (batch a, batch b)
static batch B_FFOR (batch a, batch b)
static batch B_FFXOR (batch a, batch b)
static batch B_FFN_ALL_29 ()
static batch B_FFN_ALL_02 ()
static batch B_FFN_ALL_04 ()
static batch B_FFN_ALL_10 ()
static batch B_FFN_ALL_40 ()
static batch B_FFN_ALL_80 ()
static batch B_FFSH8L (batch a, int n)
static batch B_FFSH8R (batch a, int n)
static void M_EMPTY (void)

Define Documentation

#define BEST_SPAN   8

Definition at line 192 of file parallel_128_2mmx.h.

#define BYTES_PER_BATCH   16

Definition at line 100 of file parallel_128_2mmx.h.

#define COPY_8_BY (   d,
  s 
)
Value:
do{ __m64 *pd=(__m64 *)(d), *ps=(__m64 *)(s); \
                                 *pd =  *ps; }while(0)

Definition at line 188 of file parallel_128_2mmx.h.

#define COPY_BEST_BY (   d,
  s 
)    do{ COPY_8_BY(d,s); }while(0);

Definition at line 201 of file parallel_128_2mmx.h.

#define GROUP_PARALLELISM   128

Definition at line 30 of file parallel_128_2mmx.h.

#define MEMALIGN_VAL   16

Definition at line 23 of file parallel_128_2mmx.h.

#define XOR_8_BY (   d,
  s1,
  s2 
)
Value:
do{ __m64 *pd=(__m64 *)(d), *ps1=(__m64 *)(s1), *ps2=(__m64 *)(s2); \
                                 *pd = _m_pxor( *ps1 , *ps2 ); }while(0)

Definition at line 180 of file parallel_128_2mmx.h.

#define XOR_BEST_BY (   d,
  s1,
  s2 
)    do{ XOR_8_BY(d,s1,s2); }while(0);

Definition at line 195 of file parallel_128_2mmx.h.

#define XOREQ_8_BY (   d,
  s 
)
Value:
do{ __m64 *pd=(__m64 *)(d), *ps=(__m64 *)(s); \
                                 *pd = _m_pxor( *ps, *pd ); }while(0)

Definition at line 184 of file parallel_128_2mmx.h.

#define XOREQ_BEST_BY (   d,
  s 
)    do{ XOREQ_8_BY(d,s); }while(0);

Definition at line 198 of file parallel_128_2mmx.h.


Typedef Documentation

typedef struct batch_t batch

Definition at line 98 of file parallel_128_2mmx.h.

typedef struct group_t group

Definition at line 28 of file parallel_128_2mmx.h.


Function Documentation

static batch B_FFAND ( batch  a,
batch  b 
) [inline, static]

Definition at line 102 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                            {
  batch res;
  res.s1=_m_pand(a.s1,b.s1);
  res.s2=_m_pand(a.s2,b.s2);
  return res;
}
static batch B_FFN_ALL_02 ( ) [inline, static]

Definition at line 129 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                  {
  batch res;
  res.s1=(__m64)0x0202020202020202ULL;
  res.s2=(__m64)0x0202020202020202ULL;
  return res;
}
static batch B_FFN_ALL_04 ( ) [inline, static]

Definition at line 135 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                  {
  batch res;
  res.s1=(__m64)0x0404040404040404ULL;
  res.s2=(__m64)0x0404040404040404ULL;
  return res;
}
static batch B_FFN_ALL_10 ( ) [inline, static]

Definition at line 141 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                  {
  batch res;
  res.s1=(__m64)0x1010101010101010ULL;
  res.s2=(__m64)0x1010101010101010ULL;
  return res;
}
static batch B_FFN_ALL_29 ( ) [inline, static]

Definition at line 123 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                  {
  batch res;
  res.s1=(__m64)0x2929292929292929ULL;
  res.s2=(__m64)0x2929292929292929ULL;
  return res;
}
static batch B_FFN_ALL_40 ( ) [inline, static]

Definition at line 147 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                  {
  batch res;
  res.s1=(__m64)0x4040404040404040ULL;
  res.s2=(__m64)0x4040404040404040ULL;
  return res;
}
static batch B_FFN_ALL_80 ( ) [inline, static]

Definition at line 153 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                  {
  batch res;
  res.s1=(__m64)0x8080808080808080ULL;
  res.s2=(__m64)0x8080808080808080ULL;
  return res;
}
static batch B_FFOR ( batch  a,
batch  b 
) [inline, static]

Definition at line 109 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                           {
  batch res;
  res.s1=_m_por(a.s1,b.s1);
  res.s2=_m_por(a.s2,b.s2);
  return res;
}
static batch B_FFSH8L ( batch  a,
int  n 
) [inline, static]

Definition at line 160 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                           {
  batch res;
  res.s1=_m_psllqi(a.s1,n);
  res.s2=_m_psllqi(a.s2,n);
  return res;
}
static batch B_FFSH8R ( batch  a,
int  n 
) [inline, static]

Definition at line 167 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                           {
  batch res;
  res.s1=_m_psrlqi(a.s1,n);
  res.s2=_m_psrlqi(a.s2,n);
  return res;
}
static batch B_FFXOR ( batch  a,
batch  b 
) [inline, static]

Definition at line 116 of file parallel_128_2mmx.h.

References batch_t::s1, and batch_t::s2.

                                            {
  batch res;
  res.s1=_m_pxor(a.s1,b.s1);
  res.s2=_m_pxor(a.s2,b.s2);
  return res;
}
static group FF0 ( ) [inline, static]

Definition at line 32 of file parallel_128_2mmx.h.

References group_t::s1, and group_t::s2.

                         {
  group res;
  res.s1=(__m64)0x0ULL;
  res.s2=(__m64)0x0ULL;
  return res;
}
static group FF1 ( ) [inline, static]

Definition at line 39 of file parallel_128_2mmx.h.

References group_t::s1, and group_t::s2.

Referenced by FFNOT().

                         {
  group res;
  res.s1=(__m64)0xffffffffffffffffULL;
  res.s2=(__m64)0xffffffffffffffffULL;
  return res;
}
static group FFAND ( group  a,
group  b 
) [inline, static]

Definition at line 46 of file parallel_128_2mmx.h.

References group_t::s1, and group_t::s2.

                                          {
  group res;
  res.s1=_m_pand(a.s1,b.s1);
  res.s2=_m_pand(a.s2,b.s2);
  return res;
}
static group FFNOT ( group  a) [inline, static]

Definition at line 67 of file parallel_128_2mmx.h.

References FF1(), group_t::s1, and group_t::s2.

                                  {
  group res;
  res.s1=_m_pxor(a.s1,FF1().s1);
  res.s2=_m_pxor(a.s2,FF1().s2);
  return res;
}
static group FFOR ( group  a,
group  b 
) [inline, static]

Definition at line 53 of file parallel_128_2mmx.h.

References group_t::s1, and group_t::s2.

                                         {
  group res;
  res.s1=_m_por(a.s1,b.s1);
  res.s2=_m_por(a.s2,b.s2);
  return res;
}
static void FFTABLEIN ( unsigned char *  tab,
int  g,
unsigned char *  data 
) [inline, static]

Definition at line 77 of file parallel_128_2mmx.h.

References data.

                                                                            {
  *(((int *)tab)+2*g)=*((int *)data);
  *(((int *)tab)+2*g+1)=*(((int *)data)+1);
}
static void FFTABLEOUT ( unsigned char *  data,
unsigned char *  tab,
int  g 
) [inline, static]

Definition at line 82 of file parallel_128_2mmx.h.

                                                                             {
  *((int *)data)=*(((int *)tab)+2*g);
  *(((int *)data)+1)=*(((int *)tab)+2*g+1);
}
static void FFTABLEOUTXORNBY ( int  n,
unsigned char *  data,
unsigned char *  tab,
int  g 
) [inline, static]

Definition at line 87 of file parallel_128_2mmx.h.

References j.

                                                                                          {
  int j;
  for(j=0;j<n;j++){
    *(data+j)^=*(tab+8*g+j);
  }
}
static group FFXOR ( group  a,
group  b 
) [inline, static]

Definition at line 60 of file parallel_128_2mmx.h.

References group_t::s1, and group_t::s2.

                                          {
  group res;
  res.s1=_m_pxor(a.s1,b.s1);
  res.s2=_m_pxor(a.s2,b.s2);
  return res;
}
static void M_EMPTY ( void  ) [inline, static]

Definition at line 174 of file parallel_128_2mmx.h.

                                {
  _m_empty();
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines