From 4f1f53b707da0eb089701ecb9dca0a3bc3862a35 Mon Sep 17 00:00:00 2001 From: gnzlbg Date: Tue, 19 Sep 2017 21:23:39 +0200 Subject: [PATCH] [bmi] check assembly of bmi instructions --- library/stdarch/asm/x86_bmi_andn.asm | 12 ++++++++++ library/stdarch/asm/x86_bmi_andn.rs | 12 ++++++++++ library/stdarch/asm/x86_bmi_bextr.asm | 32 +++++++++++++++++++++++++++ library/stdarch/asm/x86_bmi_bextr.rs | 21 ++++++++++++++++++ library/stdarch/asm/x86_bmi_blsi.asm | 12 ++++++++++ library/stdarch/asm/x86_bmi_blsi.rs | 11 +++++++++ library/stdarch/asm/x86_bmi_blsr.asm | 12 ++++++++++ library/stdarch/asm/x86_bmi_blsr.rs | 11 +++++++++ library/stdarch/asm/x86_bmi_tzcnt.asm | 12 ++++++++++ library/stdarch/asm/x86_bmi_tzcnt.rs | 11 +++++++++ 10 files changed, 146 insertions(+) create mode 100644 library/stdarch/asm/x86_bmi_andn.asm create mode 100644 library/stdarch/asm/x86_bmi_andn.rs create mode 100644 library/stdarch/asm/x86_bmi_bextr.asm create mode 100644 library/stdarch/asm/x86_bmi_bextr.rs create mode 100644 library/stdarch/asm/x86_bmi_blsi.asm create mode 100644 library/stdarch/asm/x86_bmi_blsi.rs create mode 100644 library/stdarch/asm/x86_bmi_blsr.asm create mode 100644 library/stdarch/asm/x86_bmi_blsr.rs create mode 100644 library/stdarch/asm/x86_bmi_tzcnt.asm create mode 100644 library/stdarch/asm/x86_bmi_tzcnt.rs 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) +}