Skip to content

Commit 7e58b7a

Browse files
guard context switch of neon vector regs
1 parent 50909e3 commit 7e58b7a

File tree

4 files changed

+14
-43
lines changed

4 files changed

+14
-43
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
.vs
12
.deps
23
stamp-h1
34
Makefile

include/fastcontext/arm-ucontext.h

+7
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,14 @@ typedef struct uctxt uctxt_t;
1414

1515
struct mctxt {
1616
/* Saved main processor registers. */
17+
#ifdef NEEDARMA64CONTEXT
18+
uint64_t regs[32]; /* callee saves x0-x30, SP */
19+
#ifdef ARMA64_CONTEXT_SWITCH_NEON_REGS
20+
uint128_t regs[32]; /* SIMD Neon Registers*/
21+
#endif
22+
#else
1723
uint32_t regs[16]; /* callee saves r0-r15 */
24+
#endifs
1825
char first;
1926
};
2027

include/fastcontext/armv8-a64-ucontext.h

-37
This file was deleted.

src/fastcontext/asm.S

+6-6
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,7 @@ GET:
815815
stp X29, X30, [X0,#232] /* X30 is LR */
816816
str SP, [X0,#248] /* sp */
817817

818+
#ifdef ARMA64_CONTEXT_SWITCH_NEON_REGS
818819
/* Store vector registers */
819820
add X0, X0, #256 /* Update pointer to avoid immediate growing to large for STP/LDP instruction */
820821
stp Q0, Q1, [X0]
@@ -834,14 +835,14 @@ GET:
834835
stp Q28, Q29, [X0,#448]
835836
stp Q30, Q31, [X0,#480]
836837
sub X0, X0, #256
837-
838+
#endif
838839
/* Store 1 as X0-to-restore */
839840
mov X1, #1
840841
str X1, [X0]
841842

842843
/* return 0 */
843844
mov X0, #0
844-
ret
845+
ret
845846
/*
846847
* TODO: add vector registers for both NEON and SVE
847848
* https://developer.arm.com/documentation/102374/0101/Loads-and-stores---using-floating-point-registers
@@ -869,7 +870,7 @@ SET:
869870
ldp X29, X30, [X0,#232]
870871
ldr SP, [X0,#248]
871872

872-
873+
#ifdef ARMA64_CONTEXT_SWITCH_NEON_REG
873874
/* Load vector registers */
874875
add X0, X0, #256
875876
ldp Q0, Q1, [X0]
@@ -889,10 +890,9 @@ SET:
889890
ldp Q28, Q29, [X0,#448]
890891
ldp Q30, Q31, [X0,#480]
891892
sub X0, X0, #256
892-
893-
ldr X0, [X0]
894-
ret
895893
#endif
894+
ldr X0, [X0]
895+
ret
896896

897897
#ifdef NEEDARMCONTEXT
898898
#warning NEEDARMCONTEXT

0 commit comments

Comments
 (0)