|
48 | 48 | #ifndef TX_PORT_H |
49 | 49 | #define TX_PORT_H |
50 | 50 |
|
51 | | -#ifndef __ASSEMBLER__ |
| 51 | +#ifdef __ASSEMBLER__ |
| 52 | + |
| 53 | + |
| 54 | +#if __riscv_xlen == 64 |
| 55 | +# define SLL32 sllw |
| 56 | +# define STORE sd |
| 57 | +# define LOAD ld |
| 58 | +# define LWU lwu |
| 59 | +# define LOG_REGBYTES 3 |
| 60 | +#else |
| 61 | +# define SLL32 sll |
| 62 | +# define STORE sw |
| 63 | +# define LOAD lw |
| 64 | +# define LWU lw |
| 65 | +# define LOG_REGBYTES 2 |
| 66 | +#endif |
| 67 | +#define REGBYTES (1 << LOG_REGBYTES) |
| 68 | + |
| 69 | +/* Define stack frame offsets for thread context save/restore. |
| 70 | + These offsets correspond to the layout used in tx_thread_context_save.S |
| 71 | + and tx_thread_context_restore.S. */ |
| 72 | + |
| 73 | +/* General Purpose Registers */ |
| 74 | +#define TX_STACK_OFFSET_X1 (28 * REGBYTES) /* ra */ |
| 75 | +#define TX_STACK_OFFSET_X5 (19 * REGBYTES) /* t0 */ |
| 76 | +#define TX_STACK_OFFSET_X6 (18 * REGBYTES) /* t1 */ |
| 77 | +#define TX_STACK_OFFSET_X7 (17 * REGBYTES) /* t2 */ |
| 78 | +#define TX_STACK_OFFSET_X8 (12 * REGBYTES) /* s0/fp */ |
| 79 | +#define TX_STACK_OFFSET_X9 (11 * REGBYTES) /* s1 */ |
| 80 | +#define TX_STACK_OFFSET_X10 (27 * REGBYTES) /* a0 */ |
| 81 | +#define TX_STACK_OFFSET_X11 (26 * REGBYTES) /* a1 */ |
| 82 | +#define TX_STACK_OFFSET_X12 (25 * REGBYTES) /* a2 */ |
| 83 | +#define TX_STACK_OFFSET_X13 (24 * REGBYTES) /* a3 */ |
| 84 | +#define TX_STACK_OFFSET_X14 (23 * REGBYTES) /* a4 */ |
| 85 | +#define TX_STACK_OFFSET_X15 (22 * REGBYTES) /* a5 */ |
| 86 | +#define TX_STACK_OFFSET_X16 (21 * REGBYTES) /* a6 */ |
| 87 | +#define TX_STACK_OFFSET_X17 (20 * REGBYTES) /* a7 */ |
| 88 | +#define TX_STACK_OFFSET_X18 (10 * REGBYTES) /* s2 */ |
| 89 | +#define TX_STACK_OFFSET_X19 (9 * REGBYTES) /* s3 */ |
| 90 | +#define TX_STACK_OFFSET_X20 (8 * REGBYTES) /* s4 */ |
| 91 | +#define TX_STACK_OFFSET_X21 (7 * REGBYTES) /* s5 */ |
| 92 | +#define TX_STACK_OFFSET_X22 (6 * REGBYTES) /* s6 */ |
| 93 | +#define TX_STACK_OFFSET_X23 (5 * REGBYTES) /* s7 */ |
| 94 | +#define TX_STACK_OFFSET_X24 (4 * REGBYTES) /* s8 */ |
| 95 | +#define TX_STACK_OFFSET_X25 (3 * REGBYTES) /* s9 */ |
| 96 | +#define TX_STACK_OFFSET_X26 (2 * REGBYTES) /* s10 */ |
| 97 | +#define TX_STACK_OFFSET_X27 (1 * REGBYTES) /* s11 */ |
| 98 | +#define TX_STACK_OFFSET_X28 (16 * REGBYTES) /* t3 */ |
| 99 | +#define TX_STACK_OFFSET_X29 (15 * REGBYTES) /* t4 */ |
| 100 | +#define TX_STACK_OFFSET_X30 (14 * REGBYTES) /* t5 */ |
| 101 | +#define TX_STACK_OFFSET_X31 (13 * REGBYTES) /* t6 */ |
| 102 | + |
| 103 | +/* Special Registers */ |
| 104 | +#define TX_STACK_OFFSET_MSTATUS (29 * REGBYTES) |
| 105 | +#define TX_STACK_OFFSET_MEPC (30 * REGBYTES) |
| 106 | +#define TX_STACK_OFFSET_FCSR (63 * REGBYTES) |
| 107 | + |
| 108 | +/* Stack Frame Offsets */ |
| 109 | +#define TX_STACK_OFFSET_TYPE (0 * REGBYTES) |
| 110 | + |
| 111 | +/* Floating Point Registers (F0-F31) */ |
| 112 | +/* Note: Base offset for FPU regs is 31 * REGBYTES */ |
| 113 | +/* Floating Point Registers (F0-F31) */ |
| 114 | +/* Note: Base offset for FPU regs is 31 * REGBYTES */ |
| 115 | +#define TX_STACK_OFFSET_F0 (31 * REGBYTES) |
| 116 | +#define TX_STACK_OFFSET_F1 (32 * REGBYTES) |
| 117 | +#define TX_STACK_OFFSET_F2 (33 * REGBYTES) |
| 118 | +#define TX_STACK_OFFSET_F3 (34 * REGBYTES) |
| 119 | +#define TX_STACK_OFFSET_F4 (35 * REGBYTES) |
| 120 | +#define TX_STACK_OFFSET_F5 (36 * REGBYTES) |
| 121 | +#define TX_STACK_OFFSET_F6 (37 * REGBYTES) |
| 122 | +#define TX_STACK_OFFSET_F7 (38 * REGBYTES) |
| 123 | +#define TX_STACK_OFFSET_F8 (39 * REGBYTES) |
| 124 | +#define TX_STACK_OFFSET_F9 (40 * REGBYTES) |
| 125 | +#define TX_STACK_OFFSET_F10 (41 * REGBYTES) |
| 126 | +#define TX_STACK_OFFSET_F11 (42 * REGBYTES) |
| 127 | +#define TX_STACK_OFFSET_F12 (43 * REGBYTES) |
| 128 | +#define TX_STACK_OFFSET_F13 (44 * REGBYTES) |
| 129 | +#define TX_STACK_OFFSET_F14 (45 * REGBYTES) |
| 130 | +#define TX_STACK_OFFSET_F15 (46 * REGBYTES) |
| 131 | +#define TX_STACK_OFFSET_F16 (47 * REGBYTES) |
| 132 | +#define TX_STACK_OFFSET_F17 (48 * REGBYTES) |
| 133 | +#define TX_STACK_OFFSET_F18 (49 * REGBYTES) |
| 134 | +#define TX_STACK_OFFSET_F19 (50 * REGBYTES) |
| 135 | +#define TX_STACK_OFFSET_F20 (51 * REGBYTES) |
| 136 | +#define TX_STACK_OFFSET_F21 (52 * REGBYTES) |
| 137 | +#define TX_STACK_OFFSET_F22 (53 * REGBYTES) |
| 138 | +#define TX_STACK_OFFSET_F23 (54 * REGBYTES) |
| 139 | +#define TX_STACK_OFFSET_F24 (55 * REGBYTES) |
| 140 | +#define TX_STACK_OFFSET_F25 (56 * REGBYTES) |
| 141 | +#define TX_STACK_OFFSET_F26 (57 * REGBYTES) |
| 142 | +#define TX_STACK_OFFSET_F27 (58 * REGBYTES) |
| 143 | +#define TX_STACK_OFFSET_F28 (59 * REGBYTES) |
| 144 | +#define TX_STACK_OFFSET_F29 (60 * REGBYTES) |
| 145 | +#define TX_STACK_OFFSET_F30 (61 * REGBYTES) |
| 146 | +#define TX_STACK_OFFSET_F31 (62 * REGBYTES) |
| 147 | + |
| 148 | +/* FCSR is stored after F31 */ |
| 149 | +/* FCSR is stored after F31 */ |
| 150 | +#define TX_STACK_OFFSET_FCSR (63 * REGBYTES) |
| 151 | + |
| 152 | +/* Thread Control Block (TX_THREAD) Offsets */ |
| 153 | +#define TX_THREAD_RUN_COUNT (1 * REGBYTES) |
| 154 | +#define TX_THREAD_STACK_PTR (2 * REGBYTES) |
| 155 | +#define TX_THREAD_STACK_END (4 * REGBYTES) |
| 156 | +#define TX_THREAD_TIME_SLICE (6 * REGBYTES) |
| 157 | + |
| 158 | +/* Stack Frame Sizes */ |
| 159 | +/* FPU Enabled: 65 Registers (x0-x31, f0-f31, fcsr) + Alignment */ |
| 160 | +#define TX_THREAD_FRAME_SIZE_FPU (65 * REGBYTES) |
| 161 | +/* FPU Disabled: 32 Registers (x0-x31) + Alignment */ |
| 162 | +#define TX_THREAD_FRAME_SIZE_INT (32 * REGBYTES) |
| 163 | + |
| 164 | + |
| 165 | +#else /*not __ASSEMBLER__ */ |
52 | 166 |
|
53 | 167 | /* Include for memset. */ |
54 | 168 | #include <string.h> |
|
0 commit comments