@ -87,7 +87,7 @@
LDR X 0 , u l l P o r t T a s k H a s F P U C o n t e x t C o n s t
LDR X 0 , u l l P o r t T a s k H a s F P U C o n t e x t C o n s t
LDR X 2 , [ X 0 ]
LDR X 2 , [ X 0 ]
/* Save the FPU context, if any (32 128-bit registers). */
/* Save the FPU context, if any (32 128-bit plus two 64-bit status registers). */
CMP X 2 , #0
CMP X 2 , #0
B. E Q 1 f
B. E Q 1 f
STP Q 0 , Q 1 , [ S P ,#- 0x20 ] !
STP Q 0 , Q 1 , [ S P ,#- 0x20 ] !
@ -107,6 +107,11 @@
STP Q 2 8 , Q 2 9 , [ S P ,#- 0x20 ] !
STP Q 2 8 , Q 2 9 , [ S P ,#- 0x20 ] !
STP Q 3 0 , Q 3 1 , [ S P ,#- 0x20 ] !
STP Q 3 0 , Q 3 1 , [ S P ,#- 0x20 ] !
/* Even though upper 32 bits of FPSR and FPCR are reserved, save and restore the whole 64 bits to keep 16-byte SP alignement. */
MRS X 9 , F P S R
MRS X 1 0 , F P C R
STP X 9 , X 1 0 , [ S P , #- 0x10 ] !
1 :
1 :
/* Store the critical nesting count and FPU context indicator. */
/* Store the critical nesting count and FPU context indicator. */
STP X 2 , X 3 , [ S P , #- 0x10 ] !
STP X 2 , X 3 , [ S P , #- 0x10 ] !
@ -157,6 +162,7 @@
/* Restore the FPU context, if any. */
/* Restore the FPU context, if any. */
CMP X 2 , #0
CMP X 2 , #0
B. E Q 1 f
B. E Q 1 f
LDP X 9 , X 1 0 , [ S P ] , #0x10
LDP Q 3 0 , Q 3 1 , [ S P ] , #0x20
LDP Q 3 0 , Q 3 1 , [ S P ] , #0x20
LDP Q 2 8 , Q 2 9 , [ S P ] , #0x20
LDP Q 2 8 , Q 2 9 , [ S P ] , #0x20
LDP Q 2 6 , Q 2 7 , [ S P ] , #0x20
LDP Q 2 6 , Q 2 7 , [ S P ] , #0x20
@ -173,6 +179,8 @@
LDP Q 4 , Q 5 , [ S P ] , #0x20
LDP Q 4 , Q 5 , [ S P ] , #0x20
LDP Q 2 , Q 3 , [ S P ] , #0x20
LDP Q 2 , Q 3 , [ S P ] , #0x20
LDP Q 0 , Q 1 , [ S P ] , #0x20
LDP Q 0 , Q 1 , [ S P ] , #0x20
MSR F P S R , X 9
MSR F P C R , X 1 0
1 :
1 :
LDP X 2 , X 3 , [ S P ] , #0x10 / * S P S R a n d E L R . * /
LDP X 2 , X 3 , [ S P ] , #0x10 / * S P S R a n d E L R . * /