diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-05-13 11:27:42 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-05-13 11:27:42 +0000 |
commit | 88e8cb58529889ac04caff7c3e3c8393b58dc874 (patch) | |
tree | 4e44cea2bc79fe44064c26dbacc0fc97425e8953 /sys/src/9 | |
parent | 462c67a09fefcb408a8bcfc43a847745b28bba3d (diff) |
imx8: move fpon()/fpoff() into l.s
avoid the dynamic code generating syswr() in the hot path...
Diffstat (limited to 'sys/src/9')
-rw-r--r-- | sys/src/9/imx8/fns.h | 2 | ||||
-rw-r--r-- | sys/src/9/imx8/fpu.c | 12 | ||||
-rw-r--r-- | sys/src/9/imx8/l.s | 13 |
3 files changed, 15 insertions, 12 deletions
diff --git a/sys/src/9/imx8/fns.h b/sys/src/9/imx8/fns.h index 29cf6f3a7..80500edce 100644 --- a/sys/src/9/imx8/fns.h +++ b/sys/src/9/imx8/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*); extern void smccall(Ureg*); diff --git a/sys/src/9/imx8/fpu.c b/sys/src/9/imx8/fpu.c index 163678294..bf914daaa 100644 --- a/sys/src/9/imx8/fpu.c +++ b/sys/src/9/imx8/fpu.c @@ -20,18 +20,6 @@ fpuinit(void) } void -fpon(void) -{ - syswr(CPACR_EL1, 3<<20); -} - -void -fpoff(void) -{ - syswr(CPACR_EL1, 0<<20); -} - -void fpinit(void) { fpon(); diff --git a/sys/src/9/imx8/l.s b/sys/src/9/imx8/l.s index 4953e68a6..250e5305f 100644 --- a/sys/src/9/imx8/l.s +++ b/sys/src/9/imx8/l.s @@ -394,6 +394,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! */ |