make ifn macro non-capturing
This commit is contained in:
parent
39ca2dbbc5
commit
7668fb2c75
@ -2648,10 +2648,10 @@ pub fn p2i(ccx: &CrateContext, v: ValueRef) -> ValueRef {
|
||||
}
|
||||
|
||||
macro_rules! ifn (
|
||||
($name:expr, $args:expr, $ret:expr) => ({
|
||||
($intrinsics:ident, $name:expr, $args:expr, $ret:expr) => ({
|
||||
let name = $name;
|
||||
let f = decl_cdecl_fn(llmod, name, Type::func($args, &$ret));
|
||||
intrinsics.insert(name, f);
|
||||
$intrinsics.insert(name, f);
|
||||
})
|
||||
)
|
||||
|
||||
@ -2659,135 +2659,135 @@ pub fn declare_intrinsics(llmod: ModuleRef) -> HashMap<&'static str, ValueRef> {
|
||||
let i8p = Type::i8p();
|
||||
let mut intrinsics = HashMap::new();
|
||||
|
||||
ifn!("llvm.memcpy.p0i8.p0i8.i32",
|
||||
ifn!(intrinsics, "llvm.memcpy.p0i8.p0i8.i32",
|
||||
[i8p, i8p, Type::i32(), Type::i32(), Type::i1()], Type::void());
|
||||
ifn!("llvm.memcpy.p0i8.p0i8.i64",
|
||||
ifn!(intrinsics, "llvm.memcpy.p0i8.p0i8.i64",
|
||||
[i8p, i8p, Type::i64(), Type::i32(), Type::i1()], Type::void());
|
||||
ifn!("llvm.memmove.p0i8.p0i8.i32",
|
||||
ifn!(intrinsics, "llvm.memmove.p0i8.p0i8.i32",
|
||||
[i8p, i8p, Type::i32(), Type::i32(), Type::i1()], Type::void());
|
||||
ifn!("llvm.memmove.p0i8.p0i8.i64",
|
||||
ifn!(intrinsics, "llvm.memmove.p0i8.p0i8.i64",
|
||||
[i8p, i8p, Type::i64(), Type::i32(), Type::i1()], Type::void());
|
||||
ifn!("llvm.memset.p0i8.i32",
|
||||
ifn!(intrinsics, "llvm.memset.p0i8.i32",
|
||||
[i8p, Type::i8(), Type::i32(), Type::i32(), Type::i1()], Type::void());
|
||||
ifn!("llvm.memset.p0i8.i64",
|
||||
ifn!(intrinsics, "llvm.memset.p0i8.i64",
|
||||
[i8p, Type::i8(), Type::i64(), Type::i32(), Type::i1()], Type::void());
|
||||
|
||||
ifn!("llvm.trap", [], Type::void());
|
||||
ifn!("llvm.frameaddress", [Type::i32()], i8p);
|
||||
ifn!(intrinsics, "llvm.trap", [], Type::void());
|
||||
ifn!(intrinsics, "llvm.frameaddress", [Type::i32()], i8p);
|
||||
|
||||
ifn!("llvm.powi.f32", [Type::f32(), Type::i32()], Type::f32());
|
||||
ifn!("llvm.powi.f64", [Type::f64(), Type::i32()], Type::f64());
|
||||
ifn!("llvm.pow.f32", [Type::f32(), Type::f32()], Type::f32());
|
||||
ifn!("llvm.pow.f64", [Type::f64(), Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.powi.f32", [Type::f32(), Type::i32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.powi.f64", [Type::f64(), Type::i32()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.pow.f32", [Type::f32(), Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.pow.f64", [Type::f64(), Type::f64()], Type::f64());
|
||||
|
||||
ifn!("llvm.sqrt.f32", [Type::f32()], Type::f32());
|
||||
ifn!("llvm.sqrt.f64", [Type::f64()], Type::f64());
|
||||
ifn!("llvm.sin.f32", [Type::f32()], Type::f32());
|
||||
ifn!("llvm.sin.f64", [Type::f64()], Type::f64());
|
||||
ifn!("llvm.cos.f32", [Type::f32()], Type::f32());
|
||||
ifn!("llvm.cos.f64", [Type::f64()], Type::f64());
|
||||
ifn!("llvm.exp.f32", [Type::f32()], Type::f32());
|
||||
ifn!("llvm.exp.f64", [Type::f64()], Type::f64());
|
||||
ifn!("llvm.exp2.f32", [Type::f32()], Type::f32());
|
||||
ifn!("llvm.exp2.f64", [Type::f64()], Type::f64());
|
||||
ifn!("llvm.log.f32", [Type::f32()], Type::f32());
|
||||
ifn!("llvm.log.f64", [Type::f64()], Type::f64());
|
||||
ifn!("llvm.log10.f32",[Type::f32()], Type::f32());
|
||||
ifn!("llvm.log10.f64",[Type::f64()], Type::f64());
|
||||
ifn!("llvm.log2.f32", [Type::f32()], Type::f32());
|
||||
ifn!("llvm.log2.f64", [Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.sqrt.f32", [Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.sqrt.f64", [Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.sin.f32", [Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.sin.f64", [Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.cos.f32", [Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.cos.f64", [Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.exp.f32", [Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.exp.f64", [Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.exp2.f32", [Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.exp2.f64", [Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.log.f32", [Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.log.f64", [Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.log10.f32",[Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.log10.f64",[Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.log2.f32", [Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.log2.f64", [Type::f64()], Type::f64());
|
||||
|
||||
ifn!("llvm.fma.f32", [Type::f32(), Type::f32(), Type::f32()], Type::f32());
|
||||
ifn!("llvm.fma.f64", [Type::f64(), Type::f64(), Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.fma.f32", [Type::f32(), Type::f32(), Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.fma.f64", [Type::f64(), Type::f64(), Type::f64()], Type::f64());
|
||||
|
||||
ifn!("llvm.fabs.f32", [Type::f32()], Type::f32());
|
||||
ifn!("llvm.fabs.f64", [Type::f64()], Type::f64());
|
||||
ifn!("llvm.floor.f32",[Type::f32()], Type::f32());
|
||||
ifn!("llvm.floor.f64",[Type::f64()], Type::f64());
|
||||
ifn!("llvm.ceil.f32", [Type::f32()], Type::f32());
|
||||
ifn!("llvm.ceil.f64", [Type::f64()], Type::f64());
|
||||
ifn!("llvm.trunc.f32",[Type::f32()], Type::f32());
|
||||
ifn!("llvm.trunc.f64",[Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.fabs.f32", [Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.fabs.f64", [Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.floor.f32",[Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.floor.f64",[Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.ceil.f32", [Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.ceil.f64", [Type::f64()], Type::f64());
|
||||
ifn!(intrinsics, "llvm.trunc.f32",[Type::f32()], Type::f32());
|
||||
ifn!(intrinsics, "llvm.trunc.f64",[Type::f64()], Type::f64());
|
||||
|
||||
ifn!("llvm.ctpop.i8", [Type::i8()], Type::i8());
|
||||
ifn!("llvm.ctpop.i16",[Type::i16()], Type::i16());
|
||||
ifn!("llvm.ctpop.i32",[Type::i32()], Type::i32());
|
||||
ifn!("llvm.ctpop.i64",[Type::i64()], Type::i64());
|
||||
ifn!(intrinsics, "llvm.ctpop.i8", [Type::i8()], Type::i8());
|
||||
ifn!(intrinsics, "llvm.ctpop.i16",[Type::i16()], Type::i16());
|
||||
ifn!(intrinsics, "llvm.ctpop.i32",[Type::i32()], Type::i32());
|
||||
ifn!(intrinsics, "llvm.ctpop.i64",[Type::i64()], Type::i64());
|
||||
|
||||
ifn!("llvm.ctlz.i8", [Type::i8() , Type::i1()], Type::i8());
|
||||
ifn!("llvm.ctlz.i16", [Type::i16(), Type::i1()], Type::i16());
|
||||
ifn!("llvm.ctlz.i32", [Type::i32(), Type::i1()], Type::i32());
|
||||
ifn!("llvm.ctlz.i64", [Type::i64(), Type::i1()], Type::i64());
|
||||
ifn!(intrinsics, "llvm.ctlz.i8", [Type::i8() , Type::i1()], Type::i8());
|
||||
ifn!(intrinsics, "llvm.ctlz.i16", [Type::i16(), Type::i1()], Type::i16());
|
||||
ifn!(intrinsics, "llvm.ctlz.i32", [Type::i32(), Type::i1()], Type::i32());
|
||||
ifn!(intrinsics, "llvm.ctlz.i64", [Type::i64(), Type::i1()], Type::i64());
|
||||
|
||||
ifn!("llvm.cttz.i8", [Type::i8() , Type::i1()], Type::i8());
|
||||
ifn!("llvm.cttz.i16", [Type::i16(), Type::i1()], Type::i16());
|
||||
ifn!("llvm.cttz.i32", [Type::i32(), Type::i1()], Type::i32());
|
||||
ifn!("llvm.cttz.i64", [Type::i64(), Type::i1()], Type::i64());
|
||||
ifn!(intrinsics, "llvm.cttz.i8", [Type::i8() , Type::i1()], Type::i8());
|
||||
ifn!(intrinsics, "llvm.cttz.i16", [Type::i16(), Type::i1()], Type::i16());
|
||||
ifn!(intrinsics, "llvm.cttz.i32", [Type::i32(), Type::i1()], Type::i32());
|
||||
ifn!(intrinsics, "llvm.cttz.i64", [Type::i64(), Type::i1()], Type::i64());
|
||||
|
||||
ifn!("llvm.bswap.i16",[Type::i16()], Type::i16());
|
||||
ifn!("llvm.bswap.i32",[Type::i32()], Type::i32());
|
||||
ifn!("llvm.bswap.i64",[Type::i64()], Type::i64());
|
||||
ifn!(intrinsics, "llvm.bswap.i16",[Type::i16()], Type::i16());
|
||||
ifn!(intrinsics, "llvm.bswap.i32",[Type::i32()], Type::i32());
|
||||
ifn!(intrinsics, "llvm.bswap.i64",[Type::i64()], Type::i64());
|
||||
|
||||
ifn!("llvm.sadd.with.overflow.i8",
|
||||
ifn!(intrinsics, "llvm.sadd.with.overflow.i8",
|
||||
[Type::i8(), Type::i8()], Type::struct_([Type::i8(), Type::i1()], false));
|
||||
ifn!("llvm.sadd.with.overflow.i16",
|
||||
ifn!(intrinsics, "llvm.sadd.with.overflow.i16",
|
||||
[Type::i16(), Type::i16()], Type::struct_([Type::i16(), Type::i1()], false));
|
||||
ifn!("llvm.sadd.with.overflow.i32",
|
||||
ifn!(intrinsics, "llvm.sadd.with.overflow.i32",
|
||||
[Type::i32(), Type::i32()], Type::struct_([Type::i32(), Type::i1()], false));
|
||||
ifn!("llvm.sadd.with.overflow.i64",
|
||||
ifn!(intrinsics, "llvm.sadd.with.overflow.i64",
|
||||
[Type::i64(), Type::i64()], Type::struct_([Type::i64(), Type::i1()], false));
|
||||
|
||||
ifn!("llvm.uadd.with.overflow.i8",
|
||||
ifn!(intrinsics, "llvm.uadd.with.overflow.i8",
|
||||
[Type::i8(), Type::i8()], Type::struct_([Type::i8(), Type::i1()], false));
|
||||
ifn!("llvm.uadd.with.overflow.i16",
|
||||
ifn!(intrinsics, "llvm.uadd.with.overflow.i16",
|
||||
[Type::i16(), Type::i16()], Type::struct_([Type::i16(), Type::i1()], false));
|
||||
ifn!("llvm.uadd.with.overflow.i32",
|
||||
ifn!(intrinsics, "llvm.uadd.with.overflow.i32",
|
||||
[Type::i32(), Type::i32()], Type::struct_([Type::i32(), Type::i1()], false));
|
||||
ifn!("llvm.uadd.with.overflow.i64",
|
||||
ifn!(intrinsics, "llvm.uadd.with.overflow.i64",
|
||||
[Type::i64(), Type::i64()], Type::struct_([Type::i64(), Type::i1()], false));
|
||||
|
||||
ifn!("llvm.ssub.with.overflow.i8",
|
||||
ifn!(intrinsics, "llvm.ssub.with.overflow.i8",
|
||||
[Type::i8(), Type::i8()], Type::struct_([Type::i8(), Type::i1()], false));
|
||||
ifn!("llvm.ssub.with.overflow.i16",
|
||||
ifn!(intrinsics, "llvm.ssub.with.overflow.i16",
|
||||
[Type::i16(), Type::i16()], Type::struct_([Type::i16(), Type::i1()], false));
|
||||
ifn!("llvm.ssub.with.overflow.i32",
|
||||
ifn!(intrinsics, "llvm.ssub.with.overflow.i32",
|
||||
[Type::i32(), Type::i32()], Type::struct_([Type::i32(), Type::i1()], false));
|
||||
ifn!("llvm.ssub.with.overflow.i64",
|
||||
ifn!(intrinsics, "llvm.ssub.with.overflow.i64",
|
||||
[Type::i64(), Type::i64()], Type::struct_([Type::i64(), Type::i1()], false));
|
||||
|
||||
ifn!("llvm.usub.with.overflow.i8",
|
||||
ifn!(intrinsics, "llvm.usub.with.overflow.i8",
|
||||
[Type::i8(), Type::i8()], Type::struct_([Type::i8(), Type::i1()], false));
|
||||
ifn!("llvm.usub.with.overflow.i16",
|
||||
ifn!(intrinsics, "llvm.usub.with.overflow.i16",
|
||||
[Type::i16(), Type::i16()], Type::struct_([Type::i16(), Type::i1()], false));
|
||||
ifn!("llvm.usub.with.overflow.i32",
|
||||
ifn!(intrinsics, "llvm.usub.with.overflow.i32",
|
||||
[Type::i32(), Type::i32()], Type::struct_([Type::i32(), Type::i1()], false));
|
||||
ifn!("llvm.usub.with.overflow.i64",
|
||||
ifn!(intrinsics, "llvm.usub.with.overflow.i64",
|
||||
[Type::i64(), Type::i64()], Type::struct_([Type::i64(), Type::i1()], false));
|
||||
|
||||
ifn!("llvm.smul.with.overflow.i8",
|
||||
ifn!(intrinsics, "llvm.smul.with.overflow.i8",
|
||||
[Type::i8(), Type::i8()], Type::struct_([Type::i8(), Type::i1()], false));
|
||||
ifn!("llvm.smul.with.overflow.i16",
|
||||
ifn!(intrinsics, "llvm.smul.with.overflow.i16",
|
||||
[Type::i16(), Type::i16()], Type::struct_([Type::i16(), Type::i1()], false));
|
||||
ifn!("llvm.smul.with.overflow.i32",
|
||||
ifn!(intrinsics, "llvm.smul.with.overflow.i32",
|
||||
[Type::i32(), Type::i32()], Type::struct_([Type::i32(), Type::i1()], false));
|
||||
ifn!("llvm.smul.with.overflow.i64",
|
||||
ifn!(intrinsics, "llvm.smul.with.overflow.i64",
|
||||
[Type::i64(), Type::i64()], Type::struct_([Type::i64(), Type::i1()], false));
|
||||
|
||||
ifn!("llvm.umul.with.overflow.i8",
|
||||
ifn!(intrinsics, "llvm.umul.with.overflow.i8",
|
||||
[Type::i8(), Type::i8()], Type::struct_([Type::i8(), Type::i1()], false));
|
||||
ifn!("llvm.umul.with.overflow.i16",
|
||||
ifn!(intrinsics, "llvm.umul.with.overflow.i16",
|
||||
[Type::i16(), Type::i16()], Type::struct_([Type::i16(), Type::i1()], false));
|
||||
ifn!("llvm.umul.with.overflow.i32",
|
||||
ifn!(intrinsics, "llvm.umul.with.overflow.i32",
|
||||
[Type::i32(), Type::i32()], Type::struct_([Type::i32(), Type::i1()], false));
|
||||
ifn!("llvm.umul.with.overflow.i64",
|
||||
ifn!(intrinsics, "llvm.umul.with.overflow.i64",
|
||||
[Type::i64(), Type::i64()], Type::struct_([Type::i64(), Type::i1()], false));
|
||||
|
||||
return intrinsics;
|
||||
}
|
||||
|
||||
pub fn declare_dbg_intrinsics(llmod: ModuleRef, intrinsics: &mut HashMap<&'static str, ValueRef>) {
|
||||
ifn!("llvm.dbg.declare", [Type::metadata(), Type::metadata()], Type::void());
|
||||
ifn!("llvm.dbg.value", [Type::metadata(), Type::i64(), Type::metadata()], Type::void());
|
||||
ifn!(intrinsics, "llvm.dbg.declare", [Type::metadata(), Type::metadata()], Type::void());
|
||||
ifn!(intrinsics, "llvm.dbg.value", [Type::metadata(), Type::i64(), Type::metadata()], Type::void());
|
||||
}
|
||||
|
||||
pub fn trap(bcx: @mut Block) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user