From 062917d75b353ec88dd6ce17d0fa1d4e13b19e3d Mon Sep 17 00:00:00 2001 From: Quinten Kock Date: Sat, 30 Jan 2021 22:08:38 +0100 Subject: [PATCH] x86_64: replace comptime loop by GAS wrapper --- kernel/src/arch/x86_64/interrupt.zig | 29 ++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/kernel/src/arch/x86_64/interrupt.zig b/kernel/src/arch/x86_64/interrupt.zig index 898fabd..13dad05 100644 --- a/kernel/src/arch/x86_64/interrupt.zig +++ b/kernel/src/arch/x86_64/interrupt.zig @@ -5,20 +5,21 @@ const c_idt = @cImport(@cInclude("arch/x86_64/idt.h")); export const int_msg = "INTERRUPTED!\n"; comptime { - @setEvalBranchQuota(2560000); - comptime var i = 0; - var buf: [512]u8 = undefined; - inline while (i < 256) : (i += 1) { - const code = std.fmt.bufPrint(buf[0..512], - \\.global isr_wrapper{} - \\.type isr_wrapper{}, @function - \\isr_wrapper{}: - \\ mov ${}, %rdi - \\ call interrupt_handler - \\ iretq - , .{i,i,i,i}) catch unreachable; - asm (code); - } + asm( + \\.macro isr_wrapperX number + \\ isr_wrapper\number: + \\ mov $\number, %rdi + \\ call interrupt_handler + \\ iretq + \\.endm + \\ + \\.altmacro + \\.set i,0 + \\.rept 256 + \\ isr_wrapperX %i + \\ .set i,i+1 + \\.endr + ); } export fn interrupt_handler(int_type: u64) void {