diff --git a/library/stdarch/asm/x86_bmi_andn.asm b/library/stdarch/asm/x86_bmi_andn.asm new file mode 100644 index 000000000000..861b2926a88e --- /dev/null +++ b/library/stdarch/asm/x86_bmi_andn.asm @@ -0,0 +1,12 @@ +_andn_u32: + pushq %rbp + movq %rsp, %rbp + andnl %esi, %edi, %eax + popq %rbp + retq +_andn_u64: + pushq %rbp + movq %rsp, %rbp + andnq %rsi, %rdi, %rax + popq %rbp + retq diff --git a/library/stdarch/asm/x86_bmi_andn.rs b/library/stdarch/asm/x86_bmi_andn.rs new file mode 100644 index 000000000000..e63529c42e60 --- /dev/null +++ b/library/stdarch/asm/x86_bmi_andn.rs @@ -0,0 +1,12 @@ +extern crate stdsimd; + +#[no_mangle] +pub fn andn_u32(x: u32, y: u32) -> u32 { + stdsimd::vendor::_andn_u32(x, y) +} + +#[no_mangle] +pub fn andn_u64(x: u64, y: u64) -> u64 { + stdsimd::vendor::_andn_u64(x, y) +} + diff --git a/library/stdarch/asm/x86_bmi_bextr.asm b/library/stdarch/asm/x86_bmi_bextr.asm new file mode 100644 index 000000000000..4eda97fa5ce5 --- /dev/null +++ b/library/stdarch/asm/x86_bmi_bextr.asm @@ -0,0 +1,32 @@ +_bextr_u32: + pushq %rbp + movq %rsp, %rbp + movzbl %sil, %eax + shll $8, %edx + movzwl %dx, %ecx + orl %eax, %ecx + bextrl %ecx, %edi, %eax + popq %rbp + retq +_bextr_u64: + pushq %rbp + movq %rsp, %rbp + movzbl %sil, %eax + shlq $8, %rdx + movzwl %dx, %ecx + orq %rax, %rcx + bextrq %rcx, %rdi, %rax + popq %rbp + retq +_bextr2_u32: + pushq %rbp + movq %rsp, %rbp + bextrl %esi, %edi, %eax + popq %rbp + retq +_bextr2_u64: + pushq %rbp + movq %rsp, %rbp + bextrq %rsi, %rdi, %rax + popq %rbp + retq diff --git a/library/stdarch/asm/x86_bmi_bextr.rs b/library/stdarch/asm/x86_bmi_bextr.rs new file mode 100644 index 000000000000..1c661e529682 --- /dev/null +++ b/library/stdarch/asm/x86_bmi_bextr.rs @@ -0,0 +1,21 @@ +extern crate stdsimd; + +#[no_mangle] +pub fn bextr_u32(x: u32, y: u32, z: u32) -> u32 { + stdsimd::vendor::_bextr_u32(x, y, z) +} + +#[no_mangle] +pub fn bextr_u64(x: u64, y: u64, z: u64) -> u64 { + stdsimd::vendor::_bextr_u64(x, y, z) +} + +#[no_mangle] +pub fn bextr2_u32(x: u32, y: u32) -> u32 { + stdsimd::vendor::_bextr2_u32(x, y) +} + +#[no_mangle] +pub fn bextr2_u64(x: u64, y: u64) -> u64 { + stdsimd::vendor::_bextr2_u64(x, y) +} diff --git a/library/stdarch/asm/x86_bmi_blsi.asm b/library/stdarch/asm/x86_bmi_blsi.asm new file mode 100644 index 000000000000..8ab833541188 --- /dev/null +++ b/library/stdarch/asm/x86_bmi_blsi.asm @@ -0,0 +1,12 @@ +_blsi_u32: + pushq %rbp + movq %rsp, %rbp + blsil %edi, %eax + popq %rbp + retq +_blsi_u64: + pushq %rbp + movq %rsp, %rbp + blsiq %rdi, %rax + popq %rbp + retq diff --git a/library/stdarch/asm/x86_bmi_blsi.rs b/library/stdarch/asm/x86_bmi_blsi.rs new file mode 100644 index 000000000000..637051c43769 --- /dev/null +++ b/library/stdarch/asm/x86_bmi_blsi.rs @@ -0,0 +1,11 @@ +extern crate stdsimd; + +#[no_mangle] +pub fn blsi_u32(x: u32) -> u32 { + stdsimd::vendor::_blsi_u32(x) +} + +#[no_mangle] +pub fn blsi_u64(x: u64) -> u64 { + stdsimd::vendor::_blsi_u64(x) +} diff --git a/library/stdarch/asm/x86_bmi_blsr.asm b/library/stdarch/asm/x86_bmi_blsr.asm new file mode 100644 index 000000000000..1918c5b4d207 --- /dev/null +++ b/library/stdarch/asm/x86_bmi_blsr.asm @@ -0,0 +1,12 @@ +_blsr_u32: + pushq %rbp + movq %rsp, %rbp + blsrl %edi, %eax + popq %rbp + retq +_blsr_u64: + pushq %rbp + movq %rsp, %rbp + blsrq %rdi, %rax + popq %rbp + retq diff --git a/library/stdarch/asm/x86_bmi_blsr.rs b/library/stdarch/asm/x86_bmi_blsr.rs new file mode 100644 index 000000000000..48a193869a63 --- /dev/null +++ b/library/stdarch/asm/x86_bmi_blsr.rs @@ -0,0 +1,11 @@ +extern crate stdsimd; + +#[no_mangle] +pub fn blsr_u32(x: u32) -> u32 { + stdsimd::vendor::_blsr_u32(x) +} + +#[no_mangle] +pub fn blsr_u64(x: u64) -> u64 { + stdsimd::vendor::_blsr_u64(x) +} diff --git a/library/stdarch/asm/x86_bmi_tzcnt.asm b/library/stdarch/asm/x86_bmi_tzcnt.asm new file mode 100644 index 000000000000..422e7ea9b33c --- /dev/null +++ b/library/stdarch/asm/x86_bmi_tzcnt.asm @@ -0,0 +1,12 @@ +_tzcnt_u32: + pushq %rbp + movq %rsp, %rbp + tzcntl %edi, %eax + popq %rbp + retq +_tzcnt_u64: + pushq %rbp + movq %rsp, %rbp + tzcntq %rdi, %rax + popq %rbp + retq diff --git a/library/stdarch/asm/x86_bmi_tzcnt.rs b/library/stdarch/asm/x86_bmi_tzcnt.rs new file mode 100644 index 000000000000..d4ac48aa2b5e --- /dev/null +++ b/library/stdarch/asm/x86_bmi_tzcnt.rs @@ -0,0 +1,11 @@ +extern crate stdsimd; + +#[no_mangle] +pub fn tzcnt_u32(x: u32) -> u32 { + stdsimd::vendor::_tzcnt_u32(x) +} + +#[no_mangle] +pub fn tzcnt_u64(x: u64) -> u64 { + stdsimd::vendor::_tzcnt_u64(x) +}