|  | /* SPDX-License-Identifier: GPL-2.0 */ | 
|  | /* | 
|  | * Copyright (c) 2023 Intel Corporation | 
|  | */ | 
|  |  | 
|  | #ifndef __ASSEMBLY__ | 
|  | #define __ASSEMBLY__ | 
|  | #endif | 
|  |  | 
|  | #include <asm/csr.h> | 
|  |  | 
|  | .macro save_context | 
|  | addi  sp, sp, (-8*34) | 
|  | sd    x1, 0(sp) | 
|  | sd    x2, 8(sp) | 
|  | sd    x3, 16(sp) | 
|  | sd    x4, 24(sp) | 
|  | sd    x5, 32(sp) | 
|  | sd    x6, 40(sp) | 
|  | sd    x7, 48(sp) | 
|  | sd    x8, 56(sp) | 
|  | sd    x9, 64(sp) | 
|  | sd    x10, 72(sp) | 
|  | sd    x11, 80(sp) | 
|  | sd    x12, 88(sp) | 
|  | sd    x13, 96(sp) | 
|  | sd    x14, 104(sp) | 
|  | sd    x15, 112(sp) | 
|  | sd    x16, 120(sp) | 
|  | sd    x17, 128(sp) | 
|  | sd    x18, 136(sp) | 
|  | sd    x19, 144(sp) | 
|  | sd    x20, 152(sp) | 
|  | sd    x21, 160(sp) | 
|  | sd    x22, 168(sp) | 
|  | sd    x23, 176(sp) | 
|  | sd    x24, 184(sp) | 
|  | sd    x25, 192(sp) | 
|  | sd    x26, 200(sp) | 
|  | sd    x27, 208(sp) | 
|  | sd    x28, 216(sp) | 
|  | sd    x29, 224(sp) | 
|  | sd    x30, 232(sp) | 
|  | sd    x31, 240(sp) | 
|  | csrr  s0, CSR_SEPC | 
|  | csrr  s1, CSR_SSTATUS | 
|  | csrr  s2, CSR_SCAUSE | 
|  | sd    s0, 248(sp) | 
|  | sd    s1, 256(sp) | 
|  | sd    s2, 264(sp) | 
|  | .endm | 
|  |  | 
|  | .macro restore_context | 
|  | ld    s2, 264(sp) | 
|  | ld    s1, 256(sp) | 
|  | ld    s0, 248(sp) | 
|  | csrw  CSR_SCAUSE, s2 | 
|  | csrw  CSR_SSTATUS, s1 | 
|  | csrw  CSR_SEPC, s0 | 
|  | ld    x31, 240(sp) | 
|  | ld    x30, 232(sp) | 
|  | ld    x29, 224(sp) | 
|  | ld    x28, 216(sp) | 
|  | ld    x27, 208(sp) | 
|  | ld    x26, 200(sp) | 
|  | ld    x25, 192(sp) | 
|  | ld    x24, 184(sp) | 
|  | ld    x23, 176(sp) | 
|  | ld    x22, 168(sp) | 
|  | ld    x21, 160(sp) | 
|  | ld    x20, 152(sp) | 
|  | ld    x19, 144(sp) | 
|  | ld    x18, 136(sp) | 
|  | ld    x17, 128(sp) | 
|  | ld    x16, 120(sp) | 
|  | ld    x15, 112(sp) | 
|  | ld    x14, 104(sp) | 
|  | ld    x13, 96(sp) | 
|  | ld    x12, 88(sp) | 
|  | ld    x11, 80(sp) | 
|  | ld    x10, 72(sp) | 
|  | ld    x9, 64(sp) | 
|  | ld    x8, 56(sp) | 
|  | ld    x7, 48(sp) | 
|  | ld    x6, 40(sp) | 
|  | ld    x5, 32(sp) | 
|  | ld    x4, 24(sp) | 
|  | ld    x3, 16(sp) | 
|  | ld    x2, 8(sp) | 
|  | ld    x1, 0(sp) | 
|  | addi  sp, sp, (8*34) | 
|  | .endm | 
|  |  | 
|  | .balign 4 | 
|  | .global exception_vectors | 
|  | exception_vectors: | 
|  | save_context | 
|  | move  a0, sp | 
|  | call  route_exception | 
|  | restore_context | 
|  | sret |