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  }