about summary refs log tree commit diff
path: root/compiler/rustc_codegen_gcc/src/intrinsic/llvm.rs
blob: b074febc521ebe03263fadb044fed62c48759900 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use gccjit::Function;

use crate::context::CodegenCx;

pub fn intrinsic<'gcc, 'tcx>(name: &str, cx: &CodegenCx<'gcc, 'tcx>) -> Function<'gcc> {
    let _gcc_name =
        match name {
            "llvm.x86.xgetbv" => {
                let gcc_name = "__builtin_trap";
                let func = cx.context.get_builtin_function(gcc_name);
                cx.functions.borrow_mut().insert(gcc_name.to_string(), func);
                return func;
            },
            // NOTE: this doc specifies the equivalent GCC builtins: http://huonw.github.io/llvmint/llvmint/x86/index.html
            "llvm.x86.sse2.cmp.pd" => "__builtin_ia32_cmppd",
            "llvm.x86.sse2.movmsk.pd" => "__builtin_ia32_movmskpd",
            "llvm.x86.sse2.pmovmskb.128" => "__builtin_ia32_pmovmskb128",
            _ => unimplemented!("unsupported LLVM intrinsic {}", name)
        };

    unimplemented!();
}