1 use crate::abi::call::{FnType, ArgType, Uniform};
2 use crate::abi::{HasDataLayout, LayoutOf, TyLayout, TyLayoutMethods};
4 // Data layout: e-p:32:32-i64:64-v128:32:128-n32-S128
6 // See the https://github.com/kripken/emscripten-fastcomp-clang repository.
7 // The class `EmscriptenABIInfo` in `/lib/CodeGen/TargetInfo.cpp` contains the ABI definitions.
9 fn classify_ret_ty<'a, Ty, C>(cx: &C, ret: &mut ArgType<'a, Ty>)
10 where Ty: TyLayoutMethods<'a, C> + Copy,
11 C: LayoutOf<Ty = Ty, TyLayout = TyLayout<'a, Ty>> + HasDataLayout
13 if ret.layout.is_aggregate() {
14 if let Some(unit) = ret.layout.homogeneous_aggregate(cx).unit() {
15 let size = ret.layout.size;
16 if unit.size == size {
29 fn classify_arg_ty<Ty>(arg: &mut ArgType<'_, Ty>) {
30 if arg.layout.is_aggregate() {
31 arg.make_indirect_byval();
35 pub fn compute_abi_info<'a, Ty, C>(cx: &C, fty: &mut FnType<'a, Ty>)
36 where Ty: TyLayoutMethods<'a, C> + Copy,
37 C: LayoutOf<Ty = Ty, TyLayout = TyLayout<'a, Ty>> + HasDataLayout
39 if !fty.ret.is_ignore() {
40 classify_ret_ty(cx, &mut fty.ret);
43 for arg in &mut fty.args {
44 if arg.is_ignore() { continue; }