1# Copyright 2020 Google LLC 2# 3# This source code is licensed under the BSD-style license found in the 4# LICENSE file in the root directory of this source tree. 5 6#include <xnnpack/assembly.h> 7 8# void xnn_f32_vrelu_ukernel__wasm32_shr_x1( 9# size_t n, 0 10# const float* x, 1 11# float* y, 2 12# const union params) 3 unused 13 14# locals 15# float v 4 16# float mask 5 17 18BEGIN_FUNCTION xnn_f32_vrelu_ukernel__wasm32_shr_x1 19 .functype xnn_f32_vrelu_ukernel__wasm32_shr_x1 (i32, i32, i32, i32) -> () 20 .local i32, i32 # 4 - value, 5 - mask 21 22 loop 23 local.get 1 # src 24 i32.load 0 # load float from src 25 local.set 4 26 27 local.get 1 # src += 4 28 i32.const 4 29 i32.add 30 local.set 1 31 32 local.get 4 # (v >> 31) - 1) & v 33 i32.const 31 34 i32.shr_u 35 local.set 5 36 37 local.get 5 38 i32.const -1 39 i32.add 40 local.set 5 41 42 local.get 4 43 local.get 5 44 i32.and 45 local.set 4 46 47 local.get 2 # dst 48 local.get 4 49 i32.store 0 # store float 50 51 local.get 2 # dst += 4 52 i32.const 4 53 i32.add 54 local.set 2 55 56 local.get 0 57 i32.const -4 58 i32.add # count -= 4 59 local.set 0 60 61 local.get 0 62 i32.const 0 # count > 0 63 i32.gt_s 64 br_if 0 # loop 65 end_loop 66END_FUNCTION xnn_f32_vrelu_ukernel__wasm32_shr_x1