// NOT YET SUPPORTED DUE TO MISSING SIMD OP CODE IMPLS in v8: // https://github.com/WebAssembly/simd/blob/master/proposals/simd/ImplementationStatus.md // @ts-ignore: decorator @inline function addm_64x2(x: v128, y: v128, n: f64): v128 { return f64x2.mul(x, f64x2.add(y, f64x2.splat(n))); } // @ts-ignore: decorator @inline function fastexp9_64x2(ptr: usize): v128 { let x = v128.load(ptr); let y = addm_64x2(x, x, 9.0); y = addm_64x2(x, y, 72.0); y = addm_64x2(x, y, 504.0); y = addm_64x2(x, y, 3024.0); y = addm_64x2(x, y, 15120.0); y = addm_64x2(x, y, 60480.0); y = addm_64x2(x, y, 181440.0); y = addm_64x2(x, y, 362880.0); y = addm_64x2(x, y, 362880.0); return f64x2.mul(y, f64x2.splat(2.75573192e-6)); } // @ts-ignore: decorator @inline function sigmoid_64x2(x: usize): v128 { const one = f64x2.splat(1.0); return f64x2.div(one, f64x2.add(one, fastexp9_64x2(-x))); } export function sigmoid_64x2_ptr(out: usize, src: usize, n: usize): usize { const res = out; n >>= 1; while (n-- > 0) { v128.store(out, sigmoid_64x2(src)); out += sizeof<v128>(); src += sizeof<v128>(); } return res; }