You’re absolutely right! (for all intents and purposes this is a joke please don’t ban me)
Anyways, changing the program to this:
const std = @import("std");
pub noinline fn foobarbaz(x: u1024, y: u1024) u1024 {
return x + y;
}
pub fn main(process: std.process.Init) !void {
var stdin_buffer: [1024]u8 = undefined;
var stdin_reader = std.Io.File.stdin().reader(process.io, &stdin_buffer);
var in = try stdin_reader.interface.takeDelimiterExclusive('\n');
stdin_reader.interface.toss(1);
const x = try std.fmt.parseInt(u1024, in, 10);
in = try stdin_reader.interface.takeDelimiterExclusive('\n');
stdin_reader.interface.toss(1);
const y = try std.fmt.parseInt(u1024, in, 10);
std.debug.print("{}\n", .{foobarbaz(x, y)});
}
(reading from stdin ripped straight from Right way to read user input from stdin in zig 0.15.2 )
and looking at the assembly I see:
main.foobarbaz:
.cfi_startproc
push rbp
.cfi_def_cfa_offset 16
.cfi_offset rbp, -16
mov rbp, rsp
.cfi_def_cfa_register rbp
add rsi, qword ptr [rbp + 104]
mov rax, rdi
adc rdx, qword ptr [rbp + 112]
adc rcx, qword ptr [rbp + 120]
adc r8, qword ptr [rbp + 128]
mov qword ptr [rdi + 16], rcx
mov rcx, qword ptr [rbp + 144]
mov qword ptr [rdi + 8], rdx
mov qword ptr [rdi], rsi
mov rsi, qword ptr [rbp + 152]
mov rdx, qword ptr [rbp + 160]
adc r9, qword ptr [rbp + 136]
mov qword ptr [rdi + 24], r8
adc rcx, qword ptr [rbp + 16]
mov qword ptr [rdi + 32], r9
adc rsi, qword ptr [rbp + 24]
mov qword ptr [rdi + 40], rcx
adc rdx, qword ptr [rbp + 32]
mov qword ptr [rdi + 48], rsi
mov rsi, qword ptr [rbp + 168]
adc rsi, qword ptr [rbp + 40]
mov qword ptr [rdi + 56], rdx
mov rdx, qword ptr [rbp + 176]
adc rdx, qword ptr [rbp + 48]
mov qword ptr [rdi + 64], rsi
mov rsi, qword ptr [rbp + 184]
adc rsi, qword ptr [rbp + 56]
mov qword ptr [rdi + 72], rdx
mov rdx, qword ptr [rbp + 192]
adc rdx, qword ptr [rbp + 64]
mov qword ptr [rdi + 80], rsi
mov rsi, qword ptr [rbp + 200]
adc rsi, qword ptr [rbp + 72]
mov qword ptr [rdi + 88], rdx
mov rdx, qword ptr [rbp + 208]
adc rdx, qword ptr [rbp + 80]
mov qword ptr [rdi + 96], rsi
mov rsi, qword ptr [rbp + 216]
adc rsi, qword ptr [rbp + 88]
mov qword ptr [rdi + 104], rdx
mov rdx, qword ptr [rbp + 224]
adc rdx, qword ptr [rbp + 96]
mov qword ptr [rdi + 112], rsi
mov qword ptr [rdi + 120], rdx
pop rbp
.cfi_def_cfa rsp, 8
ret
Which looks more approachable. I think I should go sleep now but I’ll try to understand what this does tomorrow. Thanks!