gitee.com/quant1x/gox@v1.7.6/num/asm/_cpp/construct.cpp (about) 1 #include <cstddef> 2 #include <cstdint> 3 4 template<typename T> 5 void Repeat(T* __restrict x, T a, size_t n) { 6 for (size_t i = 0; i < n; i++) { 7 x[i] = a; 8 } 9 } 10 11 template<typename T> 12 void Range(T* __restrict x, T a, size_t n) { 13 for (size_t i = 0; i < n; i++) { 14 x[i] = a; 15 a += 1; 16 } 17 } 18 19 template<typename T> 20 void Gather(T* __restrict dst, T* x, size_t* idx, size_t n) { 21 for (size_t i = 0; i < n; i++) { 22 dst[i] = x[idx[i]]; 23 } 24 } 25 26 template<typename T> 27 void Scatter(T* __restrict dst, T* x, size_t* idx, size_t n) { 28 for (size_t i = 0; i < n; i++) { 29 dst[idx[i]] = x[i]; 30 } 31 } 32 33 template<typename T, typename F> 34 void Convert(T* __restrict x, F* __restrict y, size_t n) { 35 for (size_t i = 0; i < n; i++) { 36 x[i] = T(y[i]); 37 } 38 } 39 40 void Repeat_F64_V(double* x, double a, size_t n) { 41 Repeat(x, a, n); 42 } 43 44 void Repeat_F32_V(float* x, float a, size_t n) { 45 Repeat(x, a, n); 46 } 47 48 void Range_F64_V(double* x, double a, size_t n) { 49 Range(x, a, n); 50 } 51 52 void Range_F32_V(float* x, float a, size_t n) { 53 Range(x, a, n); 54 } 55 56 //void Gather_F64_V(double* dst, double* x, size_t* idx, size_t n) { 57 // Gather(dst, x, idx, n); 58 //} 59 // 60 //void Gather_F32_V(float* dst, float* x, size_t* idx, size_t n) { 61 // Gather(dst, x, idx, n); 62 //} 63 // 64 //void Scatter_F64_V(double* dst, double* x, size_t* idx, size_t n) { 65 // Scatter(dst, x, idx, n); 66 //} 67 // 68 //void Scatter_F32_V(float* dst, float* x, size_t* idx, size_t n) { 69 // Scatter(dst, x, idx, n); 70 //} 71 72 void FromBool_F64_V(double* x, bool* y, size_t n) { 73 Convert(x, y, n); 74 } 75 76 void FromBool_F32_V(float* x, bool* y, size_t n) { 77 Convert(x, y, n); 78 } 79 80 void FromFloat32_F64_V(double* x, float* y, size_t n) { 81 Convert(x, y, n); 82 } 83 84 void FromFloat64_F32_V(float* x, double* y, size_t n) { 85 Convert(x, y, n); 86 } 87 88 void FromInt64_F64_V(double* x, int64_t* y, size_t n) { 89 Convert(x, y, n); 90 } 91 92 void FromInt64_F32_V(float* x, int64_t* y, size_t n) { 93 Convert(x, y, n); 94 } 95 96 void FromInt32_F64_V(double* x, int32_t* y, size_t n) { 97 Convert(x, y, n); 98 } 99 100 void FromInt32_F32_V(float* x, int32_t* y, size_t n) { 101 Convert(x, y, n); 102 } 103 104 void ToBool_F64_V(bool* x, double* y, size_t n) { 105 Convert(x, y, n); 106 } 107 108 void ToBool_F32_V(bool* x, float* y, size_t n) { 109 Convert(x, y, n); 110 } 111 112 void ToInt64_F64_V(int64_t* x, double* y, size_t n) { 113 Convert(x, y, n); 114 } 115 116 void ToInt64_F32_V(int64_t* x, float* y, size_t n) { 117 Convert(x, y, n); 118 } 119 120 void ToInt32_F64_V(int32_t* x, double* y, size_t n) { 121 Convert(x, y, n); 122 } 123 124 void ToInt32_F32_V(int32_t* x, float* y, size_t n) { 125 Convert(x, y, n); 126 }