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";
|
export const int_msg = "INTERRUPTED!\n";
|
||||||
|
|
||||||
comptime {
|
comptime {
|
||||||
@setEvalBranchQuota(2560000);
|
asm(
|
||||||
comptime var i = 0;
|
\\.macro isr_wrapperX number
|
||||||
var buf: [512]u8 = undefined;
|
\\ isr_wrapper\number:
|
||||||
inline while (i < 256) : (i += 1) {
|
\\ mov $\number, %rdi
|
||||||
const code = std.fmt.bufPrint(buf[0..512],
|
\\ call interrupt_handler
|
||||||
\\.global isr_wrapper{}
|
\\ iretq
|
||||||
\\.type isr_wrapper{}, @function
|
\\.endm
|
||||||
\\isr_wrapper{}:
|
\\
|
||||||
\\ mov ${}, %rdi
|
\\.altmacro
|
||||||
\\ call interrupt_handler
|
\\.set i,0
|
||||||
\\ iretq
|
\\.rept 256
|
||||||
, .{i,i,i,i}) catch unreachable;
|
\\ isr_wrapperX %i
|
||||||
asm (code);
|
\\ .set i,i+1
|
||||||
}
|
\\.endr
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export fn interrupt_handler(int_type: u64) void {
|
export fn interrupt_handler(int_type: u64) void {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue