diff options
Diffstat (limited to 'libc/sysdeps')
| -rw-r--r-- | libc/sysdeps/linux/arm/__longjmp.S | 8 | ||||
| -rw-r--r-- | libc/sysdeps/linux/arm/setjmp.S | 8 | 
2 files changed, 16 insertions, 0 deletions
| diff --git a/libc/sysdeps/linux/arm/__longjmp.S b/libc/sysdeps/linux/arm/__longjmp.S index 58ae8ab58..a5ffe84e9 100644 --- a/libc/sysdeps/linux/arm/__longjmp.S +++ b/libc/sysdeps/linux/arm/__longjmp.S @@ -64,6 +64,13 @@ __longjmp:  #if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__  #ifdef __VFP_FP__ +#  if __ARM_ARCH >= 8 +	/* Restore the VFP registers.  */ +	fldmiax ip!, {d8-d15} +	/* Restore the floating-point status register.  */ +	ldr     r1, [ip], #4 +	fmxr    fpscr, r1 +#  else  	/* Restore the VFP registers.  */  	/* Following instruction is fldmiax ip!, {d8-d15}.  */  	ldc	p11, cr8, [r12], #68 @@ -71,6 +78,7 @@ __longjmp:  	ldr     r1, [ip], #4  	/* Following instruction is fmxr fpscr, r1.  */  	mcr	p10, 7, r1, cr1, cr0, 0 +#  endif  # elif defined __MAVERICK__  	cfldrd	mvd4,  [ip], #8 ; nop  	cfldrd	mvd5,  [ip], #8 ; nop diff --git a/libc/sysdeps/linux/arm/setjmp.S b/libc/sysdeps/linux/arm/setjmp.S index f7a74cc5a..d5bc9ba65 100644 --- a/libc/sysdeps/linux/arm/setjmp.S +++ b/libc/sysdeps/linux/arm/setjmp.S @@ -54,6 +54,13 @@ __sigsetjmp:  #endif  #if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__  # ifdef __VFP_FP__ +#  if __ARM_ARCH >= 8 +	/* Store the VFP registers.  */ +	fstmiax ip!, {d8-d15} +	/* Store the floating-point status register.  */ +	fmrx    r2, fpscr +	str     r2, [ip], #4 +#  else  	/* Store the VFP registers.  */  	/* Following instruction is fstmiax ip!, {d8-d15}.  */  	stc	p11, cr8, [r12], #68 @@ -61,6 +68,7 @@ __sigsetjmp:  	/* Following instruction is fmrx r2, fpscr.  */  	mrc	p10, 7, r2, cr1, cr0, 0  	str	r2, [ip], #4 +#  endif  # elif defined __MAVERICK__  	cfstrd	mvd4,  [ip], #8 ; nop  	cfstrd	mvd5,  [ip], #8 ; nop | 
