| 661 | } |
| 662 | |
| 663 | inline int32x4x4_t vquantize_internal(const float32x4x4_t &qv, float scale, int32_t offset) |
| 664 | { |
| 665 | const int32x4_t voffset = vdupq_n_s32(offset); |
| 666 | const float32x4_t vinvscale = vdupq_n_f32(1.f / scale); |
| 667 | const int32x4x4_t rf = {{ |
| 668 | #ifdef __aarch64__ |
| 669 | vaddq_s32(vcvtnq_s32_f32(vmulq_f32(qv.val[0], vinvscale)), voffset), |
| 670 | vaddq_s32(vcvtnq_s32_f32(vmulq_f32(qv.val[1], vinvscale)), voffset), |
| 671 | vaddq_s32(vcvtnq_s32_f32(vmulq_f32(qv.val[2], vinvscale)), voffset), |
| 672 | vaddq_s32(vcvtnq_s32_f32(vmulq_f32(qv.val[3], vinvscale)), voffset), |
| 673 | #else //__aarch64__ |
| 674 | vaddq_s32(vcvtq_s32_f32(vmulq_f32(qv.val[0], vinvscale)), voffset), |
| 675 | vaddq_s32(vcvtq_s32_f32(vmulq_f32(qv.val[1], vinvscale)), voffset), |
| 676 | vaddq_s32(vcvtq_s32_f32(vmulq_f32(qv.val[2], vinvscale)), voffset), |
| 677 | vaddq_s32(vcvtq_s32_f32(vmulq_f32(qv.val[3], vinvscale)), voffset), |
| 678 | #endif //__aarch64__ |
| 679 | }}; |
| 680 | return rf; |
| 681 | } |
| 682 | |
| 683 | inline int32x4x4_t vquantize_internal(const float32x4x4_t &qv, float scale, float offset) |
| 684 | { |
no outgoing calls
no test coverage detected