From cb1db00983509b055ef80c5618d5e89d8a22d735 Mon Sep 17 00:00:00 2001 From: gnzlbg Date: Tue, 19 Sep 2017 21:11:06 +0200 Subject: [PATCH] [abm] check generated assembly --- library/stdarch/asm/x86_lzcnt_lzcnt.asm | 12 ++++++++++++ library/stdarch/asm/x86_lzcnt_lzcnt.rs | 11 +++++++++++ library/stdarch/asm/x86_popcnt_popcnt.asm | 12 ++++++++++++ library/stdarch/asm/x86_popcnt_popcnt.rs | 11 +++++++++++ 4 files changed, 46 insertions(+) create mode 100644 library/stdarch/asm/x86_lzcnt_lzcnt.asm create mode 100644 library/stdarch/asm/x86_lzcnt_lzcnt.rs create mode 100644 library/stdarch/asm/x86_popcnt_popcnt.asm create mode 100644 library/stdarch/asm/x86_popcnt_popcnt.rs diff --git a/library/stdarch/asm/x86_lzcnt_lzcnt.asm b/library/stdarch/asm/x86_lzcnt_lzcnt.asm new file mode 100644 index 000000000000..891fb4ee8f5e --- /dev/null +++ b/library/stdarch/asm/x86_lzcnt_lzcnt.asm @@ -0,0 +1,12 @@ +_lzcnt_u32: + pushq %rbp + movq %rsp, %rbp + lzcntl %edi, %eax + popq %rbp + retq +_lzcnt_u64: + pushq %rbp + movq %rsp, %rbp + lzcntq %rdi, %rax + popq %rbp + retq diff --git a/library/stdarch/asm/x86_lzcnt_lzcnt.rs b/library/stdarch/asm/x86_lzcnt_lzcnt.rs new file mode 100644 index 000000000000..34185009727b --- /dev/null +++ b/library/stdarch/asm/x86_lzcnt_lzcnt.rs @@ -0,0 +1,11 @@ +extern crate stdsimd; + +#[no_mangle] +pub fn lzcnt_u32(x: u32) -> u32 { + stdsimd::vendor::_lzcnt_u32(x) +} + +#[no_mangle] +pub fn lzcnt_u64(x: u64) -> u64 { + stdsimd::vendor::_lzcnt_u64(x) +} diff --git a/library/stdarch/asm/x86_popcnt_popcnt.asm b/library/stdarch/asm/x86_popcnt_popcnt.asm new file mode 100644 index 000000000000..ef8fcf211c54 --- /dev/null +++ b/library/stdarch/asm/x86_popcnt_popcnt.asm @@ -0,0 +1,12 @@ +_popcnt_u32: + pushq %rbp + movq %rsp, %rbp + popcntl %edi, %eax + popq %rbp + retq +_popcnt_u64: + pushq %rbp + movq %rsp, %rbp + popcntq %rdi, %rax + popq %rbp + retq diff --git a/library/stdarch/asm/x86_popcnt_popcnt.rs b/library/stdarch/asm/x86_popcnt_popcnt.rs new file mode 100644 index 000000000000..9f215be6b2a3 --- /dev/null +++ b/library/stdarch/asm/x86_popcnt_popcnt.rs @@ -0,0 +1,11 @@ +extern crate stdsimd; + +#[no_mangle] +pub fn popcnt_u32(x: u32) -> u32 { + stdsimd::vendor::_popcnt32(x) +} + +#[no_mangle] +pub fn popcnt_u64(x: u64) -> u64 { + stdsimd::vendor::_popcnt64(x) +}