Lines Matching +full:1 +full:a0

28  *   a0:	trashed, original value saved on stack (PT_AREG0)
60 * User exception vector. (Exceptions with PS.UM == 1, PS.EXCM == 0)
77 s32i a0, a2, PT_AREG0 # save a0 to ESF
78 rsr a0, exccause # retrieve exception cause
79 s32i a0, a2, PT_DEPC # mark it as a regular exception
80 addx4 a0, a0, a3 # find entry in table
81 l32i a0, a0, EXC_TABLE_FAST_USER # load handler
83 jx a0
104 s32i a0, a2, PT_AREG0 # save a0 to ESF
105 rsr a0, exccause # retrieve exception cause
106 s32i a0, a2, PT_DEPC # mark it as a regular exception
107 addx4 a0, a0, a3 # find entry in table
108 l32i a0, a0, EXC_TABLE_FAST_KERNEL # load handler address
110 jx a0
115 * Double exception vector (Exceptions with PS.EXCM == 1)
121 * Note that this vector is never invoked for level-1 interrupts, because such
165 * number of registers a fast handler has saved (excluding a0 and a1) must
166 * be written to PT_AREG1. (1 if only a3 is used, 2 for a3 and a4, etc. )
172 * a0: DEPC
176 * depc: a0
196 * All registers a0...a15 are unchanged from the last exception, except:
198 * a0: last address before we jumped to the unrecoverable_exception.
199 * excsave_1: a0
218 _bbsi.l a2, PS_UM_BIT, 1f
223 1:
227 xsr a0, depc # get DEPC, save a0
231 _bltu a0, a2, .Lfixup
233 _bgeu a0, a2, .Lfixup
241 bbci.l a0, 6, _DoubleExceptionVector_WindowOverflow
246 * depc = orig a0,
247 * a0 = orig DEPC,
256 * by changing depc (in a0).
257 * Note: We can trash the current window frame (a0...a3) and depc!
262 rsr a0, ps
263 extui a0, a0, PS_OWB_SHIFT, PS_OWB_WIDTH
264 wsr a0, windowbase
270 s32i a0, a2, PT_AREG0
272 rsr a0, exccause
273 s32i a0, a2, PT_DEPC # mark it as a regular exception
274 addx4 a0, a0, a3
276 l32i a0, a0, EXC_TABLE_FAST_USER
277 jx a0
291 .Lksp: /* a0: a0, a1: a1, a2: a2, a3: trashed, depc: depc, excsave: a3 */
294 beqi a3, EXCCAUSE_ITLB_MISS, 1f
297 1: movi a3, fast_second_level_miss_double_kernel
309 xsr a0, depc
313 wsr a0, excsave1
318 /* a0: depc, a1: a1, a2: trash, a3: exctable, depc: a0, excsave1: a3 */
327 /* a0: depc, a1: a1, a2: trash, a3: exctable, depc: a0, excsave: a3 */
336 /* a0: depc, a1: a1, a2: kstk, a3: exctable, depc: a0, excsave: a3 */
338 s32i a0, a2, PT_DEPC
339 l32i a0, a3, EXC_TABLE_DOUBLE_SAVE
340 xsr a0, depc
341 s32i a0, a2, PT_AREG0
343 /* a0: avail, a1: a1, a2: kstk, a3: exctable, depc: a2, excsave: a3 */
345 rsr a0, exccause
346 addx4 a0, a0, a3
348 l32i a0, a0, EXC_TABLE_FAST_USER
349 jx a0
355 * depc = orig a0,
356 * a0 = orig DEPC,
365 * by changing DEPC (in a0).
367 * NOTE: We CANNOT trash the current window frame (a0...a3), but we
371 * save a0, then clobber a0. To restart the handler, we have to restore
372 * a0 if the double exception was past the point where a0 was clobbered.
375 * handlers save a0 in their very first instruction. If DEPC was past
376 * that instruction, we can safely restore a0 from where it was saved
379 * a0: depc, a1: a1, a2: kstk, a3: exc_table, depc: a0, excsave1: a3
382 extui a2, a0, 0, 6 # get offset into 64-byte vector handler
383 beqz a2, 1f # if at start of vector, don't restore
385 addi a0, a0, -128
386 bbsi.l a0, 8, 1f # don't restore except for overflow 8 and 12
390 * overflow handler's reference thru a0 gets a hardware TLB refill
400 bbsi.l a0, 7, 2f
403 * Restore a0 as saved by _WindowOverflow8().
406 l32e a0, a9, -16
407 wsr a0, depc # replace the saved a0
412 * Restore a0 as saved by _WindowOverflow12().
415 l32e a0, a13, -16
416 wsr a0, depc # replace the saved a0
419 movi a0, 0
420 s32i a0, a3, EXC_TABLE_FIXUP
422 1:
432 rsr a0, ps
433 extui a0, a0, PS_OWB_SHIFT, PS_OWB_WIDTH
435 sub a0, a2, a0
436 extui a0, a0, 0, 3
440 beqi a0, 1, .L1pane
441 beqi a0, 3, .L3pane
443 rsr a0, depc
454 1:
458 s32i a0, a2, PT_AREG0
459 rsr a0, exccause
461 s32i a0, a2, PT_DEPC
464 addi a0, a0, -EXCCAUSE_UNALIGNED
465 beqz a0, 2f
466 addx4 a0, a0, a3
467 l32i a0, a0, EXC_TABLE_FAST_USER + 4 * EXCCAUSE_UNALIGNED
469 jx a0
471 movi a0, user_exception
473 jx a0
476 rsr a0, depc
477 rotw -1
478 j 1b
481 rsr a0, depc
483 j 1b
493 * a0 trashed. a0 bit 7 determines if this is a call8 (bit clear) or call12
497 * - go to the original window retaining a0 value;
498 * - set up exception stack to return back to appropriate a0 restore code
504 * - reload a0;
512 * a0: value of depc, original value in depc
522 rsr a0, ps
523 extui a0, a0, PS_OWB_SHIFT, PS_OWB_WIDTH
525 sub a0, a2, a0
526 extui a0, a0, 0, 3
530 _beqi a0, 1, .Lhandle_1
531 _beqi a0, 3, .Lhandle_3
535 rsr a0, depc
541 s32i a0, a2, PT_AREG0
543 movi a0, .Lrestore_\n
544 s32i a0, a2, PT_DEPC
545 rsr a0, exccause
552 overflow_fixup_handle_exception_pane 1
559 /* Need to preserve a0 value here to be able to handle exception
560 * that may occur on a0 reload from stack. It may occur because
571 bbsi.l a0, 7, 1f
572 l32e a0, a9, -16
574 1:
575 l32e a0, a13, -16
594 overflow_fixup_restore_a0_pane 1
616 s32i a0, a3, DT_DEBUG_SAVE
617 l32i a0, a3, DT_DEBUG_EXCEPTION
618 jx a0
642 wsr a0, excsave2
643 rsr a0, epc\level
644 wsr a0, epc1
646 movi a0, EXCCAUSE_LEVEL1_INTERRUPT
648 movi a0, EXCCAUSE_MAPPED_NMI
650 wsr a0, exccause
651 rsr a0, eps\level
667 * On entry here, a0 contains PS, and EPC2 contains saved a0:
672 addi a0, a0, (1 << PS_EXCM_BIT)
674 wsr a0, ps
676 bbsi.l a0, PS_UM_BIT, 1f # branch if user mode
677 xsr a0, excsave2 # restore a0
679 1: xsr a0, excsave2 # restore a0
707 s32e a0, a5, -16
719 l32e a0, a5, -16
731 s32e a0, a9, -16
732 l32e a0, a1, -12
736 s32e a4, a0, -32
737 s32e a5, a0, -28
738 s32e a6, a0, -24
739 s32e a7, a0, -20
749 l32e a0, a9, -16
765 s32e a0, a13, -16
766 l32e a0, a1, -12
770 s32e a4, a0, -48
771 s32e a5, a0, -44
772 s32e a6, a0, -40
773 s32e a7, a0, -36
774 s32e a8, a0, -32
775 s32e a9, a0, -28
776 s32e a10, a0, -24
777 s32e a11, a0, -20
787 l32e a0, a13, -16