@@ -977,7 +977,7 @@ pub fn call_memcpy(cx: &Block, dst: ValueRef, src: ValueRef, n_bytes: ValueRef,
977
977
X86 | Arm | Mips => "llvm.memcpy.p0i8.p0i8.i32" ,
978
978
X86_64 => "llvm.memcpy.p0i8.p0i8.i64"
979
979
} ;
980
- let memcpy = ccx. intrinsics . get_copy ( & key) ;
980
+ let memcpy = ccx. get_intrinsic ( & key) ;
981
981
let src_ptr = PointerCast ( cx, src, Type :: i8p ( ccx) ) ;
982
982
let dst_ptr = PointerCast ( cx, dst, Type :: i8p ( ccx) ) ;
983
983
let size = IntCast ( cx, n_bytes, ccx. int_type ) ;
@@ -1022,7 +1022,7 @@ fn memzero(b: &Builder, llptr: ValueRef, ty: Type) {
1022
1022
X86_64 => "llvm.memset.p0i8.i64"
1023
1023
} ;
1024
1024
1025
- let llintrinsicfn = ccx. intrinsics . get_copy ( & intrinsic_key) ;
1025
+ let llintrinsicfn = ccx. get_intrinsic ( & intrinsic_key) ;
1026
1026
let llptr = b. pointercast ( llptr, Type :: i8 ( ccx) . ptr_to ( ) ) ;
1027
1027
let llzeroval = C_u8 ( ccx, 0 ) ;
1028
1028
let size = machine:: llsize_of ( ccx, ty) ;
@@ -2043,168 +2043,6 @@ pub fn p2i(ccx: &CrateContext, v: ValueRef) -> ValueRef {
2043
2043
}
2044
2044
}
2045
2045
2046
-
2047
- pub fn declare_intrinsics( ccx: & mut CrateContext ) {
2048
- macro_rules! ifn (
2049
- ( $name: expr fn ( ) -> $ret: expr) => ( {
2050
- let name = $name;
2051
- // HACK(eddyb) dummy output type, shouln't affect anything.
2052
- let f = decl_cdecl_fn( ccx. llmod, name, Type :: func( [ ] , & $ret) , ty:: mk_nil( ) ) ;
2053
- ccx. intrinsics. insert( name, f) ;
2054
- } ) ;
2055
- ( $name: expr fn ( $( $arg: expr) , * ) -> $ret: expr) => ( {
2056
- let name = $name;
2057
- // HACK(eddyb) dummy output type, shouln't affect anything.
2058
- let f = decl_cdecl_fn( ccx. llmod, name,
2059
- Type :: func( [ $( $arg) , * ] , & $ret) , ty:: mk_nil( ) ) ;
2060
- ccx. intrinsics. insert( name, f) ;
2061
- } )
2062
- )
2063
- macro_rules! mk_struct (
2064
- ( $( $field_ty: expr) , * ) => ( Type :: struct_( ccx, [ $( $field_ty) , * ] , false ) )
2065
- )
2066
-
2067
- let i8p = Type :: i8p( ccx) ;
2068
- let void = Type :: void( ccx) ;
2069
- let i1 = Type :: i1( ccx) ;
2070
- let t_i8 = Type :: i8 ( ccx) ;
2071
- let t_i16 = Type :: i16 ( ccx) ;
2072
- let t_i32 = Type :: i32 ( ccx) ;
2073
- let t_i64 = Type :: i64 ( ccx) ;
2074
- let t_f32 = Type :: f32 ( ccx) ;
2075
- let t_f64 = Type :: f64 ( ccx) ;
2076
-
2077
- ifn!( "llvm.memcpy.p0i8.p0i8.i32" fn ( i8p, i8p, t_i32, t_i32, i1) -> void) ;
2078
- ifn!( "llvm.memcpy.p0i8.p0i8.i64" fn ( i8p, i8p, t_i64, t_i32, i1) -> void) ;
2079
- ifn!( "llvm.memmove.p0i8.p0i8.i32" fn ( i8p, i8p, t_i32, t_i32, i1) -> void) ;
2080
- ifn!( "llvm.memmove.p0i8.p0i8.i64" fn ( i8p, i8p, t_i64, t_i32, i1) -> void) ;
2081
- ifn!( "llvm.memset.p0i8.i32" fn ( i8p, t_i8, t_i32, t_i32, i1) -> void) ;
2082
- ifn!( "llvm.memset.p0i8.i64" fn ( i8p, t_i8, t_i64, t_i32, i1) -> void) ;
2083
-
2084
- ifn!( "llvm.trap" fn ( ) -> void) ;
2085
- ifn!( "llvm.debugtrap" fn ( ) -> void) ;
2086
- ifn!( "llvm.frameaddress" fn ( t_i32) -> i8p) ;
2087
-
2088
- ifn!( "llvm.powi.f32" fn ( t_f32, t_i32) -> t_f32) ;
2089
- ifn!( "llvm.powi.f64" fn ( t_f64, t_i32) -> t_f64) ;
2090
- ifn!( "llvm.pow.f32" fn ( t_f32, t_f32) -> t_f32) ;
2091
- ifn!( "llvm.pow.f64" fn ( t_f64, t_f64) -> t_f64) ;
2092
-
2093
- ifn!( "llvm.sqrt.f32" fn ( t_f32) -> t_f32) ;
2094
- ifn!( "llvm.sqrt.f64" fn ( t_f64) -> t_f64) ;
2095
- ifn!( "llvm.sin.f32" fn ( t_f32) -> t_f32) ;
2096
- ifn!( "llvm.sin.f64" fn ( t_f64) -> t_f64) ;
2097
- ifn!( "llvm.cos.f32" fn ( t_f32) -> t_f32) ;
2098
- ifn!( "llvm.cos.f64" fn ( t_f64) -> t_f64) ;
2099
- ifn!( "llvm.exp.f32" fn ( t_f32) -> t_f32) ;
2100
- ifn!( "llvm.exp.f64" fn ( t_f64) -> t_f64) ;
2101
- ifn!( "llvm.exp2.f32" fn ( t_f32) -> t_f32) ;
2102
- ifn!( "llvm.exp2.f64" fn ( t_f64) -> t_f64) ;
2103
- ifn!( "llvm.log.f32" fn ( t_f32) -> t_f32) ;
2104
- ifn!( "llvm.log.f64" fn ( t_f64) -> t_f64) ;
2105
- ifn!( "llvm.log10.f32" fn ( t_f32) -> t_f32) ;
2106
- ifn!( "llvm.log10.f64" fn ( t_f64) -> t_f64) ;
2107
- ifn!( "llvm.log2.f32" fn ( t_f32) -> t_f32) ;
2108
- ifn!( "llvm.log2.f64" fn ( t_f64) -> t_f64) ;
2109
-
2110
- ifn!( "llvm.fma.f32" fn ( t_f32, t_f32, t_f32) -> t_f32) ;
2111
- ifn!( "llvm.fma.f64" fn ( t_f64, t_f64, t_f64) -> t_f64) ;
2112
-
2113
- ifn!( "llvm.fabs.f32" fn ( t_f32) -> t_f32) ;
2114
- ifn!( "llvm.fabs.f64" fn ( t_f64) -> t_f64) ;
2115
-
2116
- ifn!( "llvm.floor.f32" fn ( t_f32) -> t_f32) ;
2117
- ifn!( "llvm.floor.f64" fn ( t_f64) -> t_f64) ;
2118
- ifn!( "llvm.ceil.f32" fn ( t_f32) -> t_f32) ;
2119
- ifn!( "llvm.ceil.f64" fn ( t_f64) -> t_f64) ;
2120
- ifn!( "llvm.trunc.f32" fn ( t_f32) -> t_f32) ;
2121
- ifn!( "llvm.trunc.f64" fn ( t_f64) -> t_f64) ;
2122
-
2123
- ifn!( "llvm.rint.f32" fn ( t_f32) -> t_f32) ;
2124
- ifn!( "llvm.rint.f64" fn ( t_f64) -> t_f64) ;
2125
- ifn!( "llvm.nearbyint.f32" fn ( t_f32) -> t_f32) ;
2126
- ifn!( "llvm.nearbyint.f64" fn ( t_f64) -> t_f64) ;
2127
-
2128
- ifn!( "llvm.ctpop.i8" fn ( t_i8) -> t_i8) ;
2129
- ifn!( "llvm.ctpop.i16" fn ( t_i16) -> t_i16) ;
2130
- ifn!( "llvm.ctpop.i32" fn ( t_i32) -> t_i32) ;
2131
- ifn!( "llvm.ctpop.i64" fn ( t_i64) -> t_i64) ;
2132
-
2133
- ifn!( "llvm.ctlz.i8" fn ( t_i8 , i1) -> t_i8) ;
2134
- ifn!( "llvm.ctlz.i16" fn ( t_i16, i1) -> t_i16) ;
2135
- ifn!( "llvm.ctlz.i32" fn ( t_i32, i1) -> t_i32) ;
2136
- ifn!( "llvm.ctlz.i64" fn ( t_i64, i1) -> t_i64) ;
2137
-
2138
- ifn!( "llvm.cttz.i8" fn ( t_i8 , i1) -> t_i8) ;
2139
- ifn!( "llvm.cttz.i16" fn ( t_i16, i1) -> t_i16) ;
2140
- ifn!( "llvm.cttz.i32" fn ( t_i32, i1) -> t_i32) ;
2141
- ifn!( "llvm.cttz.i64" fn ( t_i64, i1) -> t_i64) ;
2142
-
2143
- ifn!( "llvm.bswap.i16" fn ( t_i16) -> t_i16) ;
2144
- ifn!( "llvm.bswap.i32" fn ( t_i32) -> t_i32) ;
2145
- ifn!( "llvm.bswap.i64" fn ( t_i64) -> t_i64) ;
2146
-
2147
- ifn!( "llvm.sadd.with.overflow.i8" fn ( t_i8, t_i8) -> mk_struct!{ t_i8, i1} ) ;
2148
- ifn!( "llvm.sadd.with.overflow.i16" fn ( t_i16, t_i16) -> mk_struct!{ t_i16, i1} ) ;
2149
- ifn!( "llvm.sadd.with.overflow.i32" fn ( t_i32, t_i32) -> mk_struct!{ t_i32, i1} ) ;
2150
- ifn!( "llvm.sadd.with.overflow.i64" fn ( t_i64, t_i64) -> mk_struct!{ t_i64, i1} ) ;
2151
-
2152
- ifn!( "llvm.uadd.with.overflow.i8" fn ( t_i8, t_i8) -> mk_struct!{ t_i8, i1} ) ;
2153
- ifn!( "llvm.uadd.with.overflow.i16" fn ( t_i16, t_i16) -> mk_struct!{ t_i16, i1} ) ;
2154
- ifn!( "llvm.uadd.with.overflow.i32" fn ( t_i32, t_i32) -> mk_struct!{ t_i32, i1} ) ;
2155
- ifn!( "llvm.uadd.with.overflow.i64" fn ( t_i64, t_i64) -> mk_struct!{ t_i64, i1} ) ;
2156
-
2157
- ifn!( "llvm.ssub.with.overflow.i8" fn ( t_i8, t_i8) -> mk_struct!{ t_i8, i1} ) ;
2158
- ifn!( "llvm.ssub.with.overflow.i16" fn ( t_i16, t_i16) -> mk_struct!{ t_i16, i1} ) ;
2159
- ifn!( "llvm.ssub.with.overflow.i32" fn ( t_i32, t_i32) -> mk_struct!{ t_i32, i1} ) ;
2160
- ifn!( "llvm.ssub.with.overflow.i64" fn ( t_i64, t_i64) -> mk_struct!{ t_i64, i1} ) ;
2161
-
2162
- ifn!( "llvm.usub.with.overflow.i8" fn ( t_i8, t_i8) -> mk_struct!{ t_i8, i1} ) ;
2163
- ifn!( "llvm.usub.with.overflow.i16" fn ( t_i16, t_i16) -> mk_struct!{ t_i16, i1} ) ;
2164
- ifn!( "llvm.usub.with.overflow.i32" fn ( t_i32, t_i32) -> mk_struct!{ t_i32, i1} ) ;
2165
- ifn!( "llvm.usub.with.overflow.i64" fn ( t_i64, t_i64) -> mk_struct!{ t_i64, i1} ) ;
2166
-
2167
- ifn!( "llvm.smul.with.overflow.i8" fn ( t_i8, t_i8) -> mk_struct!{ t_i8, i1} ) ;
2168
- ifn!( "llvm.smul.with.overflow.i16" fn ( t_i16, t_i16) -> mk_struct!{ t_i16, i1} ) ;
2169
- ifn!( "llvm.smul.with.overflow.i32" fn ( t_i32, t_i32) -> mk_struct!{ t_i32, i1} ) ;
2170
- ifn!( "llvm.smul.with.overflow.i64" fn ( t_i64, t_i64) -> mk_struct!{ t_i64, i1} ) ;
2171
-
2172
- ifn!( "llvm.umul.with.overflow.i8" fn ( t_i8, t_i8) -> mk_struct!{ t_i8, i1} ) ;
2173
- ifn!( "llvm.umul.with.overflow.i16" fn ( t_i16, t_i16) -> mk_struct!{ t_i16, i1} ) ;
2174
- ifn!( "llvm.umul.with.overflow.i32" fn ( t_i32, t_i32) -> mk_struct!{ t_i32, i1} ) ;
2175
- ifn!( "llvm.umul.with.overflow.i64" fn ( t_i64, t_i64) -> mk_struct!{ t_i64, i1} ) ;
2176
-
2177
- ifn!( "llvm.expect.i1" fn ( i1, i1) -> i1) ;
2178
-
2179
- // Some intrinsics were introduced in later versions of LLVM, but they have
2180
- // fallbacks in libc or libm and such. Currently, all of these intrinsics
2181
- // were introduced in LLVM 3.4, so we case on that.
2182
- macro_rules! compatible_ifn (
2183
- ( $name: expr, $cname: ident ( $( $arg: expr) , * ) -> $ret: expr) => ( {
2184
- let name = $name;
2185
- if unsafe { llvm:: LLVMVersionMinor ( ) >= 4 } {
2186
- ifn!( name fn ( $( $arg) , * ) -> $ret) ;
2187
- } else {
2188
- let f = decl_cdecl_fn( ccx. llmod, stringify!( $cname) ,
2189
- Type :: func( [ $( $arg) , * ] , & $ret) ,
2190
- ty:: mk_nil( ) ) ;
2191
- ccx. intrinsics. insert( name, f) ;
2192
- }
2193
- } )
2194
- )
2195
-
2196
- compatible_ifn!( "llvm.copysign.f32" , copysignf( t_f32, t_f32) -> t_f32) ;
2197
- compatible_ifn!( "llvm.copysign.f64" , copysign( t_f64, t_f64) -> t_f64) ;
2198
- compatible_ifn!( "llvm.round.f32" , roundf( t_f32) -> t_f32) ;
2199
- compatible_ifn!( "llvm.round.f64" , round( t_f64) -> t_f64) ;
2200
-
2201
-
2202
- if ccx. sess( ) . opts. debuginfo != NoDebugInfo {
2203
- ifn!( "llvm.dbg.declare" fn ( Type :: metadata( ccx) , Type :: metadata( ccx) ) -> void) ;
2204
- ifn!( "llvm.dbg.value" fn ( Type :: metadata( ccx) , t_i64, Type :: metadata( ccx) ) -> void) ;
2205
- }
2206
- }
2207
-
2208
2046
pub fn crate_ctxt_to_encode_parms<' r>( cx: & ' r CrateContext , ie: encoder:: EncodeInlinedItem <' r>)
2209
2047
-> encoder:: EncodeParams <' r> {
2210
2048
0 commit comments