mirror of
https://github.com/aicodix/code.git
synced 2026-04-27 22:35:44 +00:00
added vmul() and vsignum()
This commit is contained in:
parent
0797171e03
commit
48303e7f58
4 changed files with 263 additions and 0 deletions
108
simd.hh
108
simd.hh
|
|
@ -1226,6 +1226,114 @@ static inline SIMD<uint16_t, WIDTH> vqsub(SIMD<uint16_t, WIDTH> a, SIMD<uint16_t
|
|||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<float, WIDTH> vmul(SIMD<float, WIDTH> a, SIMD<float, WIDTH> b)
|
||||
{
|
||||
SIMD<float, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = a.v[i] * b.v[i];
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<double, WIDTH> vmul(SIMD<double, WIDTH> a, SIMD<double, WIDTH> b)
|
||||
{
|
||||
SIMD<double, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = a.v[i] * b.v[i];
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<int8_t, WIDTH> vmul(SIMD<int8_t, WIDTH> a, SIMD<int8_t, WIDTH> b)
|
||||
{
|
||||
SIMD<int8_t, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = a.v[i] * b.v[i];
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<int16_t, WIDTH> vmul(SIMD<int16_t, WIDTH> a, SIMD<int16_t, WIDTH> b)
|
||||
{
|
||||
SIMD<int16_t, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = a.v[i] * b.v[i];
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<int32_t, WIDTH> vmul(SIMD<int32_t, WIDTH> a, SIMD<int32_t, WIDTH> b)
|
||||
{
|
||||
SIMD<int32_t, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = a.v[i] * b.v[i];
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<int64_t, WIDTH> vmul(SIMD<int64_t, WIDTH> a, SIMD<int64_t, WIDTH> b)
|
||||
{
|
||||
SIMD<int64_t, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = a.v[i] * b.v[i];
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<float, WIDTH> vsignum(SIMD<float, WIDTH> a)
|
||||
{
|
||||
SIMD<float, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = (a.v[i] > 0.f) - (a.v[i] < 0.f);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<double, WIDTH> vsignum(SIMD<double, WIDTH> a)
|
||||
{
|
||||
SIMD<double, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = (a.v[i] > 0.) - (a.v[i] < 0.);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<int8_t, WIDTH> vsignum(SIMD<int8_t, WIDTH> a)
|
||||
{
|
||||
SIMD<int8_t, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = (a.v[i] > 0) - (a.v[i] < 0);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<int16_t, WIDTH> vsignum(SIMD<int16_t, WIDTH> a)
|
||||
{
|
||||
SIMD<int16_t, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = (a.v[i] > 0) - (a.v[i] < 0);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<int32_t, WIDTH> vsignum(SIMD<int32_t, WIDTH> a)
|
||||
{
|
||||
SIMD<int32_t, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = (a.v[i] > 0) - (a.v[i] < 0);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<int64_t, WIDTH> vsignum(SIMD<int64_t, WIDTH> a)
|
||||
{
|
||||
SIMD<int64_t, WIDTH> tmp;
|
||||
for (int i = 0; i < WIDTH; ++i)
|
||||
tmp.v[i] = (a.v[i] > 0) - (a.v[i] < 0);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <int WIDTH>
|
||||
static inline SIMD<float, WIDTH> vsign(SIMD<float, WIDTH> a, SIMD<float, WIDTH> b)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue