void build_kernel(Binary<expr::op::Sub, L, R> e, Kernel<T>& k) { Kernel_builder<L, T>::apply(e.arg1(), k); Kernel<T> k2(k); Kernel_builder<R, T>::apply(e.arg2(), k2); k -= k2; }
void build_kernel(Binary<expr::op::Mult, Binary<O, L, R>, S> e, Kernel<T>& k) { Kernel<T> k1(k); Kernel_builder<Binary<O, L, R>, T>::apply(e.arg1(), k1); k1 *= T(e.arg2()); k += k1; }
void build_kernel(Binary<expr::op::Div, Call<B, I, J>, S> e, Kernel<T>& k) { Kernel<T> k1(k); Kernel_builder<Call<B, I, J>, T>::apply(e.arg1(), k1); k1 /= T(e.arg2()); k += k1; }
void build_kernel(Binary<expr::op::Add, L, R> e, Kernel<T>& k) { Kernel_builder<L, T>::apply(e.arg1(), k); Kernel_builder<R, T>::apply(e.arg2(), k); }