以下の操作をmsvcコンパイラで効率的に実装するにはどうすればよいですか?msvcコンパイラのネオンレジスタに効率的に4つの整数値をロードするには?
uint32x4_t temp = { 1, 2, 3, 4 };
私はパフォーマンスを最適化するために働いているので、非常に効率的にネオンレジスタに4つの異なる値をロードする必要があります。上記のステートメントはandroid clangで動作しますが、uint32x4_tは__n128にtypedefされているため、msvcコンパイラでは失敗します。以下のように、
typedef union __declspec(intrin_type) _ADVSIMD_ALIGN(8) __n128
{
unsigned __int64 n128_u64[2];
unsigned __int32 n128_u32[4];
unsigned __int16 n128_u16[8];
unsigned __int8 n128_u8[16];
__int64 n128_i64[2];
__int32 n128_i32[4];
__int16 n128_i16[8];
__int8 n128_i8[16];
float n128_f32[4];
struct
{
__n64 low64;
__n64 high64;
} DUMMYNEONSTRUCT;
} __n128;
128ビット定数を定義すると、明示的にロードするよりも速くNEONレジスタにロードされません(temp = vld1q_u32(...))。 – BitBank