Skip to content

Commit ef024e1

Browse files
committed
va_arg.emit_direct_ptr_va_arg
1 parent fac9cf8 commit ef024e1

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

src/librustc_codegen_llvm/va_arg.rs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::type_of::LayoutLlvmExt;
44
use crate::value::Value;
55
use rustc_codegen_ssa::mir::operand::OperandRef;
66
use rustc_codegen_ssa::traits::{BaseTypeMethods, BuilderMethods, ConstMethods, DerivedTypeMethods};
7-
use rustc::ty::layout::{Align, HasDataLayout, HasTyCtxt, LayoutOf, Size};
7+
use rustc::ty::layout::{Align, HasDataLayout, HasTyCtxt, LayoutOf, MemoryPosition};
88
use rustc::ty::Ty;
99

1010
#[allow(dead_code)]
@@ -24,8 +24,7 @@ fn emit_direct_ptr_va_arg(
2424
bx: &mut Builder<'a, 'll, 'tcx>,
2525
list: OperandRef<'tcx, &'ll Value>,
2626
llty: &'ll Type,
27-
size: Size,
28-
align: Align,
27+
mem_pos: MemoryPosition,
2928
slot_size: Align,
3029
allow_higher_align: bool
3130
) -> (&'ll Value, Align) {
@@ -38,21 +37,21 @@ fn emit_direct_ptr_va_arg(
3837

3938
let ptr = bx.load(va_list_addr, bx.tcx().data_layout.pointer_pos.align.abi);
4039

41-
let (addr, addr_align) = if allow_higher_align && align > slot_size {
42-
(round_pointer_up_to_alignment(bx, ptr, align, bx.cx().type_i8p()), align)
40+
let (addr, addr_align) = if allow_higher_align && mem_pos.align > slot_size {
41+
(round_pointer_up_to_alignment(bx, ptr, mem_pos.align, bx.cx().type_i8p()), mem_pos.align)
4342
} else {
4443
(ptr, slot_size)
4544
};
4645

4746

48-
let aligned_size = size.align_to(slot_size).bytes() as i32;
47+
let aligned_size = mem_pos.size.align_to(slot_size).bytes() as i32;
4948
let full_direct_size = bx.cx().const_i32(aligned_size);
5049
let next = bx.inbounds_gep(addr, &[full_direct_size]);
5150
bx.store(next, va_list_addr, bx.tcx().data_layout.pointer_pos.align.abi);
5251

53-
if size.bytes() < slot_size.bytes() &&
52+
if mem_pos.size.bytes() < slot_size.bytes() &&
5453
&*bx.tcx().sess.target.target.target_endian == "big" {
55-
let adjusted_size = bx.cx().const_i32((slot_size.bytes() - size.bytes()) as i32);
54+
let adjusted_size = bx.cx().const_i32((slot_size.bytes() - mem_pos.size.bytes()) as i32);
5655
let adjusted = bx.inbounds_gep(addr, &[adjusted_size]);
5756
(bx.bitcast(adjusted, bx.cx().type_ptr_to(llty)), addr_align)
5857
} else {
@@ -69,20 +68,18 @@ fn emit_ptr_va_arg(
6968
allow_higher_align: bool
7069
) -> &'ll Value {
7170
let layout = bx.cx.layout_of(target_ty);
72-
let (llty, size, align) = if indirect {
71+
let (llty, pref_pos) = if indirect {
7372
(bx.cx.layout_of(bx.cx.tcx.mk_imm_ptr(target_ty)).llvm_type(bx.cx),
74-
bx.cx.data_layout().pointer_pos.size,
75-
bx.cx.data_layout().pointer_pos.align)
73+
bx.cx.data_layout().pointer_pos)
7674
} else {
7775
(layout.llvm_type(bx.cx),
78-
layout.pref_pos.size,
79-
layout.pref_pos.align)
76+
layout.pref_pos)
8077
};
81-
let (addr, addr_align) = emit_direct_ptr_va_arg(bx, list, llty, size, align.abi,
78+
let (addr, addr_align) = emit_direct_ptr_va_arg(bx, list, llty, pref_pos.mem_pos(),
8279
slot_size, allow_higher_align);
8380
if indirect {
8481
let tmp_ret = bx.load(addr, addr_align);
85-
bx.load(tmp_ret, align.abi)
82+
bx.load(tmp_ret, pref_pos.align.abi)
8683
} else {
8784
bx.load(addr, addr_align)
8885
}

0 commit comments

Comments
 (0)