1e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao#include <stdio.h> 2e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 3e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaotypedef unsigned char v16i8 __attribute__((ext_vector_type(16))); 4e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaotypedef short v8i16 __attribute__((ext_vector_type(16))); 5e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaotypedef int v4i32 __attribute__((ext_vector_type(4))); 6e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaotypedef float v4f32 __attribute__((ext_vector_type(4))); 7e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaotypedef long long v2i64 __attribute__((ext_vector_type(2))); 8e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaotypedef double v2f64 __attribute__((ext_vector_type(2))); 9e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 10e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaovoid print_v16i8(const char *str, const v16i8 v) { 11e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao union { 12e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao unsigned char elts[16]; 13e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v16i8 vec; 14e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao } tv; 15e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao tv.vec = v; 16e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao printf("%s = { %hhu, %hhu, %hhu, %hhu, %hhu, %hhu, %hhu, " 17e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao "%hhu, %hhu, %hhu, %hhu, %hhu, %hhu, %hhu, " 18e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao "%hhu, %hhu }\n", 19e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao str, tv.elts[0], tv.elts[1], tv.elts[2], tv.elts[3], tv.elts[4], tv.elts[5], 20e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao tv.elts[6], tv.elts[7], tv.elts[8], tv.elts[9], tv.elts[10], tv.elts[11], 21e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao tv.elts[12], tv.elts[13], tv.elts[14], tv.elts[15]); 22e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 23e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 24e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaovoid print_v16i8_hex(const char *str, const v16i8 v) { 25e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao union { 26e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao unsigned char elts[16]; 27e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v16i8 vec; 28e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao } tv; 29e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao tv.vec = v; 30e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao printf("%s = { 0x%02hhx, 0x%02hhx, 0x%02hhx, 0x%02hhx, 0x%02hhx, 0x%02hhx, 0x%02hhx, " 31e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao "0x%02hhx, 0x%02hhx, 0x%02hhx, 0x%02hhx, 0x%02hhx, 0x%02hhx, 0x%02hhx, " 32e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao "0x%02hhx, 0x%02hhx }\n", 33e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao str, tv.elts[0], tv.elts[1], tv.elts[2], tv.elts[3], tv.elts[4], tv.elts[5], 34e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao tv.elts[6], tv.elts[7], tv.elts[8], tv.elts[9], tv.elts[10], tv.elts[11], 35e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao tv.elts[12], tv.elts[13], tv.elts[14], tv.elts[15]); 36e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 37e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 38e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaovoid print_v8i16_hex(const char *str, v8i16 v) { 39e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao union { 40e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao short elts[8]; 41e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v8i16 vec; 42e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao } tv; 43e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao tv.vec = v; 44e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao printf("%s = { 0x%04hx, 0x%04hx, 0x%04hx, 0x%04hx, 0x%04hx, " 45e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao "0x%04hx, 0x%04hx, 0x%04hx }\n", 46e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao str, tv.elts[0], tv.elts[1], tv.elts[2], tv.elts[3], tv.elts[4], 47e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao tv.elts[5], tv.elts[6], tv.elts[7]); 48e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 49e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 50e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaovoid print_v4i32(const char *str, v4i32 v) { 51e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao printf("%s = { %d, %d, %d, %d }\n", str, v.x, v.y, v.z, v.w); 52e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 53e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 54e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaovoid print_v4f32(const char *str, v4f32 v) { 55e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao printf("%s = { %f, %f, %f, %f }\n", str, v.x, v.y, v.z, v.w); 56e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 57e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 58e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaovoid print_v2i64(const char *str, v2i64 v) { 59e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao printf("%s = { %lld, %lld }\n", str, v.x, v.y); 60e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 61e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 62e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaovoid print_v2f64(const char *str, v2f64 v) { 63e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao printf("%s = { %g, %g }\n", str, v.x, v.y); 64e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 65e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 66e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao/*----------------------------------------------------------------------*/ 67e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 68e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov16i8 v16i8_mpy(v16i8 v1, v16i8 v2) { 69e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return v1 * v2; 70e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 71e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 72e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov16i8 v16i8_add(v16i8 v1, v16i8 v2) { 73e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return v1 + v2; 74e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 75e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 76e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov4i32 v4i32_shuffle_1(v4i32 a) { 77e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4i32 c2 = a.yzwx; 78e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 79e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 80e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 81e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov4i32 v4i32_shuffle_2(v4i32 a) { 82e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4i32 c2 = a.zwxy; 83e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 84e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 85e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 86e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov4i32 v4i32_shuffle_3(v4i32 a) { 87e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4i32 c2 = a.wxyz; 88e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 89e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 90e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 91e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov4i32 v4i32_shuffle_4(v4i32 a) { 92e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4i32 c2 = a.xyzw; 93e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 94e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 95e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 96e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov4i32 v4i32_shuffle_5(v4i32 a) { 97e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4i32 c2 = a.xwzy; 98e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 99e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 100e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 101e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov4f32 v4f32_shuffle_1(v4f32 a) { 102e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4f32 c2 = a.yzwx; 103e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 104e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 105e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 106e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov4f32 v4f32_shuffle_2(v4f32 a) { 107e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4f32 c2 = a.zwxy; 108e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 109e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 110e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 111e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov4f32 v4f32_shuffle_3(v4f32 a) { 112e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4f32 c2 = a.wxyz; 113e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 114e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 115e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 116e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov4f32 v4f32_shuffle_4(v4f32 a) { 117e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4f32 c2 = a.xyzw; 118e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 119e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 120e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 121e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov4f32 v4f32_shuffle_5(v4f32 a) { 122e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4f32 c2 = a.xwzy; 123e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 124e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 125e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 126e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov2i64 v2i64_shuffle(v2i64 a) { 127e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v2i64 c2 = a.yx; 128e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 129e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 130e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 131e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaov2f64 v2f64_shuffle(v2f64 a) { 132e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v2f64 c2 = a.yx; 133e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return c2; 134e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 135e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 136e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liaoint main(void) { 137e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v16i8 v00 = { 0xf4, 0xad, 0x01, 0xe9, 0x51, 0x78, 0xc1, 0x8a, 138e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 0x94, 0x7c, 0x49, 0x6c, 0x21, 0x32, 0xb2, 0x04 }; 139e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v16i8 va0 = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 140e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; 141e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v16i8 va1 = { 0x11, 0x83, 0x4b, 0x63, 0xff, 0x90, 0x32, 0xe5, 142e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 0x5a, 0xaa, 0x20, 0x01, 0x0d, 0x15, 0x77, 0x05 }; 143e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v8i16 v01 = { 0x1a87, 0x0a14, 0x5014, 0xfff0, 144e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 0xe194, 0x0184, 0x801e, 0x5940 }; 145e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4i32 v1 = { 1, 2, 3, 4 }; 146e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v4f32 v2 = { 1.0, 2.0, 3.0, 4.0 }; 147e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v2i64 v3 = { 691043ll, 910301513ll }; 148e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao v2f64 v4 = { 5.8e56, 9.103e-62 }; 149e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 150e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao puts("---- vector tests start ----"); 151e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 152e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v16i8_hex("v00 ", v00); 153e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v16i8_hex("va0 ", va0); 154e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v16i8_hex("va1 ", va1); 155e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v16i8_hex("va0 x va1 ", v16i8_mpy(va0, va1)); 156e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v16i8_hex("va0 + va1 ", v16i8_add(va0, va1)); 157e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v8i16_hex("v01 ", v01); 158e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 159e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v4i32("v4i32_shuffle_1(1, 2, 3, 4)", v4i32_shuffle_1(v1)); 160e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v4i32("v4i32_shuffle_2(1, 2, 3, 4)", v4i32_shuffle_2(v1)); 161e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v4i32("v4i32_shuffle_3(1, 2, 3, 4)", v4i32_shuffle_3(v1)); 162e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v4i32("v4i32_shuffle_4(1, 2, 3, 4)", v4i32_shuffle_4(v1)); 163e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v4i32("v4i32_shuffle_5(1, 2, 3, 4)", v4i32_shuffle_5(v1)); 164e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 165e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v4f32("v4f32_shuffle_1(1, 2, 3, 4)", v4f32_shuffle_1(v2)); 166e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v4f32("v4f32_shuffle_2(1, 2, 3, 4)", v4f32_shuffle_2(v2)); 167e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v4f32("v4f32_shuffle_3(1, 2, 3, 4)", v4f32_shuffle_3(v2)); 168e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v4f32("v4f32_shuffle_4(1, 2, 3, 4)", v4f32_shuffle_4(v2)); 169e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v4f32("v4f32_shuffle_5(1, 2, 3, 4)", v4f32_shuffle_5(v2)); 170e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 171e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v2i64("v3 ", v3); 172e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v2i64("v2i64_shuffle ", v2i64_shuffle(v3)); 173e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v2f64("v4 ", v4); 174e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao print_v2f64("v2f64_shuffle ", v2f64_shuffle(v4)); 175e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 176e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao puts("---- vector tests end ----"); 177e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao 178e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao return 0; 179e264f62ca09a8f65c87a46d562a4d0f9ec5d457Shih-wei Liao} 180