| 6 | using namespace megdnn; |
| 7 | |
| 8 | void PowC::exec(_megdnn_tensor_in src, _megdnn_tensor_out dst) { |
| 9 | megdnn_assert( |
| 10 | src.layout.dtype == dst.layout.dtype && |
| 11 | src.layout.dtype.category() == DTypeCategory::FLOAT && |
| 12 | src.layout.eq_shape(dst.layout), |
| 13 | "invalid layout: %s vs %s", src.layout.to_string().c_str(), |
| 14 | dst.layout.to_string().c_str()); |
| 15 | int iv, *ivp = nullptr; |
| 16 | float fv, *fvp = nullptr; |
| 17 | float p = param().exp; |
| 18 | int pi = static_cast<int>(std::round(p)); |
| 19 | if (std::abs(static_cast<float>(pi) - p) < std::numeric_limits<float>::epsilon()) { |
| 20 | iv = pi; |
| 21 | ivp = &iv; |
| 22 | } else { |
| 23 | fv = p; |
| 24 | fvp = &fv; |
| 25 | } |
| 26 | do_exec(src, dst, fvp, ivp); |
| 27 | } |
| 28 | |
| 29 | // vim: syntax=cpp.doxygen |