x86_64: replace comptime loop by GAS wrapper
This commit is contained in:
parent
0d10e698da
commit
062917d75b
|
|
@ -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
|
||||
asm(
|
||||
\\.macro isr_wrapperX number
|
||||
\\ isr_wrapper\number:
|
||||
\\ mov $\number, %rdi
|
||||
\\ call interrupt_handler
|
||||
\\ iretq
|
||||
, .{i,i,i,i}) catch unreachable;
|
||||
asm (code);
|
||||
}
|
||||
\\.endm
|
||||
\\
|
||||
\\.altmacro
|
||||
\\.set i,0
|
||||
\\.rept 256
|
||||
\\ isr_wrapperX %i
|
||||
\\ .set i,i+1
|
||||
\\.endr
|
||||
);
|
||||
}
|
||||
|
||||
export fn interrupt_handler(int_type: u64) void {
|
||||
|
|
|
|||
Loading…
Reference in New Issue