aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/alpha/__longjmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/alpha/__longjmp.c')
-rw-r--r--sysdeps/alpha/__longjmp.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/sysdeps/alpha/__longjmp.c b/sysdeps/alpha/__longjmp.c
index f3f35eec9c..65b6804bd3 100644
--- a/sysdeps/alpha/__longjmp.c
+++ b/sysdeps/alpha/__longjmp.c
@@ -38,6 +38,8 @@ register double
void
__longjmp (__jmp_buf env, int val)
{
+ register long int retval asm ("$0");
+
/* Restore the integer registers. */
r9 = env[0].__9;
r10 = env[0].__10;
@@ -73,18 +75,18 @@ __longjmp (__jmp_buf env, int val)
precisely the FP and SP the desired environment needs,
we must avoid the compiler doing anything with the stack. */
+
+ asm volatile
+ ("cmoveq %1, 1, %0\n\t" /* $0 = val ?: 1; */
+ "ret $31, (%2), 1" /* return $0 */
+ : "=r" (retval)
+ /* The "0" constraint should force VAL into $0. */
+ : "0" (val), "r" (retpc));
+
while (1)
{
/* The loop is just to avoid `volatile function does return' warnings.
The instruction will only be executed once. */
-
- register long int retval asm ("$0");
-
- asm volatile
- ("cmoveq %1, 1, %0\n\t" /* $0 = val ?: 1; */
- "ret $31, (%2), 1" /* return $0 */
- : "=r" (retval)
- /* The "0" constraint should force VAL into $0. */
- : "0" (val), "r" (retpc));
+ asm volatile ("");
}
}