patch-2.1.2 linux/arch/alpha/kernel/head.S

Next file: linux/arch/alpha/kernel/lca.c
Previous file: linux/arch/alpha/kernel/entry.S
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.1/linux/arch/alpha/kernel/head.S linux/arch/alpha/kernel/head.S
@@ -125,3 +125,52 @@
 	lda	$30,0x10($30)
 	ret	($26)
 	.end	wrfpcr
+
+#define ex_count 0($16)
+#define ex_r9	 8($16)
+#define ex_r10	16($16)
+#define ex_r11	24($16)
+#define ex_r12	32($16)
+#define ex_r13	40($16)
+#define ex_r14	48($16)
+#define ex_r15	56($16)
+#define ex_r26	64($16)
+#define ex_r30	72($16)
+
+	.align 3
+	.globl	__exception
+	.ent	__exception
+__exception:
+	ldq	$1,ex_count
+	bis	$31,$31,$0	/* return 0 */
+	addq	$1,1,$2
+	bne	$1,1f		/* don't save state if orig_count != 0 */
+	stq	$9,ex_r9
+	stq	$10,ex_r10
+	stq	$11,ex_r11
+	stq	$12,ex_r12
+	stq	$13,ex_r13
+	stq	$14,ex_r14
+	stq	$15,ex_r15
+	stq	$26,ex_r26
+	stq	$30,ex_r30
+1:	stq	$2,ex_count
+	ret	($26)
+	.end	__exception
+
+	.align 3
+	.globl	__handle_exception
+	.ent	__handle_exception
+__handle_exception:
+	ldq	$9,ex_r9
+	ldq	$10,ex_r10
+	ldq	$11,ex_r11
+	ldq	$12,ex_r12
+	ldq	$13,ex_r13
+	ldq	$14,ex_r14
+	ldq	$15,ex_r15
+	ldq	$26,ex_r26
+	ldq	$30,ex_r30
+	bis	$31,1,$0	/* return 1 */
+	ret	($26)
+	.end	__handle_exception

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov