Index: arch/ia64/include/context.h
===================================================================
--- arch/ia64/include/context.h	(revision 77593a7626cc95c96367294d0e3ba90ec0932c23)
+++ arch/ia64/include/context.h	(revision 17a20bce18cdb6019dd20586f71c1c366e5aba15)
@@ -33,8 +33,5 @@
 #include <typedefs.h>
 #include <align.h>
-
-#define STACK_ITEM_SIZE			16
-#define STACK_ALIGNMENT			16
-#define REGISTER_STACK_ALIGNMENT 	8
+#include <arch/stack.h>
 
 /*
Index: arch/ia64/include/stack.h
===================================================================
--- arch/ia64/include/stack.h	(revision 17a20bce18cdb6019dd20586f71c1c366e5aba15)
+++ arch/ia64/include/stack.h	(revision 17a20bce18cdb6019dd20586f71c1c366e5aba15)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ia64_STACK_H__
+#define __ia64_STACK_H__
+
+#define STACK_ITEM_SIZE			16
+#define STACK_ALIGNMENT			16
+#define STACK_SCRATCH_AREA_SIZE		16
+#define REGISTER_STACK_ALIGNMENT 	8
+
+#endif
Index: arch/ia64/src/ivt.S
===================================================================
--- arch/ia64/src/ivt.S	(revision 77593a7626cc95c96367294d0e3ba90ec0932c23)
+++ arch/ia64/src/ivt.S	(revision 17a20bce18cdb6019dd20586f71c1c366e5aba15)
@@ -27,4 +27,12 @@
 #
 
+#include <arch/stack.h>
+
+#define STACK_ITEMS		12
+#define STACK_FRAME_SIZE	((STACK_ITEMS*STACK_ITEM_SIZE) + STACK_SCRATCH_AREA_SIZE)
+
+#if (STACK_FRAME_SIZE % STACK_ALIGNMENT != 0)
+#error Memory stack must be 16-byte aligned.
+#endif
 
 /** Heavyweight interrupt handler
@@ -58,13 +66,14 @@
 	
     /* 4. save registers in bank 0 into memory stack */
-	add r12 = -8, r12 ;;
-	
-	st8 [r12] = r29, -8 ;;	/* save predicate registers */
-
-	st8 [r12] = r24, -8 ;;	/* save cr.iip */
-	st8 [r12] = r25, -8 ;;	/* save cr.ipsr */
-	st8 [r12] = r26, -8 ;;	/* save cr.iipa */
-	st8 [r12] = r27, -8 ;;	/* save cr.isr */
-	st8 [r12] = r28, -8 ;;	/* save cr.ifa */		
+	add r31 = -8, r12 ;;
+	add r12 = -STACK_FRAME_SIZE, r12 ;;
+	
+	st8 [r31] = r29, -8 ;;	/* save predicate registers */
+
+	st8 [r31] = r24, -8 ;;	/* save cr.iip */
+	st8 [r31] = r25, -8 ;;	/* save cr.ipsr */
+	st8 [r31] = r26, -8 ;;	/* save cr.iipa */
+	st8 [r31] = r27, -8 ;;	/* save cr.isr */
+	st8 [r31] = r28, -8 ;;	/* save cr.ifa */		
 
     /* 5. RSE switch from interrupted context */
@@ -75,7 +84,7 @@
 	mov r26 = cr.ifs
 	
-	st8 [r12] = r24, -8	/* save ar.rsc */
-	st8 [r12] = r25, -8	/* save ar.pfs */
-	st8 [r12] = r26, -8	/* save ar.ifs */
+	st8 [r31] = r24, -8	/* save ar.rsc */
+	st8 [r31] = r25, -8	/* save ar.pfs */
+	st8 [r31] = r26, -8	/* save ar.ifs */
 	
 	and r30 = ~3, r24
@@ -90,7 +99,7 @@
 	mov r29 = ar.bsp
 	
-	st8 [r12] = r27, -8	/* save ar.rnat */
-	st8 [r12] = r28, -8	/* save ar.bspstore */
-	st8 [r12] = r29		/* save ar.bsp */
+	st8 [r31] = r27, -8	/* save ar.rnat */
+	st8 [r31] = r28, -8	/* save ar.bspstore */
+	st8 [r31] = r29		/* save ar.bsp */
 	
 	mov ar.rsc = r24	/* restore RSE's setting */
