1*98ea1f96SClément Léger/* SPDX-License-Identifier: GPL-2.0 */ 2*98ea1f96SClément Léger/* 3*98ea1f96SClément Léger * RISC-V SSE events entry point. 4*98ea1f96SClément Léger * 5*98ea1f96SClément Léger * Copyright (C) 2025, Rivos Inc., Clément Léger <cleger@rivosinc.com> 6*98ea1f96SClément Léger */ 7*98ea1f96SClément Léger#include <asm/asm.h> 8*98ea1f96SClément Léger#include <asm/asm-offsets.h> 9*98ea1f96SClément Léger#include <asm/csr.h> 10*98ea1f96SClément Léger#include <generated/sbi-asm-offsets.h> 11*98ea1f96SClément Léger 12*98ea1f96SClément Léger.section .text 13*98ea1f96SClément Léger.global sbi_sse_entry 14*98ea1f96SClément Légersbi_sse_entry: 15*98ea1f96SClément Léger /* Save stack temporarily */ 16*98ea1f96SClément Léger REG_S sp, SBI_SSE_REG_TMP(a7) 17*98ea1f96SClément Léger /* Set entry stack */ 18*98ea1f96SClément Léger REG_L sp, SBI_SSE_HANDLER_STACK(a7) 19*98ea1f96SClément Léger 20*98ea1f96SClément Léger addi sp, sp, -(PT_SIZE) 21*98ea1f96SClément Léger REG_S ra, PT_RA(sp) 22*98ea1f96SClément Léger REG_S s0, PT_S0(sp) 23*98ea1f96SClément Léger REG_S s1, PT_S1(sp) 24*98ea1f96SClément Léger REG_S s2, PT_S2(sp) 25*98ea1f96SClément Léger REG_S s3, PT_S3(sp) 26*98ea1f96SClément Léger REG_S s4, PT_S4(sp) 27*98ea1f96SClément Léger REG_S s5, PT_S5(sp) 28*98ea1f96SClément Léger REG_S s6, PT_S6(sp) 29*98ea1f96SClément Léger REG_S s7, PT_S7(sp) 30*98ea1f96SClément Léger REG_S s8, PT_S8(sp) 31*98ea1f96SClément Léger REG_S s9, PT_S9(sp) 32*98ea1f96SClément Léger REG_S s10, PT_S10(sp) 33*98ea1f96SClément Léger REG_S s11, PT_S11(sp) 34*98ea1f96SClément Léger REG_S tp, PT_TP(sp) 35*98ea1f96SClément Léger REG_S t0, PT_T0(sp) 36*98ea1f96SClément Léger REG_S t1, PT_T1(sp) 37*98ea1f96SClément Léger REG_S t2, PT_T2(sp) 38*98ea1f96SClément Léger REG_S t3, PT_T3(sp) 39*98ea1f96SClément Léger REG_S t4, PT_T4(sp) 40*98ea1f96SClément Léger REG_S t5, PT_T5(sp) 41*98ea1f96SClément Léger REG_S t6, PT_T6(sp) 42*98ea1f96SClément Léger REG_S gp, PT_GP(sp) 43*98ea1f96SClément Léger REG_S a0, PT_A0(sp) 44*98ea1f96SClément Léger REG_S a1, PT_A1(sp) 45*98ea1f96SClément Léger REG_S a2, PT_A2(sp) 46*98ea1f96SClément Léger REG_S a3, PT_A3(sp) 47*98ea1f96SClément Léger REG_S a4, PT_A4(sp) 48*98ea1f96SClément Léger REG_S a5, PT_A5(sp) 49*98ea1f96SClément Léger csrr a1, CSR_SEPC 50*98ea1f96SClément Léger REG_S a1, PT_EPC(sp) 51*98ea1f96SClément Léger csrr a2, CSR_SSTATUS 52*98ea1f96SClément Léger REG_S a2, PT_STATUS(sp) 53*98ea1f96SClément Léger 54*98ea1f96SClément Léger REG_L a0, SBI_SSE_REG_TMP(a7) 55*98ea1f96SClément Léger REG_S a0, PT_SP(sp) 56*98ea1f96SClément Léger 57*98ea1f96SClément Léger REG_L t0, SBI_SSE_HANDLER(a7) 58*98ea1f96SClément Léger REG_L a0, SBI_SSE_HANDLER_DATA(a7) 59*98ea1f96SClément Léger mv a1, sp 60*98ea1f96SClément Léger mv a2, a6 61*98ea1f96SClément Léger jalr t0 62*98ea1f96SClément Léger 63*98ea1f96SClément Léger REG_L a1, PT_EPC(sp) 64*98ea1f96SClément Léger REG_L a2, PT_STATUS(sp) 65*98ea1f96SClément Léger csrw CSR_SEPC, a1 66*98ea1f96SClément Léger csrw CSR_SSTATUS, a2 67*98ea1f96SClément Léger 68*98ea1f96SClément Léger REG_L ra, PT_RA(sp) 69*98ea1f96SClément Léger REG_L s0, PT_S0(sp) 70*98ea1f96SClément Léger REG_L s1, PT_S1(sp) 71*98ea1f96SClément Léger REG_L s2, PT_S2(sp) 72*98ea1f96SClément Léger REG_L s3, PT_S3(sp) 73*98ea1f96SClément Léger REG_L s4, PT_S4(sp) 74*98ea1f96SClément Léger REG_L s5, PT_S5(sp) 75*98ea1f96SClément Léger REG_L s6, PT_S6(sp) 76*98ea1f96SClément Léger REG_L s7, PT_S7(sp) 77*98ea1f96SClément Léger REG_L s8, PT_S8(sp) 78*98ea1f96SClément Léger REG_L s9, PT_S9(sp) 79*98ea1f96SClément Léger REG_L s10, PT_S10(sp) 80*98ea1f96SClément Léger REG_L s11, PT_S11(sp) 81*98ea1f96SClément Léger REG_L tp, PT_TP(sp) 82*98ea1f96SClément Léger REG_L t0, PT_T0(sp) 83*98ea1f96SClément Léger REG_L t1, PT_T1(sp) 84*98ea1f96SClément Léger REG_L t2, PT_T2(sp) 85*98ea1f96SClément Léger REG_L t3, PT_T3(sp) 86*98ea1f96SClément Léger REG_L t4, PT_T4(sp) 87*98ea1f96SClément Léger REG_L t5, PT_T5(sp) 88*98ea1f96SClément Léger REG_L t6, PT_T6(sp) 89*98ea1f96SClément Léger REG_L gp, PT_GP(sp) 90*98ea1f96SClément Léger REG_L a0, PT_A0(sp) 91*98ea1f96SClément Léger REG_L a1, PT_A1(sp) 92*98ea1f96SClément Léger REG_L a2, PT_A2(sp) 93*98ea1f96SClément Léger REG_L a3, PT_A3(sp) 94*98ea1f96SClément Léger REG_L a4, PT_A4(sp) 95*98ea1f96SClément Léger REG_L a5, PT_A5(sp) 96*98ea1f96SClément Léger 97*98ea1f96SClément Léger REG_L sp, PT_SP(sp) 98*98ea1f96SClément Léger 99*98ea1f96SClément Léger li a7, ASM_SBI_EXT_SSE 100*98ea1f96SClément Léger li a6, ASM_SBI_EXT_SSE_COMPLETE 101*98ea1f96SClément Léger ecall 102*98ea1f96SClément Léger 103