From 52c8ac1a847f893bc54cab5621738c0aa16f7c9d Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Fri, 15 Apr 2022 13:46:51 +0200 Subject: stage2: lower u128, and refactor some bits in x64 --- src/codegen.zig | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'src/codegen.zig') diff --git a/src/codegen.zig b/src/codegen.zig index 68e1f3697f..7fa0b2c0f8 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -426,22 +426,20 @@ pub fn generateSymbol( }, }, .Int => { - // TODO populate .debug_info for the integer - const info = typed_value.ty.intInfo(bin_file.options.target); + const info = typed_value.ty.intInfo(target); if (info.bits <= 8) { const x = @intCast(u8, typed_value.val.toUnsignedInt(target)); try code.append(x); return Result{ .appended = {} }; } if (info.bits > 64) { - return Result{ - .fail = try ErrorMsg.create( - bin_file.allocator, - src_loc, - "TODO implement generateSymbol for big ints ('{}')", - .{typed_value.ty.fmtDebug()}, - ), - }; + var bigint_buffer: Value.BigIntSpace = undefined; + const bigint = typed_value.val.toBigInt(&bigint_buffer, target); + const abi_size = try math.cast(usize, typed_value.ty.abiSize(target)); + const start = code.items.len; + try code.resize(start + abi_size); + bigint.writeTwosComplement(code.items[start..][0..abi_size], info.bits, abi_size, endian); + return Result{ .appended = {} }; } switch (info.signedness) { .unsigned => { -- cgit v1.2.3