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) +}