summaryrefslogtreecommitdiffstats
path: root/arch/ia64/boot
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/boot')
-rw-r--r--arch/ia64/boot/bootloader.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/ia64/boot/bootloader.c b/arch/ia64/boot/bootloader.c
index b73f396dc..5d1778ee3 100644
--- a/arch/ia64/boot/bootloader.c
+++ b/arch/ia64/boot/bootloader.c
@@ -68,15 +68,16 @@ cons_write (const char *buf)
void
enter_virtual_mode (unsigned long new_psr)
{
+ long tmp;
+
+ asm volatile ("movl %0=1f" : "=r"(tmp));
asm volatile ("mov cr.ipsr=%0" :: "r"(new_psr));
- asm volatile ("mov cr.iip=%0" :: "r"(&&target));
+ asm volatile ("mov cr.iip=%0" :: "r"(tmp));
asm volatile ("mov cr.ifs=r0");
- asm volatile ("rfi;;"); /* must be last insn in an insn group */
-
- target:
+ asm volatile ("rfi;;");
+ asm volatile ("1:");
}
-
#define MAX_ARGS 32
void
@@ -96,7 +97,7 @@ _start (void)
char *kpath, *args;
long arglen = 0;
- asm volatile ("movl gp=__gp" ::: "memory");
+ asm volatile ("movl gp=__gp;;" ::: "memory");
asm volatile ("mov sp=%0" :: "r"(stack) : "memory");
asm volatile ("bsw.1;;");
#ifdef CONFIG_ITANIUM_ASTEP_SPECIFIC