root/arch/sh/kernel/cpu/sh2a/ex.S
/* SPDX-License-Identifier: GPL-2.0
 *
 * arch/sh/kernel/cpu/sh2a/ex.S
 *
 * The SH-2A exception vector table
 *
 * Copyright (C) 2008 Yoshinori Sato
 */

#include <linux/linkage.h>

!
! convert Exception Vector to Exception Number
!

! exception no 0 to 255
exception_entry0:
no      =       0
        .rept   256
        mov.l   r1,@-sp
        bra     exception_trampoline0
        mov     #no,r1
no      =       no + 1
        .endr
exception_trampoline0:
        mov.l   r0,@-sp
        mov.l   1f,r0
        extu.b  r1,r1
        jmp     @r0
          extu.w        r1,r1
         
        .align  2
1:      .long   exception_handler

! exception no 256 to 511
exception_entry1:
no      =       0
        .rept   256
        mov.l   r1,@-sp
        bra     exception_trampoline1
        mov     #no,r1
no      =       no + 1
        .endr
exception_trampoline1:
        mov.l   r0,@-sp
        extu.b  r1,r1
        movi20  #0x100,r0
        add     r0,r1
        mov.l   1f,r0
        jmp     @r0
          extu.w        r1,r1
        
        .align  2
1:      .long   exception_handler

        !
! Exception Vector Base
!
        .align  2
ENTRY(vbr_base)
vector  =       0
        .rept   256
        .long   exception_entry0 + vector * 6
vector  =       vector + 1
        .endr
vector  =       0
        .rept   256
        .long   exception_entry1 + vector * 6
vector  =       vector + 1
        .endr