diff options
Diffstat (limited to 'cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h')
-rw-r--r-- | cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h b/cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h index c56e1acab2..2bff71567c 100644 --- a/cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h +++ b/cpukit/score/cpu/riscv/include/rtems/score/cpuimpl.h @@ -78,11 +78,46 @@ #define RISCV_INTERRUPT_FRAME_T4 60 #define RISCV_INTERRUPT_FRAME_T5 64 #define RISCV_INTERRUPT_FRAME_T6 68 + +#if __riscv_flen == 0 + #define RISCV_INTERRUPT_FRAME_A0 72 #define RISCV_INTERRUPT_FRAME_A1 76 #define CPU_INTERRUPT_FRAME_SIZE 80 +#elif __riscv_flen == 32 + +#define RISCV_CONTEXT_FCSR 68 + +#define RISCV_CONTEXT_F( x ) (72 + 4 * (x)) + +#define RISCV_INTERRUPT_FRAME_FCSR 72 + +#define RISCV_INTERRUPT_FRAME_F( x ) (76 + 4 * (x)) + +#define RISCV_INTERRUPT_FRAME_A0 156 +#define RISCV_INTERRUPT_FRAME_A1 160 + +#define CPU_INTERRUPT_FRAME_SIZE 176 + +#elif __riscv_flen == 64 + +#define RISCV_CONTEXT_FCSR 68 + +#define RISCV_CONTEXT_F( x ) (72 + 8 * (x)) + +#define RISCV_INTERRUPT_FRAME_FCSR 72 + +#define RISCV_INTERRUPT_FRAME_F( x ) (80 + 8 * (x)) + +#define RISCV_INTERRUPT_FRAME_A0 240 +#define RISCV_INTERRUPT_FRAME_A1 244 + +#define CPU_INTERRUPT_FRAME_SIZE 256 + +#endif /* __riscv_flen */ + #elif __riscv_xlen == 64 #define RISCV_CONTEXT_RA 8 @@ -119,13 +154,86 @@ #define RISCV_INTERRUPT_FRAME_T4 120 #define RISCV_INTERRUPT_FRAME_T5 128 #define RISCV_INTERRUPT_FRAME_T6 136 + +#if __riscv_flen == 0 + #define RISCV_INTERRUPT_FRAME_A0 144 #define RISCV_INTERRUPT_FRAME_A1 152 #define CPU_INTERRUPT_FRAME_SIZE 160 +#elif __riscv_flen == 32 + +#define RISCV_CONTEXT_FCSR 128 + +#define RISCV_CONTEXT_F( x ) (132 + 4 * (x)) + +#define RISCV_INTERRUPT_FRAME_FCSR 144 + +#define RISCV_INTERRUPT_FRAME_F( x ) (148 + 4 * (x)) + +#define RISCV_INTERRUPT_FRAME_A0 232 +#define RISCV_INTERRUPT_FRAME_A1 240 + +#define CPU_INTERRUPT_FRAME_SIZE 256 + +#elif __riscv_flen == 64 + +#define RISCV_CONTEXT_FCSR 128 + +#define RISCV_CONTEXT_F( x ) (136 + 8 * (x)) + +#define RISCV_INTERRUPT_FRAME_FCSR 144 + +#define RISCV_INTERRUPT_FRAME_F( x ) (152 + 8 * (x)) + +#define RISCV_INTERRUPT_FRAME_A0 312 +#define RISCV_INTERRUPT_FRAME_A1 320 + +#define CPU_INTERRUPT_FRAME_SIZE 336 + +#endif /* __riscv_flen */ + #endif /* __riscv_xlen */ +#if __riscv_flen > 0 + +#define RISCV_CONTEXT_FS0 RISCV_CONTEXT_F( 0 ) +#define RISCV_CONTEXT_FS1 RISCV_CONTEXT_F( 1 ) +#define RISCV_CONTEXT_FS2 RISCV_CONTEXT_F( 2 ) +#define RISCV_CONTEXT_FS3 RISCV_CONTEXT_F( 3 ) +#define RISCV_CONTEXT_FS4 RISCV_CONTEXT_F( 4 ) +#define RISCV_CONTEXT_FS5 RISCV_CONTEXT_F( 5 ) +#define RISCV_CONTEXT_FS6 RISCV_CONTEXT_F( 6 ) +#define RISCV_CONTEXT_FS7 RISCV_CONTEXT_F( 7 ) +#define RISCV_CONTEXT_FS8 RISCV_CONTEXT_F( 8 ) +#define RISCV_CONTEXT_FS9 RISCV_CONTEXT_F( 9 ) +#define RISCV_CONTEXT_FS10 RISCV_CONTEXT_F( 10 ) +#define RISCV_CONTEXT_FS11 RISCV_CONTEXT_F( 11 ) + +#define RISCV_INTERRUPT_FRAME_FT0 RISCV_INTERRUPT_FRAME_F( 0 ) +#define RISCV_INTERRUPT_FRAME_FT1 RISCV_INTERRUPT_FRAME_F( 1 ) +#define RISCV_INTERRUPT_FRAME_FT2 RISCV_INTERRUPT_FRAME_F( 2 ) +#define RISCV_INTERRUPT_FRAME_FT3 RISCV_INTERRUPT_FRAME_F( 3 ) +#define RISCV_INTERRUPT_FRAME_FT4 RISCV_INTERRUPT_FRAME_F( 4 ) +#define RISCV_INTERRUPT_FRAME_FT5 RISCV_INTERRUPT_FRAME_F( 5 ) +#define RISCV_INTERRUPT_FRAME_FT6 RISCV_INTERRUPT_FRAME_F( 6 ) +#define RISCV_INTERRUPT_FRAME_FT7 RISCV_INTERRUPT_FRAME_F( 7 ) +#define RISCV_INTERRUPT_FRAME_FT8 RISCV_INTERRUPT_FRAME_F( 8 ) +#define RISCV_INTERRUPT_FRAME_FT9 RISCV_INTERRUPT_FRAME_F( 9 ) +#define RISCV_INTERRUPT_FRAME_FT10 RISCV_INTERRUPT_FRAME_F( 10 ) +#define RISCV_INTERRUPT_FRAME_FT11 RISCV_INTERRUPT_FRAME_F( 11 ) +#define RISCV_INTERRUPT_FRAME_FA0 RISCV_INTERRUPT_FRAME_F( 12 ) +#define RISCV_INTERRUPT_FRAME_FA1 RISCV_INTERRUPT_FRAME_F( 13 ) +#define RISCV_INTERRUPT_FRAME_FA2 RISCV_INTERRUPT_FRAME_F( 14 ) +#define RISCV_INTERRUPT_FRAME_FA3 RISCV_INTERRUPT_FRAME_F( 15 ) +#define RISCV_INTERRUPT_FRAME_FA4 RISCV_INTERRUPT_FRAME_F( 16 ) +#define RISCV_INTERRUPT_FRAME_FA5 RISCV_INTERRUPT_FRAME_F( 17 ) +#define RISCV_INTERRUPT_FRAME_FA6 RISCV_INTERRUPT_FRAME_F( 18 ) +#define RISCV_INTERRUPT_FRAME_FA7 RISCV_INTERRUPT_FRAME_F( 19 ) + +#endif /* __riscv_flen */ + #ifndef ASM #ifdef __cplusplus @@ -151,6 +259,29 @@ typedef struct { uintptr_t t4; uintptr_t t5; uintptr_t t6; +#if __riscv_flen > 0 + uint32_t fcsr; + RISCV_Float ft0; + RISCV_Float ft1; + RISCV_Float ft2; + RISCV_Float ft3; + RISCV_Float ft4; + RISCV_Float ft5; + RISCV_Float ft6; + RISCV_Float ft7; + RISCV_Float ft8; + RISCV_Float ft9; + RISCV_Float ft10; + RISCV_Float ft11; + RISCV_Float fa0; + RISCV_Float fa1; + RISCV_Float fa2; + RISCV_Float fa3; + RISCV_Float fa4; + RISCV_Float fa5; + RISCV_Float fa6; + RISCV_Float fa7; +#endif uintptr_t a0; uintptr_t a1; } RTEMS_ALIGNED( CPU_STACK_ALIGNMENT ) CPU_Interrupt_frame; |