aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/llvm.zig
diff options
context:
space:
mode:
authorCody Tapscott <topolarity@tapscott.me>2022-09-27 19:57:43 -0700
committerVeikka Tuominen <git@vexu.eu>2022-09-28 12:48:28 +0300
commite165b8b223bfaaeb5953dec9a1f03b8e0ce4ddab (patch)
tree67af3c2ea71a7b50d283009ed92f0d08223e221d /src/codegen/llvm.zig
parentf3a1b5c481646ee35813cbe8bb2b0a3979df3ab8 (diff)
downloadzig-e165b8b223bfaaeb5953dec9a1f03b8e0ce4ddab.tar.gz
zig-e165b8b223bfaaeb5953dec9a1f03b8e0ce4ddab.zip
stage2: Fix multiple_llvm_int parameter passing
Small iteration oopsie We could really use some more comprehensive C ABI tests.
Diffstat (limited to 'src/codegen/llvm.zig')
-rw-r--r--src/codegen/llvm.zig18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index 2f66c56823..1b793265da 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -1035,10 +1035,11 @@ pub const Object = struct {
}
const ints_llvm_ty = dg.context.structType(field_types.ptr, @intCast(c_uint, field_types.len), .False);
const casted_ptr = builder.buildBitCast(arg_ptr, ints_llvm_ty.pointerType(0), "");
- for (llvm_ints) |_, i_usize| {
- const i = @intCast(c_uint, i_usize);
- const param = llvm_func.getParam(i);
- const field_ptr = builder.buildStructGEP(ints_llvm_ty, casted_ptr, i, "");
+ for (llvm_ints) |_, field_i_usize| {
+ const field_i = @intCast(c_uint, field_i_usize);
+ const param = llvm_func.getParam(llvm_arg_i);
+ llvm_arg_i += 1;
+ const field_ptr = builder.buildStructGEP(ints_llvm_ty, casted_ptr, field_i, "");
const store_inst = builder.buildStore(param, field_ptr);
store_inst.setAlignment(target.cpu.arch.ptrBitWidth() / 8);
}
@@ -1070,10 +1071,11 @@ pub const Object = struct {
}
const floats_llvm_ty = dg.context.structType(field_types.ptr, @intCast(c_uint, field_types.len), .False);
const casted_ptr = builder.buildBitCast(arg_ptr, floats_llvm_ty.pointerType(0), "");
- for (llvm_floats) |_, i_usize| {
- const i = @intCast(c_uint, i_usize);
- const param = llvm_func.getParam(i);
- const field_ptr = builder.buildStructGEP(floats_llvm_ty, casted_ptr, i, "");
+ for (llvm_floats) |_, field_i_usize| {
+ const field_i = @intCast(c_uint, field_i_usize);
+ const param = llvm_func.getParam(llvm_arg_i);
+ llvm_arg_i += 1;
+ const field_ptr = builder.buildStructGEP(floats_llvm_ty, casted_ptr, field_i, "");
const store_inst = builder.buildStore(param, field_ptr);
store_inst.setAlignment(target.cpu.arch.ptrBitWidth() / 8);
}