Skip to content

Instantly share code, notes, and snippets.

@binji
Last active September 11, 2020 20:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save binji/fc09e7e2ada4b0f6fd7c1682f091d8eb to your computer and use it in GitHub Desktop.
Save binji/fc09e7e2ada4b0f6fd7c1682f091d8eb to your computer and use it in GitHub Desktop.
clamp_zero
(func (export "4x_i32") (param i32 i32 i32 i32)
(local $temp i32)
(local $i i32)
local.get 0
i32.const 16
i32.ge_s
if
loop
local.get 2
local.get $i
i32.add
local.get 1
local.get $i
i32.add
i32.load
local.tee $temp
local.get $temp
i32.const 31
i32.shr_u
i32.const -1
i32.add
i32.and
i32.store
local.get 2
local.get $i
i32.add
local.get 1
local.get $i
i32.add
i32.load offset=4
local.tee $temp
local.get $temp
i32.const 31
i32.shr_u
i32.const -1
i32.add
i32.and
i32.store offset=4
local.get 2
local.get $i
i32.add
local.get 1
local.get $i
i32.add
i32.load offset=8
local.tee $temp
local.get $temp
i32.const 31
i32.shr_u
i32.const -1
i32.add
i32.and
i32.store offset=8
local.get 2
local.get $i
i32.add
local.get 1
local.get $i
i32.add
i32.load offset=12
local.tee $temp
local.get $temp
i32.const 31
i32.shr_u
i32.const -1
i32.add
i32.and
i32.store offset=12
local.get $i
i32.const 16
i32.add
local.tee $i
i32.const 16
i32.add
local.get 0
i32.le_s
br_if 0
end
end
local.get $i
i32.const 4
i32.add
local.get 0
i32.le_s
if
loop
local.get 2
local.get $i
i32.add
local.get 1
local.get $i
i32.add
i32.load
local.tee $temp
local.get $temp
i32.const 31
i32.shr_u
i32.const -1
i32.add
i32.and
i32.store
local.get $i
i32.const 4
i32.add
local.tee $i
i32.const 4
i32.add
local.get 0
i32.le_s
br_if 0
end
end
)
(func (export "simd") (param i32 i32 i32 i32)
(local $temp i32)
(local $i i32)
local.get 0
i32.const 16
i32.ge_s
if
loop
local.get 2
local.get $i
i32.add
local.get 1
local.get $i
i32.add
v128.load
i32.const 0
i32x4.splat
i32x4.max_s
v128.store
local.get $i
i32.const 16
i32.add
local.tee $i
i32.const 16
i32.add
local.get 0
i32.le_s
br_if 0
end
end
local.get $i
i32.const 4
i32.add
local.get 0
i32.le_s
if
loop
local.get 2
local.get $i
i32.add
local.get 1
local.get $i
i32.add
i32.load
local.tee $temp
local.get $temp
i32.const 31
i32.shr_u
i32.const -1
i32.add
i32.and
i32.store
local.get $i
i32.const 4
i32.add
local.tee $i
i32.const 4
i32.add
local.get 0
i32.le_s
br_if 0
end
end
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment