Lines Matching full:a2

113  *   a2:	new stack pointer, original value in depc
115 * depc: a2, original value saved on stack (PT_DEPC)
133 /* Save a1, a2, a3, and set SP. */
136 s32i a1, a2, PT_AREG1
137 s32i a0, a2, PT_AREG2
138 s32i a3, a2, PT_AREG3
139 mov a1, a2
146 movi a2, 0
147 wsr a2, depc # terminate user stack trace with 0
149 xsr a2, icountlevel
151 s32i a2, a1, PT_ICOUNTLEVEL
154 rur a2, threadptr
155 s32i a2, a1, PT_THREADPTR
159 /* Assume ws = xxwww1yyyy. Rotate ws right, so that a2 = yyyyxxwww1 */
161 rsr a2, windowbase
163 ssr a2
164 s32i a2, a1, PT_WINDOWBASE
166 slli a2, a3, 32-WSBITS
167 src a2, a3, a2
168 srli a2, a2, 32-WSBITS
169 s32i a2, a1, PT_WMASK # needed for restoring registers
173 _bbsi.l a2, 1, 1f
178 _bbsi.l a2, 2, 1f
183 _bbsi.l a2, 3, 1f
188 _bnei a2, 1, 1f # only one valid frame?
197 * Assume a2 is: 001001000110001
202 1: addi a3, a2, -1 # eliminate '1' in bit 0: yyyyxxww0
204 and a3, a3, a2 # max. only one bit is set
216 extui a2, a2, 0, 4 # mask for the first 16 registers
217 or a2, a3, a2
218 s32i a2, a1, PT_WMASK # needed when we restore the reg-file
225 s32i a2, a5, PT_AREG_END - 8
233 rsr a2, sar # original WINDOWBASE
235 ssl a2
238 wsr a2, windowbase # and WINDOWSTART
260 * a2: new stack pointer, original in DEPC
262 * depc: a2, original value saved on stack (PT_DEPC)
279 /* Save a1, a2, a3, and set SP. */
281 rsr a0, depc # get a2
282 s32i a1, a2, PT_AREG1
283 s32i a0, a2, PT_AREG2
284 s32i a3, a2, PT_AREG3
285 mov a1, a2
292 movi a2, 0
294 xsr a2, icountlevel
296 s32i a2, a1, PT_ICOUNTLEVEL
299 /* Assume ws = xxwww1yyyy. Rotate ws right, so that a2 = yyyyxxwww1 */
301 rsr a2, windowbase # don't need to save these, we only
303 ssr a2
304 slli a2, a3, 32-WSBITS
305 src a2, a3, a2
306 srli a2, a2, 32-WSBITS
307 s32i a2, a1, PT_WMASK # needed for kernel_exception_exit
311 _bbsi.l a2, 1, 1f
316 _bbsi.l a2, 2, 1f
321 _bbsi.l a2, 3, 1f
327 _bnei a2, 1, 1f
343 extui a2, a1, TASK_SIZE_BITS,XX
345 _bge a2, a3, out_of_stack_panic
362 rsr a2, debugcause
364 s32i a2, a1, PT_DEBUGCAUSE
367 movi a2, NO_SYSCALL
369 s32i a2, a1, PT_SYSCALL
370 movi a2, 0
373 xsr a2, lcount
374 s32i a2, a1, PT_LCOUNT
384 rsr a2, exccause
387 s32i a2, a1, PT_EXCCAUSE
409 beq a2, a0, .Lmedium_level_irq
410 bnei a2, EXCCAUSE_LEVEL1_INTERRUPT, .Lexception
425 addi a2, a2, -EXCCAUSE_LEVEL1_INTERRUPT
429 moveqz a3, a0, a2 # a3 = LOCKLEVEL iff interrupt
430 movi a2, PS_WOE_MASK
431 or a3, a3, a2
432 rsr a2, exccause
465 mov a7, a2 # pass EXCCAUSE
466 addx4 a4, a2, a4
478 l32i a2, a1, PT_EXCCAUSE
480 beq a2, a3, .LNMIexit
483 irq_save a2, a3
491 GET_THREAD_INFO(a2, a1)
492 l32i a4, a2, TI_FLAGS
514 rsil a2, 0
524 rsil a2, 0
534 l32i a4, a2, TI_PRE_COUNT
567 load_xtregs_opt a1 a2 a4 a5 a6 a7 PT_XTREGS_OPT
572 l32i a2, a1, PT_SCOMPARE1
573 wsr a2, scompare1
585 l32i a2, a1, PT_WINDOWBASE
589 ssr a2 # preserve user's WB in the SAR
590 wsr a2, windowbase # switch to user's saved WB
593 l32i a2, a1, PT_WMASK # register frames saved (in bits 4...9)
604 mov a2, a6
609 addi a2, a6, -16 # decrementing Y in WMASK
614 _bgeui a2, 16, 2b
633 * Note: a2 still contains WMASK (if we've returned to the original
634 * frame where we had loaded a2), or at least the lower 4 bits
677 l32i a2, a1, PT_WMASK
678 _beqi a2, 1, common_exception_exit # Spilled before exception,jump
703 * Note: We expect a2 to hold PT_WMASK
710 _bbsi.l a2, 1, 1f
715 _bbsi.l a2, 2, 1f
720 _bbsi.l a2, 3, 1f
728 1: l32i a2, a1, PT_PC
730 wsr a2, epc1
735 l32i a2, a1, PT_LBEG
737 wsr a2, lbeg
738 l32i a2, a1, PT_LCOUNT
740 wsr a2, lcount
745 l32i a2, a1, PT_ICOUNTLEVEL
747 wsr a2, icountlevel
754 l32i a2, a1, PT_AREG2
787 wsr a2, depc # save a2 temporarily
788 rsr a2, SREG_EPC + XCHAL_DEBUGLEVEL
789 wsr a2, epc1
791 movi a2, EXCCAUSE_MAPPED_DEBUG
792 wsr a2, exccause
796 movi a2, 1 << PS_EXCM_BIT
797 or a2, a0, a2
798 wsr a2, ps
802 bbsi.l a2, PS_UM_BIT, 2f # jump if user mode
804 addi a2, a1, -16-PT_SIZE # assume kernel stack
807 s32i a1, a2, PT_AREG1
808 s32i a0, a2, PT_AREG0
810 s32i a0, a2, PT_DEPC # mark it as a regular exception
813 s32i a3, a2, PT_AREG3
814 s32i a0, a2, PT_AREG2
815 mov a1, a2
823 GET_THREAD_INFO(a2, a1)
824 l32i a3, a2, TI_PRE_COUNT
826 s32i a3, a2, TI_PRE_COUNT
829 rsr a2, ps
830 bbsi.l a2, PS_UM_BIT, _user_exception
833 2: rsr a2, excsave1
834 l32i a2, a2, EXC_TABLE_KSTK # load kernel stack pointer
904 * - a2 contains a valid stackpointer
981 * a2: new stack pointer, original in DEPC
983 * depc: a2, original value saved on stack (PT_DEPC)
993 rsr a2, ps
994 extui a3, a2, PS_OWB_SHIFT, PS_OWB_WIDTH
1001 xor a2, a2, a3
1002 wsr a2, ps
1026 * a2: new stack pointer, original in DEPC
1028 * depc: a2, original value saved on stack (PT_DEPC)
1036 s32i a3, a2, PT_AREG3
1040 l32i a3, a2, PT_AREG3
1041 l32i a0, a2, PT_AREG0
1042 rsr a2, depc
1063 * a2: new stack pointer, original in DEPC
1065 * depc: a2, original value saved on stack (PT_DEPC)
1077 l32i a0, a2, PT_DEPC
1092 l32i a0, a2, PT_AREG0 # restore a0
1093 xsr a2, depc # restore a2, depc
1107 * a2 a6 a3 a4 a5
1111 * a0: a2 (syscall-nr), original value saved on stack (PT_AREG0)
1113 * a2: new stack pointer, original in a0 and DEPC
1116 * depc: a2, original value saved on stack (PT_DEPC)
1122 * Note: we don't have to save a2; a2 holds the return value
1131 s32i a7, a2, PT_AREG7 # we need an additional register
1133 access_ok a3, a7, a0, a2, .Leac # a0: scratch reg, a2: sp
1145 l32i a7, a2, PT_AREG7 # restore a7
1146 l32i a0, a2, PT_AREG0 # restore a0
1147 movi a2, 1 # and return 1
1150 1: l32i a7, a2, PT_AREG7 # restore a7
1151 l32i a0, a2, PT_AREG0 # restore a0
1152 movi a2, 0 # return 0 (note that we cannot set
1164 mov a0, a2
1165 mov a2, a7
1170 .Leac: l32i a7, a2, PT_AREG7 # restore a7
1171 l32i a0, a2, PT_AREG0 # restore a0
1172 movi a2, -EFAULT
1175 .Lill: l32i a7, a2, PT_AREG7 # restore a7
1176 l32i a0, a2, PT_AREG0 # restore a0
1177 movi a2, -EINVAL
1186 l32i a0, a2, PT_AREG0 # restore a0
1187 movi a2, -ENOSYS
1201 * a2: new stack pointer, original in DEPC
1203 * depc: a2, original value saved on stack (PT_DEPC)
1225 s32i a3, a2, PT_AREG3
1226 s32i a0, a2, PT_SAR
1230 s32i a4, a2, PT_AREG4
1231 s32i a7, a2, PT_AREG7
1232 s32i a8, a2, PT_AREG8
1233 s32i a11, a2, PT_AREG11
1234 s32i a12, a2, PT_AREG12
1235 s32i a15, a2, PT_AREG15
1370 l32i a3, a2, PT_SAR
1371 l32i a0, a2, PT_AREG0
1373 l32i a3, a2, PT_AREG3
1377 l32i a4, a2, PT_AREG4
1378 l32i a7, a2, PT_AREG7
1379 l32i a8, a2, PT_AREG8
1380 l32i a11, a2, PT_AREG11
1381 l32i a12, a2, PT_AREG12
1382 l32i a15, a2, PT_AREG15
1384 movi a2, 0
1436 * a2: trashed, original value in EXC_TABLE_DOUBLE_SAVE
1442 rsr a2, windowbase # get current windowbase (a2 is saved)
1444 ssl a2 # set shift (32 - WB)
1459 slli a2, a3, 32-WSBITS
1460 src a2, a3, a2 # a2 = xxwww1yyxxxwww1yy......
1461 wsr a2, windowstart # set corrected windowstart
1464 rsr a2, excsave1
1465 l32i a2, a2, EXC_TABLE_DOUBLE_SAVE # restore a2
1466 xsr a2, excsave1
1467 s32i a3, a2, EXC_TABLE_DOUBLE_SAVE # save a3
1468 l32i a3, a2, EXC_TABLE_PARAM # original WB (in user task)
1469 xsr a2, excsave1
1473 * a0, a1, a2 same
1485 * a2: kernel stack pointer
1494 addi a2, a2, -PT_USER_SIZE
1495 s32i a0, a2, PT_AREG0
1500 s32i a3, a2, PT_DEPC # setup depc
1515 /* When we return here, all registers have been restored (a2: DEPC) */
1517 wsr a2, depc # exception address
1521 rsr a2, excsave1
1522 s32i a3, a2, EXC_TABLE_DOUBLE_SAVE
1524 s32i a3, a2, EXC_TABLE_FIXUP
1526 s32i a3, a2, EXC_TABLE_PARAM
1527 l32i a2, a2, EXC_TABLE_KSTK
1547 l32i a0, a2, PT_AREG0 # restore a0
1548 movi a2, -ENOSYS
1579 * a2: new stack pointer, original in DEPC
1581 * depc: a2, original value saved on stack (PT_DEPC)
1592 s32i a1, a2, PT_AREG1
1593 s32i a3, a2, PT_AREG3
1611 GET_CURRENT(a1,a2)
1672 l32i a0, a2, PT_AREG0
1673 l32i a1, a2, PT_AREG1
1674 l32i a3, a2, PT_AREG3
1675 l32i a2, a2, PT_DEPC
1677 bgeui a2, VALID_DOUBLE_EXCEPTION_ADDRESS, 1f
1681 rsr a2, depc
1686 1: xsr a2, depc
1711 l32i a0, a2, PT_DEPC
1770 s32i a1, a2, PT_AREG2
1771 mov a1, a2
1773 rsr a2, ps
1774 bbsi.l a2, PS_UM_BIT, 1f
1789 * a2: new stack pointer, original in DEPC
1791 * depc: a2, original value saved on stack (PT_DEPC)
1802 s32i a1, a2, PT_AREG1
1803 s32i a3, a2, PT_AREG3
1805 GET_CURRENT(a1,a2)
1845 l32i a3, a2, PT_AREG3
1846 l32i a1, a2, PT_AREG1
1847 l32i a0, a2, PT_AREG0
1848 l32i a2, a2, PT_DEPC
1850 bgeui a2, VALID_DOUBLE_EXCEPTION_ADDRESS, 1f
1852 rsr a2, depc
1857 1: xsr a2, depc
1866 rsr a3, depc # still holds a2
1867 s32i a3, a2, PT_AREG2
1868 mov a1, a2
1870 rsr a2, ps
1871 bbsi.l a2, PS_UM_BIT, 1f
1884 * a2 a3
1894 l32i a7, a2, PT_AREG2
1895 s32i a7, a2, PT_SYSCALL
1903 mov a6, a2
1906 l32i a7, a2, PT_SYSCALL
1921 l32i a6, a2, PT_AREG6
1922 l32i a7, a2, PT_AREG3
1923 l32i a8, a2, PT_AREG4
1924 l32i a9, a2, PT_AREG5
1925 l32i a10, a2, PT_AREG8
1926 l32i a11, a2, PT_AREG9
1932 s32i a6, a2, PT_AREG2
1938 mov a6, a2
1986 * a2 a2 a3
1995 l32i a4, a2, TASK_THREAD_INFO
2001 addi a10, a2, TASK_THREAD
2005 s32i a0, a2, THREAD_RA # save return address
2006 s32i a1, a2, THREAD_SP # save stack pointer
2078 * On entry, set up by copy_thread: a2 = thread_fn, a3 = thread_fn arg
2085 callx4 a2