#ifndef SOFTRVV_VMUL_H
#define SOFTRVV_VMUL_H

#include <stddef.h>

namespace softrvv {

template <typename T>
void vmul_vx(T *dest, T *src1, const T *src2, int32_t avl) {
  for (int32_t idx = 0; idx < avl; idx++) {
    dest[idx] = src1[idx] * *src2;
  }
}

template <typename T>
void vmul_vv(T *dest, T *src1, T *src2, int32_t avl) {
  for (int32_t idx = 0; idx < avl; idx++) {
    dest[idx] = src1[idx] * src2[idx];
  }
}

template <typename T>
void vmulh_vx(T *dest, T *src1, const T *src2, int32_t avl) {
  for (int32_t idx = 0; idx < avl; idx++) {
    // TODO(b/197705521) find a better way to promote T to larger type
    int64_t temp =
        static_cast<int64_t>(src1[idx]) * static_cast<int64_t>(*src2);
    dest[idx] = static_cast<T>(temp >> (sizeof(T) * 8));
  }
}

template <typename T>
void vmulh_vv(T *dest, T *src1, T *src2, int32_t avl) {
  for (int32_t idx = 0; idx < avl; idx++) {
    // TODO(b/197705521) find a better way to promote T to larger type
    int64_t temp =
        static_cast<int64_t>(src1[idx]) * static_cast<int64_t>(src2[idx]);
    dest[idx] = static_cast<T>(temp >> (sizeof(T) * 8));
  }
}

}  // namespace softrvv

#endif  // SOFTRVV_VMUL_H
