From 84c995e12e87e8d0ffe2855fee147d86c05e8023 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 13 May 2023 11:33:34 +0000 Subject: bcm64: move fpon()/fpoff() into l.s avoid dynamic code generating syswr() in the hot path... --- sys/src/9/bcm64/fns.h | 2 ++ sys/src/9/bcm64/fpu.c | 12 ------------ sys/src/9/bcm64/l.s | 13 +++++++++++++ 3 files changed, 15 insertions(+), 12 deletions(-) (limited to 'sys/src') diff --git a/sys/src/9/bcm64/fns.h b/sys/src/9/bcm64/fns.h index 40e136513..96c15fa28 100644 --- a/sys/src/9/bcm64/fns.h +++ b/sys/src/9/bcm64/fns.h @@ -14,6 +14,8 @@ extern void touser(uintptr sp); extern void forkret(void); extern void noteret(void); extern void returnto(void*); +extern void fpon(void); +extern void fpoff(void); extern void fpsaveregs(void*); extern void fploadregs(void*); diff --git a/sys/src/9/bcm64/fpu.c b/sys/src/9/bcm64/fpu.c index 163678294..bf914daaa 100644 --- a/sys/src/9/bcm64/fpu.c +++ b/sys/src/9/bcm64/fpu.c @@ -19,18 +19,6 @@ fpuinit(void) fpoff(); } -void -fpon(void) -{ - syswr(CPACR_EL1, 3<<20); -} - -void -fpoff(void) -{ - syswr(CPACR_EL1, 0<<20); -} - void fpinit(void) { diff --git a/sys/src/9/bcm64/l.s b/sys/src/9/bcm64/l.s index 1e9bdb217..77322e972 100644 --- a/sys/src/9/bcm64/l.s +++ b/sys/src/9/bcm64/l.s @@ -382,6 +382,19 @@ TEXT tlbivmalle1(SB), 1, $-4 ISB $SY RETURN +/* + * floating-point support. + */ +TEXT fpon(SB), 1, $-4 + MOVW $(3<<20), R0 + MSR R0, CPACR_EL1 + RETURN + +TEXT fpoff(SB), 1, $-4 + MOVW $(0<<20), R0 + MSR R0, CPACR_EL1 + RETURN + TEXT fpsaveregs(SB), 1, $-4 WORD $(1<<30 | 3 << 26 | 2<<22 | 0x1F<<16 | 3<<10 | 0<<5 | 0) /* MOV { V0, V1, V2, V3 }, (R0)64! */ WORD $(1<<30 | 3 << 26 | 2<<22 | 0x1F<<16 | 3<<10 | 0<<5 | 4) /* MOV { V4, V5, V6, V7 }, (R0)64! */ -- cgit v1.2.3