MCPcopy Create free account
hub / github.com/MegEngine/MegCC / GiStoreHighInt8

Function GiStoreHighInt8

immigration/include/gi_int.h:327–354  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

325}
326
327GI_FORCEINLINE
328void GiStoreHighInt8(void* Buffer, GI_INT8_t Vector) {
329#if defined(GI_NEON_INTRINSICS)
330 vst1_s8((int8_t*)Buffer, vget_high_s8(Vector));
331#elif defined(GI_SSE2_INTRINSICS)
332 _mm_storel_epi64((__m128i*)Buffer, _mm_unpackhi_epi64(Vector, Vector));
333#elif defined(GI_RVV_INTRINSICS)
334 vuint8m1_t index;
335#if GI_SIMD_LEN_BYTE == 16
336 uint8_t index_128[16] = {8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7};
337 index = vle8_v_u8m1(index_128, 16);
338#else
339 uint8_t* index_p = (uint8_t*)&index;
340 int32_t offset = GI_SIMD_LEN_BYTE / sizeof(int8_t) / 2;
341 for (size_t i = 0; i < GI_SIMD_LEN_BYTE / sizeof(int8_t) / 2; i++) {
342 index_p[i] = offset + i;
343 index_p[offset + i] = i;
344 }
345#endif
346 vint8m1_t g_d = vrgather_vv_i8m1(Vector, index, GI_SIMD_LEN_BYTE / sizeof(int8_t));
347 vse8_v_i8m1((int8_t*)Buffer, g_d, GI_SIMD_LEN_BYTE / sizeof(int8_t) / 2);
348#else
349 int8_t* ptr = (int8_t*)Buffer;
350 for (size_t i = 0; i < GI_SIMD_LEN_BYTE / 2 / sizeof(int8_t); i++) {
351 ptr[i] = Vector[GI_SIMD_LEN_BYTE / 2 + i];
352 }
353#endif
354}
355
356GI_FORCEINLINE
357GI_INT32_t GiNegInt32(GI_INT32_t Vector) {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected