|
78 | 78 |
|
79 | 79 | .set TRAP_ID_ABORT , 2 |
80 | 80 | .set TRAP_ID_DEBUGTRAP , 3 |
| 81 | +.set TTMP1_SCHED_MODE_MASK , 0xC000000 |
81 | 82 | .set TTMP6_SAVED_STATUS_HALT_MASK , (1 << TTMP6_SAVED_STATUS_HALT_SHIFT) |
82 | 83 | .set TTMP6_SAVED_STATUS_HALT_SHIFT , 29 |
83 | 84 | .set TTMP6_SAVED_TRAP_ID_BFE , (TTMP6_SAVED_TRAP_ID_SHIFT | (TTMP6_SAVED_TRAP_ID_SIZE << 16)) |
|
87 | 88 | .set TTMP6_WAVE_STOPPED_SHIFT , 30 |
88 | 89 | .set TTMP8_DEBUG_FLAG_SHIFT , 31 |
89 | 90 | .set TTMP11_DEBUG_ENABLED_SHIFT , 23 |
| 91 | +.set TTMP11_SCHED_MODE_SHIFT , 26 |
| 92 | +.set TTMP11_SCHED_MODE_SIZE , 2 |
| 93 | +.set TTMP11_SCHED_MODE_MASK , 0xC000000 |
| 94 | +.set TTMP11_SCHED_MODE_BFE , (TTMP11_SCHED_MODE_SHIFT | (TTMP11_SCHED_MODE_SIZE << 16)) |
90 | 95 | .set TTMP_PC_HI_SHIFT , 7 |
91 | 96 |
|
92 | 97 | .set TTMP13_HT_FLAG_BIT , 22 // TTMP13 bit for host‑trap |
|
200 | 205 |
|
201 | 206 | // ABI (Application Binary Interface) between first and second-level trap handler: |
202 | 207 | // ttmp0: PC_LO[31:0] (Program Counter Low) |
203 | | -// ttmp1: PC_HI[15:0] (Program Counter High, bits 0-15), TrapID[3:0] (in bits 28-31 of original PC_HI) |
204 | | -// ttmp11: 0[7:0], DebugEnabled[0], 0[15:0], NoScratch[0], 0[5:0] |
| 208 | +// ttmp1: TrapID[3:0], SCHED_MODE[1:0], 0[9:0], PC_HI[15:0] |
| 209 | +// ttmp11: ?[7:0], DebugEnabled[0], PRESERVED[15:0], ?[6:0] |
205 | 210 | // ttmp12: SQ_WAVE_STATE_PRIV (Private wave state register value). |
206 | 211 | // ttmp14: TMA[31:0] - TMA_LO (Trap Memory Argument Low - base address for trap handler data, low 32 bits). |
207 | 212 | // ttmp15: TTMA[63:32] - TMA_HI (Trap Memory Argument High - base address for trap handler data, high 32 bits). |
208 | 213 | // For PC Sampling, this points to pcs_hosttrap_data_ or pcs_stochastic_data_ |
209 | 214 | trap_entry: |
210 | | - |
| 215 | + // Save SCHED_MODE from ttmp1[27:26] into ttmp11[27:26]. We will restore it on exit |
| 216 | + s_andn2_b32 ttmp11, ttmp11, TTMP11_SCHED_MODE_MASK |
| 217 | + s_and_b32 ttmp2, ttmp1, TTMP1_SCHED_MODE_MASK |
| 218 | + s_or_b32 ttmp11, ttmp2, TTMP1_SCHED_MODE_MASK |
211 | 219 | s_mov_b32 ttmp3, 0 |
212 | 220 |
|
213 | 221 | .check_hosttrap: |
|
840 | 848 | s_mov_b64 exec, ttmp[10:11] // restore exec mask |
841 | 849 |
|
842 | 850 | .exit_trap: |
| 851 | + // Restore ttmp11[27:26] into SCHED_MODE[0:1] |
| 852 | + s_bfe_u32 ttmp2, ttmp11, TTMP11_SCHED_MODE_BFE |
| 853 | + s_setreg_b32 hwreg(HW_REG_WAVE_SCHED_MODE), ttmp2 |
| 854 | + |
843 | 855 | // Restore SQ_WAVE_STATUS. |
844 | 856 | s_and_b64 exec, exec, exec // Restore STATUS.EXECZ, not writable by s_setreg_b32 |
845 | 857 | s_and_b64 vcc, vcc, vcc // Restore STATUS.VCCZ, not writable by s_setreg_b32 |
|
0 commit comments