here is my code
Code: Select all
#define wrapper(x) extern "C" void x(isr_stack_frame*); \
extern "C" void wrapper_##x(void); \
asm volatile (".align 0x10;" \
"wrapper_"#x": " \
"leaq (%rsp), %rdi;" \
"call "#x"; iretq" \
)
#define vector(x) (vintpc)wrapper_isr##x
#define interrupt(x) dummy(void); wrapper(isr##x); void isr##x
void interrupt(DivideByZero)(isr_stack_frame * frame) {
frame = (isr_stack_frame *)((vintp)frame - 8);
printf("#DivideByZero\n");
printf("- errorCode : %x\n", frame->errorCode);
printf("- returnInstructionPointer: %x\n", frame->returnInstructionPointer);
printf("- returnCodeSelector : %x\n", frame->returnCodeSelector);
printf("- flags : %x\n", frame->flags);
printf("- stackPointer : %x\n", frame->stackPointer);
printf("- stackSelector : %x\n", frame->stackSelector);
for(;;);
}
is this faster then using the movq %rsp, %rdi; addq $-8, %rdi alternative?