|
|
|
@ -22,130 +22,6 @@ void test_hal_intrin_float16(); |
|
|
|
|
|
|
|
|
|
#ifndef CV_CPU_OPTIMIZATION_DECLARATIONS_ONLY |
|
|
|
|
|
|
|
|
|
template <typename R> struct Data; |
|
|
|
|
template <int N> struct initializer; |
|
|
|
|
|
|
|
|
|
#if CV_SIMD_SCALABLE |
|
|
|
|
template <> struct initializer<128> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return v_load({d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15], |
|
|
|
|
d[16], d[17], d[18], d[19], d[20], d[21], d[22], d[23], d[24], d[25], d[26], d[27], d[28], d[29], d[30], d[31], |
|
|
|
|
d[32], d[33], d[34], d[35], d[36], d[37], d[38], d[39], d[40], d[41], d[42], d[43], d[44], d[45], d[46], d[47], |
|
|
|
|
d[48], d[49], d[50], d[51], d[52], d[53], d[54], d[55], d[56], d[57], d[58], d[59], d[60], d[61], d[62], d[63], |
|
|
|
|
d[64], d[65], d[66], d[67], d[68], d[69], d[70], d[71], d[72], d[73], d[74], d[75], d[76], d[77], d[78], d[79], |
|
|
|
|
d[80], d[81], d[82], d[83], d[84], d[85], d[86], d[87], d[88], d[89], d[90], d[91], d[92], d[93], d[94], d[95], |
|
|
|
|
d[96], d[97], d[98], d[99], d[100], d[101], d[102], d[103], d[104], d[105], d[106], d[107], d[108], d[109], d[110], d[111], |
|
|
|
|
d[112], d[113], d[114], d[115], d[116], d[117], d[118], d[119], d[120], d[121], d[122], d[123], d[124], d[125], d[126], d[127]}); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<64> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return v_load({d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15], |
|
|
|
|
d[16], d[17], d[18], d[19], d[20], d[21], d[22], d[23], d[24], d[25], d[26], d[27], d[28], d[29], d[30], d[31], |
|
|
|
|
d[32], d[33], d[34], d[35], d[36], d[37], d[38], d[39], d[40], d[41], d[42], d[43], d[44], d[45], d[46], d[47], |
|
|
|
|
d[48], d[49], d[50], d[51], d[52], d[53], d[54], d[55], d[56], d[57], d[58], d[59], d[60], d[61], d[62], d[63]}); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<32> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return v_load({d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15], |
|
|
|
|
d[16], d[17], d[18], d[19], d[20], d[21], d[22], d[23], d[24], d[25], d[26], d[27], d[28], d[29], d[30], d[31]}); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<16> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return v_load({d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]}); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<8> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return v_load({d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7]}); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<4> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return v_load({d[0], d[1], d[2], d[3]}); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<2> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return v_load({d[0], d[1]}); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#else |
|
|
|
|
template <> struct initializer<64> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return R(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15], |
|
|
|
|
d[16], d[17], d[18], d[19], d[20], d[21], d[22], d[23], d[24], d[25], d[26], d[27], d[28], d[29], d[30], d[31], |
|
|
|
|
d[32], d[33], d[34], d[35], d[36], d[37], d[38], d[39], d[40], d[41], d[42], d[43], d[44], d[45], d[46], d[47], |
|
|
|
|
d[48], d[49], d[50], d[51], d[52], d[53], d[54], d[55], d[56], d[57], d[58], d[59], d[60], d[61], d[62], d[63]); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<32> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return R(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15], |
|
|
|
|
d[16], d[17], d[18], d[19], d[20], d[21], d[22], d[23], d[24], d[25], d[26], d[27], d[28], d[29], d[30], d[31]); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<16> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return R(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15]); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<8> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return R(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7]); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<4> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return R(d[0], d[1], d[2], d[3]); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> struct initializer<2> |
|
|
|
|
{ |
|
|
|
|
template <typename R> static R init(const Data<R> & d) |
|
|
|
|
{ |
|
|
|
|
return R(d[0], d[1]); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
#endif |
|
|
|
|
//==================================================================================================
|
|
|
|
|
|
|
|
|
|
template <typename R> struct Data |
|
|
|
@ -168,7 +44,8 @@ template <typename R> struct Data |
|
|
|
|
} |
|
|
|
|
operator R () const |
|
|
|
|
{ |
|
|
|
|
return initializer<VTraits<R>::max_nlanes>().init(*this); |
|
|
|
|
CV_Assert(VTraits<R>::vlanes() <= VTraits<R>::max_nlanes); |
|
|
|
|
return vx_load(d); |
|
|
|
|
} |
|
|
|
|
Data<R> & operator=(const R & r) |
|
|
|
|
{ |
|
|
|
|