[bmi] use llvm intrinsics instead of platform-intrinsic

This commit is contained in:
gnzlbg 2017-09-19 20:36:49 +02:00 committed by Andrew Gallant
parent 5c483e3773
commit 4446e941ed
3 changed files with 15 additions and 4 deletions

View file

@ -8,8 +8,10 @@
//! provides a quick overview of the available instructions.
#[allow(dead_code)]
extern "platform-intrinsic" {
extern "C" {
#[link_name="llvm.x86.bmi.bextr.32"]
fn x86_bmi_bextr_32(x: u32, y: u32) -> u32;
#[link_name="llvm.x86.bmi.bextr.64"]
fn x86_bmi_bextr_64(x: u64, y: u64) -> u64;
}

View file

@ -32,12 +32,18 @@ pub fn _mulx_u64(a: u64, b: u64) -> (u64, u64) {
}
#[allow(dead_code)]
extern "platform-intrinsic" {
extern "C" {
#[link_name="llvm.x86.bmi.bzhi.32"]
fn x86_bmi2_bzhi_32(x: u32, y: u32) -> u32;
#[link_name="llvm.x86.bmi.bzhi.64"]
fn x86_bmi2_bzhi_64(x: u64, y: u64) -> u64;
#[link_name="llvm.x86.bmi.pdep.32"]
fn x86_bmi2_pdep_32(x: u32, y: u32) -> u32;
#[link_name="llvm.x86.bmi.pdep.64"]
fn x86_bmi2_pdep_64(x: u64, y: u64) -> u64;
#[link_name="llvm.x86.bmi.pext.32"]
fn x86_bmi2_pext_32(x: u32, y: u32) -> u32;
#[link_name="llvm.x86.bmi.pext.64"]
fn x86_bmi2_pext_64(x: u64, y: u64) -> u64;
}

View file

@ -7,10 +7,13 @@
//! [Wikipedia](https://en.wikipedia.org/wiki/Bit_Manipulation_Instruction_Sets#TBM_.28Trailing_Bit_Manipulation.29)
//! provides a quick overview of the available instructions.
/* // TODO: LLVM-CODEGEN ERROR
// TODO: LLVM-CODEGEN ERROR: LLVM ERROR: Cannot select: intrinsic %llvm.x86.tbm.bextri.u32
/*
#[allow(dead_code)]
extern "platform-intrinsic" {
extern "C" {
#[link_name="llvm.x86.tbm.bextri.u32"]
fn x86_tbm_bextri_u32(a: u32, y: u32) -> u32;
#[link_name="llvm.x86.tbm.bextri.u64"]
fn x86_tbm_bextri_u64(x: u64, y: u64) -> u64;
}