root/src/system/boot/platform/bios_ia32/interrupts_asm.S
/*
 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */


#include <asm_defs.h>

#include "interrupts.h"


// #pragma mark - interrupt functions


#define INTERRUPT_FUNCTION(vector)                      \
.align 8;                                                                       \
FUNCTION(interrupt_function##vector):           \
        pushl   $0;                                                             \
        pusha;                                                                  \
        pushl   $vector;                                                \
        call    handle_exception;

#undef INTERRUPT_FUNCTION_ERROR
#define INTERRUPT_FUNCTION_ERROR(vector)        \
.align 8;                                                                       \
FUNCTION(interrupt_function##vector):           \
        pusha;                                                                  \
        pushl   $vector;                                                \
        call    handle_exception;

INTERRUPT_FUNCTIONS()


// #pragma mark - interrupt functions during exception


#undef INTERRUPT_FUNCTION
#define INTERRUPT_FUNCTION(vector)                                      \
.align 8;                                                                                       \
FUNCTION(exception_interrupt_function##vector):         \
        call    handle_exception_exception;

#undef INTERRUPT_FUNCTION_ERROR
#define INTERRUPT_FUNCTION_ERROR(vector)        INTERRUPT_FUNCTION(vector)

INTERRUPT_FUNCTIONS()