Lines Matching full:a0

28  *   a0:	trashed, original value saved on stack (PT_AREG0)
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
165 * number of registers a fast handler has saved (excluding a0 and a1) must
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
227 xsr a0, depc # get DEPC, save a0
230 _bltu a0, a2, .Lfixup
232 _bgeu a0, a2, .Lfixup
240 bbci.l a0, 6, _DoubleExceptionVector_WindowOverflow
245 * depc = orig a0,
246 * a0 = orig DEPC,
255 * by changing depc (in a0).
256 * Note: We can trash the current window frame (a0...a3) and depc!
261 rsr a0, ps
262 extui a0, a0, PS_OWB_SHIFT, PS_OWB_WIDTH
263 wsr a0, windowbase
269 s32i a0, a2, PT_AREG0
271 rsr a0, exccause
272 s32i a0, a2, PT_DEPC # mark it as a regular exception
273 addx4 a0, a0, a3
275 l32i a0, a0, EXC_TABLE_FAST_USER
276 jx a0
286 .Lksp: /* a0: a0, a1: a1, a2: a2, a3: trashed, depc: depc, excsave: a3 */
304 xsr a0, depc
308 wsr a0, excsave1
313 /* a0: depc, a1: a1, a2: trash, a3: exctable, depc: a0, excsave1: a3 */
322 /* a0: depc, a1: a1, a2: trash, a3: exctable, depc: a0, excsave: a3 */
331 /* a0: depc, a1: a1, a2: kstk, a3: exctable, depc: a0, excsave: a3 */
333 s32i a0, a2, PT_DEPC
334 l32i a0, a3, EXC_TABLE_DOUBLE_SAVE
335 xsr a0, depc
336 s32i a0, a2, PT_AREG0
338 /* a0: avail, a1: a1, a2: kstk, a3: exctable, depc: a2, excsave: a3 */
340 rsr a0, exccause
341 addx4 a0, a0, a3
343 l32i a0, a0, EXC_TABLE_FAST_USER
344 jx a0
349 * depc = orig a0,
350 * a0 = orig DEPC,
359 * by changing DEPC (in a0).
361 * NOTE: We CANNOT trash the current window frame (a0...a3), but we
365 * save a0, then clobber a0. To restart the handler, we have to restore
366 * a0 if the double exception was past the point where a0 was clobbered.
369 * handlers save a0 in their very first instruction. If DEPC was past
370 * that instruction, we can safely restore a0 from where it was saved
373 * a0: depc, a1: a1, a2: kstk, a3: exc_table, depc: a0, excsave1: a3
376 extui a2, a0, 0, 6 # get offset into 64-byte vector handler
379 addi a0, a0, -128
380 bbsi.l a0, 8, 1f # don't restore except for overflow 8 and 12
384 * overflow handler's reference thru a0 gets a hardware TLB refill
394 bbsi.l a0, 7, 2f
397 * Restore a0 as saved by _WindowOverflow8().
400 l32e a0, a9, -16
401 wsr a0, depc # replace the saved a0
406 * Restore a0 as saved by _WindowOverflow12().
409 l32e a0, a13, -16
410 wsr a0, depc # replace the saved a0
413 movi a0, 0
414 s32i a0, a3, EXC_TABLE_FIXUP
426 rsr a0, ps
427 extui a0, a0, PS_OWB_SHIFT, PS_OWB_WIDTH
429 sub a0, a2, a0
430 extui a0, a0, 0, 3
434 beqi a0, 1, .L1pane
435 beqi a0, 3, .L3pane
437 rsr a0, depc
452 s32i a0, a2, PT_AREG0
453 rsr a0, exccause
455 s32i a0, a2, PT_DEPC
458 addi a0, a0, -EXCCAUSE_UNALIGNED
459 beqz a0, 2f
460 addx4 a0, a0, a3
461 l32i a0, a0, EXC_TABLE_FAST_USER + 4 * EXCCAUSE_UNALIGNED
463 jx a0
465 movi a0, user_exception
467 jx a0
470 rsr a0, depc
475 rsr a0, depc
484 * a0 trashed. a0 bit 7 determines if this is a call8 (bit clear) or call12
488 * - go to the original window retaining a0 value;
489 * - set up exception stack to return back to appropriate a0 restore code
495 * - reload a0;
503 * a0: value of depc, original value in depc
513 rsr a0, ps
514 extui a0, a0, PS_OWB_SHIFT, PS_OWB_WIDTH
516 sub a0, a2, a0
517 extui a0, a0, 0, 3
521 _beqi a0, 1, .Lhandle_1
522 _beqi a0, 3, .Lhandle_3
526 rsr a0, depc
532 s32i a0, a2, PT_AREG0
534 movi a0, .Lrestore_\n
535 s32i a0, a2, PT_DEPC
536 rsr a0, exccause
550 /* Need to preserve a0 value here to be able to handle exception
551 * that may occur on a0 reload from stack. It may occur because
562 bbsi.l a0, 7, 1f
563 l32e a0, a9, -16
566 l32e a0, a13, -16
605 s32i a0, a3, DT_DEBUG_SAVE
606 l32i a0, a3, DT_DEBUG_EXCEPTION
607 jx a0
631 wsr a0, excsave2
632 rsr a0, epc\level
633 wsr a0, epc1
635 movi a0, EXCCAUSE_LEVEL1_INTERRUPT
637 movi a0, EXCCAUSE_MAPPED_NMI
639 wsr a0, exccause
640 rsr a0, eps\level
675 s32e a0, a5, -16
688 * On entry here, a0 contains PS, and EPC2 contains saved a0:
692 addi a0, a0, (1 << PS_EXCM_BIT)
694 wsr a0, ps
696 bbsi.l a0, PS_UM_BIT, 1f # branch if user mode
697 xsr a0, excsave2 # restore a0
699 1: xsr a0, excsave2 # restore a0
708 l32e a0, a5, -16
720 s32e a0, a9, -16
721 l32e a0, a1, -12
725 s32e a4, a0, -32
726 s32e a5, a0, -28
727 s32e a6, a0, -24
728 s32e a7, a0, -20
738 l32e a0, a9, -16
754 s32e a0, a13, -16
755 l32e a0, a1, -12
759 s32e a4, a0, -48
760 s32e a5, a0, -44
761 s32e a6, a0, -40
762 s32e a7, a0, -36
763 s32e a8, a0, -32
764 s32e a9, a0, -28
765 s32e a10, a0, -24
766 s32e a11, a0, -20
776 l32e a0, a13, -16