// vim: ft=arm {% include "armv7neon_mmm_q_scalar.tmpliq" label:"scalar_min", op:"vmin.f32", from:from, to:to%} {% include "armv7neon_mmm_q_scalar.tmpliq" label:"scalar_max", op:"vmax.f32", from:from, to:to%} {% include "armv7neon_mmm_q_scalar.tmpliq" label:"scalar_mul", op:"vmul.f32", from:from, to:to%} {% include "armv7neon_mmm_q_scalar.tmpliq" label:"scalar_add", op:"vadd.f32", from:from, to:to%} {% include "armv7neon_mmm_q_scalar.tmpliq" label:"scalar_sub", op:"vsub.f32", from:from, to:to%} {% include "armv7neon_mmm_q_scalar.tmpliq" label:"scalar_sub_flipped", op:"vsub.f32", from:from, to:to, flipped:true%} .leaky_relu: vmov s0, r3 vdup.32 q0, d0[0] {% for reg in (from..to) %} vmul.f32 q2, q{{reg}}, q0 vcgt.f32 q1, q{{reg}}, 0 vbsl q1, q{{reg}}, q2 vmov q{{reg}}, q1 {% endfor %} b .non_linear_loop .q_shl: .q_shr: .q_scale: b .unsupported