Browse Source

fix build on c906, fix #3230

tags/20211122
nihui 4 years ago
parent
commit
57ad2c138c
2 changed files with 39 additions and 2 deletions
  1. +37
    -0
      src/layer/riscv/riscv_v_071_fix.h
  2. +2
    -2
      src/layer/riscv/softmax_riscv.cpp

+ 37
- 0
src/layer/riscv/riscv_v_071_fix.h View File

@@ -457,6 +457,43 @@ static inline vfloat32m1_t vfredsum_vs_f32m8_f32m1(vfloat32m1_t dst, vfloat32m8_
return vfaddvv_float32xm1(vfaddvv_float32xm1(vfaddvv_float32xm1(b8.m1[0], b8.m1[1], vl), vfaddvv_float32xm1(b8.m1[2], b8.m1[3], vl), vl), vfaddvv_float32xm1(vfaddvv_float32xm1(b8.m1[4], b8.m1[5], vl), vfaddvv_float32xm1(b8.m1[6], b8.m1[7], vl), vl), vl);
}

static inline vfloat32m1_t vfredmax_vs_f32m1_f32m1(vfloat32m1_t dst, vfloat32m1_t a, vfloat32m1_t b, word_type vl)
{
return vfredmaxvs_float32xm1(a, b, vl);
}
static inline vfloat32m1_t vfredmax_vs_f32m2_f32m1(vfloat32m1_t dst, vfloat32m2_t a, vfloat32m1_t b, word_type vl)
{
float32xm2_u b2;
b2.m1[0] = b;
b2.m1[1] = vfmvvf_float32xm1(0.f, vl);
b2.v = vfredmaxvs_float32xm2(a, b2.v, vl);
return vfmaxvv_float32xm1(b2.m1[0], b2.m1[1], vl);
}
static inline vfloat32m1_t vfredmax_vs_f32m4_f32m1(vfloat32m1_t dst, vfloat32m4_t a, vfloat32m1_t b, word_type vl)
{
float32xm4_u b4;
b4.m1[0] = b;
b4.m1[1] = vfmvvf_float32xm1(0.f, vl);
b4.m1[2] = vfmvvf_float32xm1(0.f, vl);
b4.m1[3] = vfmvvf_float32xm1(0.f, vl);
b4.v = vfredmaxvs_float32xm4(a, b4.v, vl);
return vfmaxvv_float32xm1(vfmaxvv_float32xm1(b4.m1[0], b4.m1[1], vl), vfmaxvv_float32xm1(b4.m1[2], b4.m1[3], vl), vl);
}
static inline vfloat32m1_t vfredmax_vs_f32m8_f32m1(vfloat32m1_t dst, vfloat32m8_t a, vfloat32m1_t b, word_type vl)
{
float32xm8_u b8;
b8.m1[0] = b;
b8.m1[1] = vfmvvf_float32xm1(0.f, vl);
b8.m1[2] = vfmvvf_float32xm1(0.f, vl);
b8.m1[3] = vfmvvf_float32xm1(0.f, vl);
b8.m1[4] = vfmvvf_float32xm1(0.f, vl);
b8.m1[5] = vfmvvf_float32xm1(0.f, vl);
b8.m1[6] = vfmvvf_float32xm1(0.f, vl);
b8.m1[7] = vfmvvf_float32xm1(0.f, vl);
b8.v = vfredmaxvs_float32xm8(a, b8.v, vl);
return vfmaxvv_float32xm1(vfmaxvv_float32xm1(vfmaxvv_float32xm1(b8.m1[0], b8.m1[1], vl), vfmaxvv_float32xm1(b8.m1[2], b8.m1[3], vl), vl), vfmaxvv_float32xm1(vfmaxvv_float32xm1(b8.m1[4], b8.m1[5], vl), vfmaxvv_float32xm1(b8.m1[6], b8.m1[7], vl), vl), vl);
}

#define vmfeq_vv_f32m1_b32 vmfeqvv_e32xm1_float32xm1
#define vmfeq_vv_f32m2_b16 vmfeqvv_e32xm2_float32xm2
#define vmfeq_vv_f32m4_b8 vmfeqvv_e32xm4_float32xm4


+ 2
- 2
src/layer/riscv/softmax_riscv.cpp View File

@@ -224,7 +224,7 @@ int Softmax_riscv::forward_inplace(Mat& bottom_top_blob, const Option& opt) cons
vfloat32m1_t _s = vfmv_s_f_f32m1(vundefined_f32m1(), s, vl);

_p = exp_ps(vfsub_vf_f32m8(_p, m, vl), vl);
_s = vfredosum_vs_f32m8_f32m1(_s, _p, _s, vl);
_s = vfredsum_vs_f32m8_f32m1(_s, _p, _s, vl);

vse32_v_f32m8(ptr2, _p, vl);
s = vfmv_f_s_f32m1_f32(_s);
@@ -517,4 +517,4 @@ int Softmax_riscv::forward_inplace(Mat& bottom_top_blob, const Option& opt) cons
return Softmax::forward_inplace(bottom_top_blob, opt);
}

} // namespace ncnn
} // namespace ncnn

Loading…
Cancel
Save