1use rustc_errors::DiagMessage;
4use rustc_hir as hir;
5use rustc_hir::attrs::lang_items::LangItem;
6use rustc_middle::traits::{ObligationCause, ObligationCauseCode};
7use rustc_middle::ty::{self, Const, Ty, TyCtxt};
8use rustc_span::def_id::LocalDefId;
9use rustc_span::{Span, Symbol, sym};
10
11use crate::check::check_function_signature;
12use crate::diagnostics::{UnrecognizedIntrinsicFunction, WrongNumberOfGenericArgumentsToIntrinsic};
13
14fn equate_intrinsic_type<'tcx>(
15 tcx: TyCtxt<'tcx>,
16 span: Span,
17 def_id: LocalDefId,
18 n_tps: usize,
19 n_lts: usize,
20 n_cts: usize,
21 sig: ty::PolyFnSig<'tcx>,
22) {
23 let (generics, span) = match tcx.hir_node_by_def_id(def_id) {
24 hir::Node::Item(hir::Item { kind: hir::ItemKind::Fn { generics, .. }, .. }) => {
25 (tcx.generics_of(def_id), generics.span)
26 }
27 _ => tcx.dcx().span_bug(span, "intrinsic must be a function"),
28 };
29 let own_counts = generics.own_counts();
30
31 let gen_count_ok = |found: usize, expected: usize, descr: &str| -> bool {
32 if found != expected {
33 tcx.dcx().emit_err(WrongNumberOfGenericArgumentsToIntrinsic {
34 span,
35 found,
36 expected,
37 descr,
38 });
39 false
40 } else {
41 true
42 }
43 };
44
45 if gen_count_ok(own_counts.lifetimes, n_lts, "lifetime")
48 && gen_count_ok(own_counts.types, n_tps, "type")
49 && gen_count_ok(own_counts.consts, n_cts, "const")
50 {
51 let _ = check_function_signature(
52 tcx,
53 ObligationCause::new(span, def_id, ObligationCauseCode::IntrinsicType),
54 def_id.into(),
55 sig,
56 );
57 }
58}
59
60fn intrinsic_operation_unsafety(tcx: TyCtxt<'_>, intrinsic_id: LocalDefId) -> hir::Safety {
62 let is_in_list = match tcx.item_name(intrinsic_id) {
63 | sym::abort
70 | sym::add_with_overflow
71 | sym::aggregate_raw_ptr
72 | sym::align_of
73 | sym::amdgpu_dispatch_ptr
74 | sym::assert_inhabited
75 | sym::assert_mem_uninitialized_valid
76 | sym::assert_zero_valid
77 | sym::autodiff
78 | sym::bitreverse
79 | sym::black_box
80 | sym::breakpoint
81 | sym::bswap
82 | sym::caller_location
83 | sym::carrying_mul_add
84 | sym::carryless_mul
85 | sym::ceilf16
86 | sym::ceilf32
87 | sym::ceilf64
88 | sym::ceilf128
89 | sym::cold_path
90 | sym::const_eval_select
91 | sym::contract_check_ensures
92 | sym::contract_check_requires
93 | sym::contract_checks
94 | sym::copysignf16
95 | sym::copysignf32
96 | sym::copysignf64
97 | sym::copysignf128
98 | sym::cosf16
99 | sym::cosf32
100 | sym::cosf64
101 | sym::cosf128
102 | sym::ctlz
103 | sym::ctpop
104 | sym::cttz
105 | sym::discriminant_value
106 | sym::exp2f16
107 | sym::exp2f32
108 | sym::exp2f64
109 | sym::exp2f128
110 | sym::expf16
111 | sym::expf32
112 | sym::expf64
113 | sym::expf128
114 | sym::fabs
115 | sym::fadd_algebraic
116 | sym::fdiv_algebraic
117 | sym::field_offset
118 | sym::field_representing_type_actual_type_id
119 | sym::field_representing_type_name
120 | sym::field_representing_type_offset
121 | sym::floorf16
122 | sym::floorf32
123 | sym::floorf64
124 | sym::floorf128
125 | sym::fmaf16
126 | sym::fmaf32
127 | sym::fmaf64
128 | sym::fmaf128
129 | sym::fmul_algebraic
130 | sym::fmuladdf16
131 | sym::fmuladdf32
132 | sym::fmuladdf64
133 | sym::fmuladdf128
134 | sym::forget
135 | sym::frem_algebraic
136 | sym::fsub_algebraic
137 | sym::gpu_launch_sized_workgroup_mem
138 | sym::integer_max
139 | sym::integer_min
140 | sym::is_val_statically_known
141 | sym::log2f16
142 | sym::log2f32
143 | sym::log2f64
144 | sym::log2f128
145 | sym::log10f16
146 | sym::log10f32
147 | sym::log10f64
148 | sym::log10f128
149 | sym::logf16
150 | sym::logf32
151 | sym::logf64
152 | sym::logf128
153 | sym::maximum_number_nsz_f16
154 | sym::maximum_number_nsz_f32
155 | sym::maximum_number_nsz_f64
156 | sym::maximum_number_nsz_f128
157 | sym::maximumf16
158 | sym::maximumf32
159 | sym::maximumf64
160 | sym::maximumf128
161 | sym::minimum_number_nsz_f16
162 | sym::minimum_number_nsz_f32
163 | sym::minimum_number_nsz_f64
164 | sym::minimum_number_nsz_f128
165 | sym::minimumf16
166 | sym::minimumf32
167 | sym::minimumf64
168 | sym::minimumf128
169 | sym::mul_with_overflow
170 | sym::needs_drop
171 | sym::non_exhaustive
172 | sym::offload
173 | sym::offload_get_num_devices
174 | sym::offset_of
175 | sym::overflow_checks
176 | sym::powf16
177 | sym::powf32
178 | sym::powf64
179 | sym::powf128
180 | sym::powif16
181 | sym::powif32
182 | sym::powif64
183 | sym::powif128
184 | sym::prefetch_read_data
185 | sym::prefetch_read_instruction
186 | sym::prefetch_write_data
187 | sym::prefetch_write_instruction
188 | sym::ptr_guaranteed_cmp
189 | sym::ptr_mask
190 | sym::ptr_metadata
191 | sym::return_address
192 | sym::rotate_left
193 | sym::rotate_right
194 | sym::round_ties_even_f16
195 | sym::round_ties_even_f32
196 | sym::round_ties_even_f64
197 | sym::round_ties_even_f128
198 | sym::roundf16
199 | sym::roundf32
200 | sym::roundf64
201 | sym::roundf128
202 | sym::rustc_peek
203 | sym::saturating_add
204 | sym::saturating_sub
205 | sym::select_unpredictable
206 | sym::sinf16
207 | sym::sinf32
208 | sym::sinf64
209 | sym::sinf128
210 | sym::size_of
211 | sym::size_of_type_id
212 | sym::sqrtf16
213 | sym::sqrtf32
214 | sym::sqrtf64
215 | sym::sqrtf128
216 | sym::sub_with_overflow
217 | sym::three_way_compare
218 | sym::truncf16
219 | sym::truncf32
220 | sym::truncf64
221 | sym::truncf128
222 | sym::type_id
223 | sym::type_id_eq
224 | sym::type_id_field_representing_type
225 | sym::type_id_fields
226 | sym::type_id_generics
227 | sym::type_id_is_signed
228 | sym::type_id_variants
229 | sym::type_id_vtable
230 | sym::type_name
231 | sym::type_of
232 | sym::ub_checks
233 | sym::va_copy
234 | sym::variant_count
235 | sym::variant_name
236 | sym::variant_non_exhaustive
237 | sym::wrapping_add
238 | sym::wrapping_mul
239 | sym::wrapping_sub
240 | sym::write_box_via_move
241 => hir::Safety::Safe,
243 _ => hir::Safety::Unsafe,
244 };
245
246 if tcx.fn_sig(intrinsic_id).skip_binder().safety() != is_in_list {
247 tcx.dcx().struct_span_err(
248 tcx.def_span(intrinsic_id),
249 DiagMessage::from(::alloc::__export::must_use({
::alloc::fmt::format(format_args!("intrinsic safety mismatch between list of intrinsics within the compiler and core library intrinsics for intrinsic `{0}`",
tcx.item_name(intrinsic_id)))
})format!(
250 "intrinsic safety mismatch between list of intrinsics within the compiler and core library intrinsics for intrinsic `{}`",
251 tcx.item_name(intrinsic_id)
252 )
253 )).emit();
254 }
255
256 is_in_list
257}
258
259pub(crate) fn check_intrinsic_type(
262 tcx: TyCtxt<'_>,
263 intrinsic_id: LocalDefId,
264 span: Span,
265 intrinsic_name: Symbol,
266) {
267 let generics = tcx.generics_of(intrinsic_id);
268 let param = |n| {
269 if let &ty::GenericParamDef { name, kind: ty::GenericParamDefKind::Type { .. }, .. } =
270 generics.param_at(n as usize, tcx)
271 {
272 Ty::new_param(tcx, n, name)
273 } else {
274 Ty::new_error_with_message(tcx, span, "expected param")
275 }
276 };
277
278 let bound_vars = tcx.mk_bound_variable_kinds(&[
279 ty::BoundVariableKind::Region(ty::BoundRegionKind::Anon),
280 ty::BoundVariableKind::Region(ty::BoundRegionKind::Anon),
281 ty::BoundVariableKind::Region(ty::BoundRegionKind::ClosureEnv),
282 ]);
283 let mk_va_list_ty = |mutbl| {
284 let did = tcx.require_lang_item(LangItem::VaList, span);
285 let region = ty::Region::new_bound(
286 tcx,
287 ty::INNERMOST,
288 ty::BoundRegion { var: ty::BoundVar::ZERO, kind: ty::BoundRegionKind::Anon },
289 );
290 let env_region = ty::Region::new_bound(
291 tcx,
292 ty::INNERMOST,
293 ty::BoundRegion {
294 var: ty::BoundVar::from_u32(2),
295 kind: ty::BoundRegionKind::ClosureEnv,
296 },
297 );
298 let va_list_ty = tcx.type_of(did).instantiate(tcx, &[region.into()]).skip_norm_wip();
299 (Ty::new_ref(tcx, env_region, va_list_ty, mutbl), va_list_ty)
300 };
301 let type_id_ty = || tcx.type_of(tcx.lang_items().type_id().unwrap()).no_bound_vars().unwrap();
302
303 let safety = intrinsic_operation_unsafety(tcx, intrinsic_id);
304 let n_lts = 0;
305 let (n_tps, n_cts, inputs, output) = match intrinsic_name {
306 sym::autodiff => (4, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1), param(2)]))vec![param(0), param(1), param(2)], param(3)),
307 sym::abort => (0, 0, ::alloc::vec::Vec::new()vec![], tcx.types.never),
308 sym::amdgpu_dispatch_ptr => (0, 0, ::alloc::vec::Vec::new()vec![], Ty::new_imm_ptr(tcx, tcx.types.unit)),
309 sym::unreachable => (0, 0, ::alloc::vec::Vec::new()vec![], tcx.types.never),
310 sym::breakpoint => (0, 0, ::alloc::vec::Vec::new()vec![], tcx.types.unit),
311 sym::size_of | sym::align_of | sym::variant_count => (1, 0, ::alloc::vec::Vec::new()vec![], tcx.types.usize),
312 sym::size_of_val | sym::align_of_val => {
313 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0))]))vec![Ty::new_imm_ptr(tcx, param(0))], tcx.types.usize)
314 }
315 sym::size_of_type_id => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty()]))vec![type_id_ty()], Ty::new_option(tcx, tcx.types.usize)),
316 sym::offset_of => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.u32, tcx.types.u32]))vec![tcx.types.u32, tcx.types.u32], tcx.types.usize),
317 sym::field_offset => (1, 0, ::alloc::vec::Vec::new()vec![], tcx.types.usize),
318 sym::rustc_peek => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(0)),
319 sym::caller_location => (0, 0, ::alloc::vec::Vec::new()vec![], tcx.caller_location_ty()),
320 sym::gpu_launch_sized_workgroup_mem => (1, 0, ::alloc::vec::Vec::new()vec![], Ty::new_mut_ptr(tcx, param(0))),
321 sym::assert_inhabited | sym::assert_zero_valid | sym::assert_mem_uninitialized_valid => {
322 (1, 0, ::alloc::vec::Vec::new()vec![], tcx.types.unit)
323 }
324 sym::forget => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], tcx.types.unit),
325 sym::transmute | sym::transmute_unchecked => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(1)),
326 sym::prefetch_read_data
327 | sym::prefetch_write_data
328 | sym::prefetch_read_instruction
329 | sym::prefetch_write_instruction => {
330 (1, 1, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0))]))vec![Ty::new_imm_ptr(tcx, param(0))], tcx.types.unit)
331 }
332 sym::needs_drop => (1, 0, ::alloc::vec::Vec::new()vec![], tcx.types.bool),
333
334 sym::type_name => (1, 0, ::alloc::vec::Vec::new()vec![], Ty::new_static_str(tcx)),
335 sym::type_id => (1, 0, ::alloc::vec::Vec::new()vec![], type_id_ty()),
336 sym::type_id_eq => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty(), type_id_ty()]))vec![type_id_ty(), type_id_ty()], tcx.types.bool),
337 sym::type_id_field_representing_type => {
338 (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty(), tcx.types.usize, tcx.types.usize]))vec![type_id_ty(), tcx.types.usize, tcx.types.usize], type_id_ty())
339 }
340 sym::type_id_fields => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty(), tcx.types.usize]))vec![type_id_ty(), tcx.types.usize], tcx.types.usize),
341 sym::type_id_is_signed => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty()]))vec![type_id_ty()], tcx.types.bool),
342 sym::type_id_variants => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty()]))vec![type_id_ty()], tcx.types.usize),
343 sym::variant_name => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty(), tcx.types.usize]))vec![type_id_ty(), tcx.types.usize], Ty::new_static_str(tcx)),
344 sym::variant_non_exhaustive => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty(), tcx.types.usize]))vec![type_id_ty(), tcx.types.usize], tcx.types.bool),
345 sym::type_id_vtable => {
346 let dyn_metadata = tcx.require_lang_item(LangItem::DynMetadata, span);
347 let dyn_metadata_adt_ref = tcx.adt_def(dyn_metadata);
348 let dyn_metadata_args =
349 tcx.mk_args(&[Ty::new_ptr(tcx, tcx.types.unit, ty::Mutability::Not).into()]);
350 let dyn_ty = Ty::new_adt(tcx, dyn_metadata_adt_ref, dyn_metadata_args);
351
352 let option_did = tcx.require_lang_item(LangItem::Option, span);
353 let option_adt_ref = tcx.adt_def(option_did);
354 let option_args = tcx.mk_args(&[dyn_ty.into()]);
355 let ret_ty = Ty::new_adt(tcx, option_adt_ref, option_args);
356
357 (0, 0, ::alloc::vec::from_elem(type_id_ty(), 2)vec![type_id_ty(); 2], ret_ty)
358 }
359 sym::type_of => (
360 0,
361 0,
362 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty()]))vec![type_id_ty()],
363 tcx.type_of(tcx.lang_items().type_struct().unwrap()).no_bound_vars().unwrap(),
364 ),
365 sym::field_representing_type_actual_type_id => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty()]))vec![type_id_ty()], type_id_ty()),
366 sym::field_representing_type_name => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty()]))vec![type_id_ty()], Ty::new_static_str(tcx)),
367 sym::field_representing_type_offset => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty()]))vec![type_id_ty()], tcx.types.usize),
368 sym::non_exhaustive => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty()]))vec![type_id_ty()], tcx.types.bool),
369 sym::type_id_generics => (
370 0,
371 0,
372 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[type_id_ty()]))vec![type_id_ty()],
373 Ty::new_imm_ref(
374 tcx,
375 tcx.lifetimes.re_static,
376 Ty::new_slice(
377 tcx,
378 tcx.type_of(tcx.lang_items().type_generic().unwrap()).no_bound_vars().unwrap(),
379 ),
380 ),
381 ),
382 sym::offload => (
383 3,
384 0,
385 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0),
Ty::new_array_with_const_len(tcx, tcx.types.u32,
Const::from_target_usize(tcx, 3)),
Ty::new_array_with_const_len(tcx, tcx.types.u32,
Const::from_target_usize(tcx, 3)), tcx.types.u32,
tcx.types.i32, param(1)]))vec![
386 param(0),
387 Ty::new_array_with_const_len(tcx, tcx.types.u32, Const::from_target_usize(tcx, 3)),
388 Ty::new_array_with_const_len(tcx, tcx.types.u32, Const::from_target_usize(tcx, 3)),
389 tcx.types.u32,
390 tcx.types.i32,
391 param(1),
392 ],
393 param(2),
394 ),
395 sym::offload_get_num_devices => (0, 0, ::alloc::vec::Vec::new()vec![], tcx.types.i32),
396 sym::offset => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1)]))vec![param(0), param(1)], param(0)),
397 sym::arith_offset => (
398 1,
399 0,
400 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0)), tcx.types.isize]))vec![Ty::new_imm_ptr(tcx, param(0)), tcx.types.isize],
401 Ty::new_imm_ptr(tcx, param(0)),
402 ),
403 sym::slice_get_unchecked => (3, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(1), tcx.types.usize]))vec![param(1), tcx.types.usize], param(0)),
404 sym::ptr_mask => (
405 1,
406 0,
407 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0)), tcx.types.usize]))vec![Ty::new_imm_ptr(tcx, param(0)), tcx.types.usize],
408 Ty::new_imm_ptr(tcx, param(0)),
409 ),
410
411 sym::copy | sym::copy_nonoverlapping => (
412 1,
413 0,
414 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0)), Ty::new_mut_ptr(tcx, param(0)),
tcx.types.usize]))vec![Ty::new_imm_ptr(tcx, param(0)), Ty::new_mut_ptr(tcx, param(0)), tcx.types.usize],
415 tcx.types.unit,
416 ),
417 sym::volatile_copy_memory | sym::volatile_copy_nonoverlapping_memory => (
418 1,
419 0,
420 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, param(0)), Ty::new_imm_ptr(tcx, param(0)),
tcx.types.usize]))vec![Ty::new_mut_ptr(tcx, param(0)), Ty::new_imm_ptr(tcx, param(0)), tcx.types.usize],
421 tcx.types.unit,
422 ),
423 sym::compare_bytes => {
424 let byte_ptr = Ty::new_imm_ptr(tcx, tcx.types.u8);
425 (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[byte_ptr, byte_ptr, tcx.types.usize]))vec![byte_ptr, byte_ptr, tcx.types.usize], tcx.types.i32)
426 }
427 sym::write_bytes | sym::volatile_set_memory => (
428 1,
429 0,
430 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, param(0)), tcx.types.u8, tcx.types.usize]))vec![Ty::new_mut_ptr(tcx, param(0)), tcx.types.u8, tcx.types.usize],
431 tcx.types.unit,
432 ),
433
434 sym::sqrtf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
435 sym::sqrtf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
436 sym::sqrtf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
437 sym::sqrtf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
438
439 sym::powif16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16, tcx.types.i32]))vec![tcx.types.f16, tcx.types.i32], tcx.types.f16),
440 sym::powif32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32, tcx.types.i32]))vec![tcx.types.f32, tcx.types.i32], tcx.types.f32),
441 sym::powif64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64, tcx.types.i32]))vec![tcx.types.f64, tcx.types.i32], tcx.types.f64),
442 sym::powif128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128, tcx.types.i32]))vec![tcx.types.f128, tcx.types.i32], tcx.types.f128),
443
444 sym::sinf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
445 sym::sinf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
446 sym::sinf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
447 sym::sinf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
448
449 sym::cosf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
450 sym::cosf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
451 sym::cosf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
452 sym::cosf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
453
454 sym::powf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16, tcx.types.f16]))vec![tcx.types.f16, tcx.types.f16], tcx.types.f16),
455 sym::powf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32, tcx.types.f32]))vec![tcx.types.f32, tcx.types.f32], tcx.types.f32),
456 sym::powf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64, tcx.types.f64]))vec![tcx.types.f64, tcx.types.f64], tcx.types.f64),
457 sym::powf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128, tcx.types.f128]))vec![tcx.types.f128, tcx.types.f128], tcx.types.f128),
458
459 sym::expf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
460 sym::expf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
461 sym::expf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
462 sym::expf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
463
464 sym::exp2f16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
465 sym::exp2f32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
466 sym::exp2f64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
467 sym::exp2f128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
468
469 sym::logf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
470 sym::logf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
471 sym::logf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
472 sym::logf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
473
474 sym::log10f16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
475 sym::log10f32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
476 sym::log10f64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
477 sym::log10f128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
478
479 sym::log2f16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
480 sym::log2f32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
481 sym::log2f64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
482 sym::log2f128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
483
484 sym::fmaf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16, tcx.types.f16, tcx.types.f16]))vec![tcx.types.f16, tcx.types.f16, tcx.types.f16], tcx.types.f16),
485 sym::fmaf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32, tcx.types.f32, tcx.types.f32]))vec![tcx.types.f32, tcx.types.f32, tcx.types.f32], tcx.types.f32),
486 sym::fmaf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64, tcx.types.f64, tcx.types.f64]))vec![tcx.types.f64, tcx.types.f64, tcx.types.f64], tcx.types.f64),
487 sym::fmaf128 => {
488 (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128, tcx.types.f128, tcx.types.f128]))vec![tcx.types.f128, tcx.types.f128, tcx.types.f128], tcx.types.f128)
489 }
490
491 sym::fmuladdf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16, tcx.types.f16, tcx.types.f16]))vec![tcx.types.f16, tcx.types.f16, tcx.types.f16], tcx.types.f16),
492 sym::fmuladdf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32, tcx.types.f32, tcx.types.f32]))vec![tcx.types.f32, tcx.types.f32, tcx.types.f32], tcx.types.f32),
493 sym::fmuladdf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64, tcx.types.f64, tcx.types.f64]))vec![tcx.types.f64, tcx.types.f64, tcx.types.f64], tcx.types.f64),
494 sym::fmuladdf128 => {
495 (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128, tcx.types.f128, tcx.types.f128]))vec![tcx.types.f128, tcx.types.f128, tcx.types.f128], tcx.types.f128)
496 }
497
498 sym::fabs => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(0)),
499
500 sym::minimum_number_nsz_f16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16, tcx.types.f16]))vec![tcx.types.f16, tcx.types.f16], tcx.types.f16),
501 sym::minimum_number_nsz_f32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32, tcx.types.f32]))vec![tcx.types.f32, tcx.types.f32], tcx.types.f32),
502 sym::minimum_number_nsz_f64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64, tcx.types.f64]))vec![tcx.types.f64, tcx.types.f64], tcx.types.f64),
503 sym::minimum_number_nsz_f128 => {
504 (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128, tcx.types.f128]))vec![tcx.types.f128, tcx.types.f128], tcx.types.f128)
505 }
506
507 sym::minimumf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16, tcx.types.f16]))vec![tcx.types.f16, tcx.types.f16], tcx.types.f16),
508 sym::minimumf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32, tcx.types.f32]))vec![tcx.types.f32, tcx.types.f32], tcx.types.f32),
509 sym::minimumf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64, tcx.types.f64]))vec![tcx.types.f64, tcx.types.f64], tcx.types.f64),
510 sym::minimumf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128, tcx.types.f128]))vec![tcx.types.f128, tcx.types.f128], tcx.types.f128),
511
512 sym::maximum_number_nsz_f16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16, tcx.types.f16]))vec![tcx.types.f16, tcx.types.f16], tcx.types.f16),
513 sym::maximum_number_nsz_f32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32, tcx.types.f32]))vec![tcx.types.f32, tcx.types.f32], tcx.types.f32),
514 sym::maximum_number_nsz_f64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64, tcx.types.f64]))vec![tcx.types.f64, tcx.types.f64], tcx.types.f64),
515 sym::maximum_number_nsz_f128 => {
516 (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128, tcx.types.f128]))vec![tcx.types.f128, tcx.types.f128], tcx.types.f128)
517 }
518
519 sym::maximumf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16, tcx.types.f16]))vec![tcx.types.f16, tcx.types.f16], tcx.types.f16),
520 sym::maximumf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32, tcx.types.f32]))vec![tcx.types.f32, tcx.types.f32], tcx.types.f32),
521 sym::maximumf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64, tcx.types.f64]))vec![tcx.types.f64, tcx.types.f64], tcx.types.f64),
522 sym::maximumf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128, tcx.types.f128]))vec![tcx.types.f128, tcx.types.f128], tcx.types.f128),
523
524 sym::copysignf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16, tcx.types.f16]))vec![tcx.types.f16, tcx.types.f16], tcx.types.f16),
525 sym::copysignf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32, tcx.types.f32]))vec![tcx.types.f32, tcx.types.f32], tcx.types.f32),
526 sym::copysignf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64, tcx.types.f64]))vec![tcx.types.f64, tcx.types.f64], tcx.types.f64),
527 sym::copysignf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128, tcx.types.f128]))vec![tcx.types.f128, tcx.types.f128], tcx.types.f128),
528
529 sym::floorf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
530 sym::floorf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
531 sym::floorf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
532 sym::floorf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
533
534 sym::ceilf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
535 sym::ceilf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
536 sym::ceilf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
537 sym::ceilf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
538
539 sym::truncf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
540 sym::truncf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
541 sym::truncf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
542 sym::truncf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
543
544 sym::round_ties_even_f16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
545 sym::round_ties_even_f32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
546 sym::round_ties_even_f64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
547 sym::round_ties_even_f128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
548
549 sym::roundf16 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f16]))vec![tcx.types.f16], tcx.types.f16),
550 sym::roundf32 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f32]))vec![tcx.types.f32], tcx.types.f32),
551 sym::roundf64 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f64]))vec![tcx.types.f64], tcx.types.f64),
552 sym::roundf128 => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.f128]))vec![tcx.types.f128], tcx.types.f128),
553
554 sym::volatile_load | sym::unaligned_volatile_load => {
555 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0))]))vec![Ty::new_imm_ptr(tcx, param(0))], param(0))
556 }
557 sym::volatile_store | sym::unaligned_volatile_store => {
558 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, param(0)), param(0)]))vec![Ty::new_mut_ptr(tcx, param(0)), param(0)], tcx.types.unit)
559 }
560
561 sym::ctpop | sym::ctlz | sym::ctlz_nonzero | sym::cttz | sym::cttz_nonzero => {
562 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], tcx.types.u32)
563 }
564
565 sym::bswap | sym::bitreverse => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(0)),
566
567 sym::three_way_compare => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], tcx.ty_ordering_enum(span)),
568
569 sym::add_with_overflow | sym::sub_with_overflow | sym::mul_with_overflow => {
570 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], Ty::new_tup(tcx, &[param(0), tcx.types.bool]))
571 }
572
573 sym::carrying_mul_add => (2, 0, ::alloc::vec::from_elem(param(0), 4)vec![param(0); 4], Ty::new_tup(tcx, &[param(1), param(0)])),
574
575 sym::ptr_guaranteed_cmp => (
576 1,
577 0,
578 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0)), Ty::new_imm_ptr(tcx, param(0))]))vec![Ty::new_imm_ptr(tcx, param(0)), Ty::new_imm_ptr(tcx, param(0))],
579 tcx.types.u8,
580 ),
581
582 sym::const_allocate => {
583 (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.usize, tcx.types.usize]))vec![tcx.types.usize, tcx.types.usize], Ty::new_mut_ptr(tcx, tcx.types.u8))
584 }
585 sym::const_deallocate => (
586 0,
587 0,
588 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, tcx.types.u8), tcx.types.usize,
tcx.types.usize]))vec![Ty::new_mut_ptr(tcx, tcx.types.u8), tcx.types.usize, tcx.types.usize],
589 tcx.types.unit,
590 ),
591 sym::const_make_global => {
592 (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, tcx.types.u8)]))vec![Ty::new_mut_ptr(tcx, tcx.types.u8)], Ty::new_imm_ptr(tcx, tcx.types.u8))
593 }
594
595 sym::ptr_offset_from => (
596 1,
597 0,
598 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0)), Ty::new_imm_ptr(tcx, param(0))]))vec![Ty::new_imm_ptr(tcx, param(0)), Ty::new_imm_ptr(tcx, param(0))],
599 tcx.types.isize,
600 ),
601 sym::ptr_offset_from_unsigned => (
602 1,
603 0,
604 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0)), Ty::new_imm_ptr(tcx, param(0))]))vec![Ty::new_imm_ptr(tcx, param(0)), Ty::new_imm_ptr(tcx, param(0))],
605 tcx.types.usize,
606 ),
607 sym::integer_max | sym::integer_min => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(0)),
608 sym::unchecked_div | sym::unchecked_rem | sym::exact_div | sym::disjoint_bitor => {
609 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(0))
610 }
611 sym::unchecked_shl | sym::unchecked_shr => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1)]))vec![param(0), param(1)], param(0)),
612 sym::rotate_left | sym::rotate_right => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), tcx.types.u32]))vec![param(0), tcx.types.u32], param(0)),
613 sym::unchecked_funnel_shl | sym::unchecked_funnel_shr => {
614 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0), tcx.types.u32]))vec![param(0), param(0), tcx.types.u32], param(0))
615 }
616 sym::unchecked_add | sym::unchecked_sub | sym::unchecked_mul => {
617 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(0))
618 }
619 sym::wrapping_add | sym::wrapping_sub | sym::wrapping_mul => {
620 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(0))
621 }
622 sym::saturating_add | sym::saturating_sub => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(0)),
623 sym::carryless_mul => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(0)),
624 sym::fadd_fast | sym::fsub_fast | sym::fmul_fast | sym::fdiv_fast | sym::frem_fast => {
625 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(0))
626 }
627 sym::fadd_algebraic
628 | sym::fsub_algebraic
629 | sym::fmul_algebraic
630 | sym::fdiv_algebraic
631 | sym::frem_algebraic => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(0)),
632 sym::float_to_int_unchecked => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(1)),
633
634 sym::assume => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.bool]))vec![tcx.types.bool], tcx.types.unit),
635 sym::select_unpredictable => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[tcx.types.bool, param(0), param(0)]))vec![tcx.types.bool, param(0), param(0)], param(0)),
636 sym::cold_path => (0, 0, ::alloc::vec::Vec::new()vec![], tcx.types.unit),
637
638 sym::read_via_copy => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0))]))vec![Ty::new_imm_ptr(tcx, param(0))], param(0)),
639 sym::write_via_move => {
640 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, param(0)), param(0)]))vec![Ty::new_mut_ptr(tcx, param(0)), param(0)], tcx.types.unit)
641 }
642 sym::write_box_via_move => {
643 let t = param(0);
644 let maybe_uninit_t = Ty::new_maybe_uninit(tcx, t);
645 let box_mu_t = Ty::new_box(tcx, maybe_uninit_t);
646
647 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[box_mu_t, param(0)]))vec![box_mu_t, param(0)], box_mu_t)
648 }
649
650 sym::typed_swap_nonoverlapping => {
651 (1, 0, ::alloc::vec::from_elem(Ty::new_mut_ptr(tcx, param(0)), 2)vec![Ty::new_mut_ptr(tcx, param(0)); 2], tcx.types.unit)
652 }
653
654 sym::discriminant_value => {
655 let assoc_items = tcx
656 .associated_item_def_ids(tcx.require_lang_item(LangItem::DiscriminantKind, span));
657 let discriminant_def_id = assoc_items[0];
658
659 let br = ty::BoundRegion { var: ty::BoundVar::ZERO, kind: ty::BoundRegionKind::Anon };
660 (
661 1,
662 0,
663 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ref(tcx, ty::Region::new_bound(tcx, ty::INNERMOST, br),
param(0))]))vec![Ty::new_imm_ref(tcx, ty::Region::new_bound(tcx, ty::INNERMOST, br), param(0))],
664 Ty::new_projection_from_args(
665 tcx,
666 ty::IsRigid::No,
667 discriminant_def_id,
668 tcx.mk_args(&[param(0).into()]),
669 ),
670 )
671 }
672
673 sym::catch_unwind => {
674 let mut_data = Ty::new_mut_ptr(tcx, param(0));
675 let mut_u8 = Ty::new_mut_ptr(tcx, tcx.types.u8);
676 let try_fn_ty =
677 ty::Binder::dummy(tcx.mk_fn_sig_unsafe_rust_abi([mut_data], tcx.types.unit));
678 let catch_fn_ty = ty::Binder::dummy(
679 tcx.mk_fn_sig_unsafe_rust_abi([mut_data, mut_u8], tcx.types.unit),
680 );
681 (
682 1,
683 0,
684 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_fn_ptr(tcx, try_fn_ty), mut_data,
Ty::new_fn_ptr(tcx, catch_fn_ty)]))vec![Ty::new_fn_ptr(tcx, try_fn_ty), mut_data, Ty::new_fn_ptr(tcx, catch_fn_ty)],
685 tcx.types.bool,
686 )
687 }
688
689 sym::va_copy => {
690 let (va_list_ref_ty, va_list_ty) = mk_va_list_ty(hir::Mutability::Not);
691 (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[va_list_ref_ty]))vec![va_list_ref_ty], va_list_ty)
692 }
693
694 sym::va_end => (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[mk_va_list_ty(hir::Mutability::Mut).0]))vec![mk_va_list_ty(hir::Mutability::Mut).0], tcx.types.unit),
695
696 sym::va_arg => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[mk_va_list_ty(hir::Mutability::Mut).0]))vec![mk_va_list_ty(hir::Mutability::Mut).0], param(0)),
697
698 sym::nontemporal_store => {
699 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, param(0)), param(0)]))vec![Ty::new_mut_ptr(tcx, param(0)), param(0)], tcx.types.unit)
700 }
701
702 sym::raw_eq => {
703 let br = ty::BoundRegion { var: ty::BoundVar::ZERO, kind: ty::BoundRegionKind::Anon };
704 let param_ty_lhs =
705 Ty::new_imm_ref(tcx, ty::Region::new_bound(tcx, ty::INNERMOST, br), param(0));
706 let br =
707 ty::BoundRegion { var: ty::BoundVar::from_u32(1), kind: ty::BoundRegionKind::Anon };
708 let param_ty_rhs =
709 Ty::new_imm_ref(tcx, ty::Region::new_bound(tcx, ty::INNERMOST, br), param(0));
710 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param_ty_lhs, param_ty_rhs]))vec![param_ty_lhs, param_ty_rhs], tcx.types.bool)
711 }
712
713 sym::black_box => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(0)),
714
715 sym::is_val_statically_known => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], tcx.types.bool),
716
717 sym::const_eval_select => (4, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1), param(2)]))vec![param(0), param(1), param(2)], param(3)),
718
719 sym::vtable_size | sym::vtable_align => {
720 (0, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, tcx.types.unit)]))vec![Ty::new_imm_ptr(tcx, tcx.types.unit)], tcx.types.usize)
721 }
722
723 sym::aggregate_raw_ptr => (3, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(1), param(2)]))vec![param(1), param(2)], param(0)),
726 sym::ptr_metadata => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0))]))vec![Ty::new_imm_ptr(tcx, param(0))], param(1)),
727
728 sym::ub_checks | sym::overflow_checks => (0, 0, Vec::new(), tcx.types.bool),
729
730 sym::contract_check_requires => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], tcx.types.unit),
732 sym::contract_check_ensures => {
733 (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_option(tcx, param(0)), param(1)]))vec![Ty::new_option(tcx, param(0)), param(1)], param(1))
734 }
735
736 sym::simd_eq | sym::simd_ne | sym::simd_lt | sym::simd_le | sym::simd_gt | sym::simd_ge => {
737 (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(1))
738 }
739 sym::simd_add
740 | sym::simd_sub
741 | sym::simd_mul
742 | sym::simd_rem
743 | sym::simd_div
744 | sym::simd_shl
745 | sym::simd_shr
746 | sym::simd_and
747 | sym::simd_or
748 | sym::simd_xor
749 | sym::simd_minimum_number_nsz
750 | sym::simd_maximum_number_nsz
751 | sym::simd_saturating_add
752 | sym::simd_saturating_sub
753 | sym::simd_carryless_mul => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(0)),
754 sym::simd_arith_offset => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1)]))vec![param(0), param(1)], param(0)),
755 sym::simd_neg
756 | sym::simd_bswap
757 | sym::simd_bitreverse
758 | sym::simd_ctlz
759 | sym::simd_cttz
760 | sym::simd_ctpop
761 | sym::simd_fsqrt
762 | sym::simd_fsin
763 | sym::simd_fcos
764 | sym::simd_fexp
765 | sym::simd_fexp2
766 | sym::simd_flog2
767 | sym::simd_flog10
768 | sym::simd_flog
769 | sym::simd_fabs
770 | sym::simd_ceil
771 | sym::simd_floor
772 | sym::simd_round
773 | sym::simd_round_ties_even
774 | sym::simd_trunc => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(0)),
775 sym::simd_fma | sym::simd_relaxed_fma | sym::simd_funnel_shl | sym::simd_funnel_shr => {
776 (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0), param(0)]))vec![param(0), param(0), param(0)], param(0))
777 }
778 sym::simd_gather => (3, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1), param(2)]))vec![param(0), param(1), param(2)], param(0)),
779 sym::simd_masked_load => (3, 1, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1), param(2)]))vec![param(0), param(1), param(2)], param(2)),
780 sym::simd_masked_store => (3, 1, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1), param(2)]))vec![param(0), param(1), param(2)], tcx.types.unit),
781 sym::simd_scatter => (3, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1), param(2)]))vec![param(0), param(1), param(2)], tcx.types.unit),
782 sym::simd_insert | sym::simd_insert_dyn => {
783 (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), tcx.types.u32, param(1)]))vec![param(0), tcx.types.u32, param(1)], param(0))
784 }
785 sym::simd_extract | sym::simd_extract_dyn => {
786 (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), tcx.types.u32]))vec![param(0), tcx.types.u32], param(1))
787 }
788 sym::simd_splat => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(1)]))vec![param(1)], param(0)),
789 sym::simd_cast
790 | sym::simd_as
791 | sym::simd_cast_ptr
792 | sym::simd_expose_provenance
793 | sym::simd_with_exposed_provenance => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(1)),
794 sym::simd_bitmask => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(1)),
795 sym::simd_select | sym::simd_select_bitmask => {
796 (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1), param(1)]))vec![param(0), param(1), param(1)], param(1))
797 }
798 sym::simd_reduce_all | sym::simd_reduce_any => (1, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], tcx.types.bool),
799 sym::simd_reduce_add_ordered | sym::simd_reduce_mul_ordered => {
800 (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1)]))vec![param(0), param(1)], param(1))
801 }
802 sym::simd_reduce_add_unordered
803 | sym::simd_reduce_mul_unordered
804 | sym::simd_reduce_and
805 | sym::simd_reduce_or
806 | sym::simd_reduce_xor
807 | sym::simd_reduce_min
808 | sym::simd_reduce_max => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(1)),
809 sym::simd_shuffle => (3, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0), param(1)]))vec![param(0), param(0), param(1)], param(2)),
810 sym::simd_shuffle_const_generic => (2, 1, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(1)),
811
812 sym::sve_cast => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(1)),
813 sym::sve_tuple_create2 => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0)]))vec![param(0), param(0)], param(1)),
814 sym::sve_tuple_create3 => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0), param(0)]))vec![param(0), param(0), param(0)], param(1)),
815 sym::sve_tuple_create4 => (2, 0, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(0), param(0), param(0)]))vec![param(0), param(0), param(0), param(0)], param(1)),
816 sym::sve_tuple_get => (2, 1, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0)]))vec![param(0)], param(1)),
817 sym::sve_tuple_set => (2, 1, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[param(0), param(1)]))vec![param(0), param(1)], param(0)),
818
819 sym::atomic_cxchg | sym::atomic_cxchgweak => (
820 1,
821 2,
822 ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, param(0)), param(0), param(0)]))vec![Ty::new_mut_ptr(tcx, param(0)), param(0), param(0)],
823 Ty::new_tup(tcx, &[param(0), tcx.types.bool]),
824 ),
825 sym::atomic_load => (1, 2, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_imm_ptr(tcx, param(0))]))vec![Ty::new_imm_ptr(tcx, param(0))], param(0)),
826 sym::atomic_store => (1, 2, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, param(0)), param(0)]))vec![Ty::new_mut_ptr(tcx, param(0)), param(0)], tcx.types.unit),
827
828 sym::atomic_xchg
829 | sym::atomic_max
830 | sym::atomic_min
831 | sym::atomic_umax
832 | sym::atomic_umin => (1, 1, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, param(0)), param(0)]))vec![Ty::new_mut_ptr(tcx, param(0)), param(0)], param(0)),
833 sym::atomic_xadd
834 | sym::atomic_xsub
835 | sym::atomic_and
836 | sym::atomic_nand
837 | sym::atomic_or
838 | sym::atomic_xor => (2, 1, ::alloc::boxed::box_assume_init_into_vec_unsafe(::alloc::intrinsics::write_box_via_move(::alloc::boxed::Box::new_uninit(),
[Ty::new_mut_ptr(tcx, param(0)), param(1)]))vec![Ty::new_mut_ptr(tcx, param(0)), param(1)], param(0)),
839 sym::atomic_fence | sym::atomic_singlethreadfence => (0, 1, Vec::new(), tcx.types.unit),
840
841 sym::return_address => (0, 0, ::alloc::vec::Vec::new()vec![], Ty::new_imm_ptr(tcx, tcx.types.unit)),
842
843 other => {
844 tcx.dcx().emit_err(UnrecognizedIntrinsicFunction { span, name: other });
845 return;
846 }
847 };
848 let sig = tcx.mk_fn_sig_rust_abi(inputs, output, safety);
849 let sig = ty::Binder::bind_with_vars(sig, bound_vars);
850 equate_intrinsic_type(tcx, span, intrinsic_id, n_tps, n_lts, n_cts, sig)
851}