shithub: riscv

Download patch

ref: 97b32915334c700a8b282888481c7f37a6ae0442
parent: 334c5e1134719a02c35c72ec5435a967a74846f8
author: Sigrid <[email protected]>
date: Sun Dec 6 14:40:57 EST 2020

amd64: FP: back to static size for allocation and copying

--- a/sys/src/9/pc64/dat.h
+++ b/sys/src/9/pc64/dat.h
@@ -241,7 +241,6 @@
 
 	u64int	dr7;			/* shadow copy of dr7 */
 	u64int	xcr0;
-	u32int	fpsavesz;
 
 	void*	vmx;
 
--- a/sys/src/9/pc64/fpu.c
+++ b/sys/src/9/pc64/fpu.c
@@ -16,7 +16,6 @@
 	uintptr cr4;
 	ulong regs[4];
 
-	m->fpsavesz = sizeof(FPsave); /* always enough to fit sse+avx */
 	if((m->cpuiddx & (Sse|Fxsr)) == (Sse|Fxsr)){ /* have sse fp? */
 		cr4 = getcr4() | CR4Osfxsr|CR4Oxmmex;
 		putcr4(cr4);
@@ -30,9 +29,6 @@
 			putxcr0(m->xcr0);
 			fpsave = fpxsave;
 			fprestore = fpxrestore;
-
-			cpuid(0xd, 0, regs);
-			m->fpsavesz = regs[1];
 
 			cpuid(0xd, 1, regs);
 			if(regs[0] & Xsaveopt)
--- a/sys/src/9/pc64/main.c
+++ b/sys/src/9/pc64/main.c
@@ -488,7 +488,7 @@
 			up->fpstate |= FPkernel;
 		}
 		while(up->fpslot[index] == nil)
-			up->fpslot[index] = mallocalign(m->fpsavesz, FPalign, 0, 0);
+			up->fpslot[index] = mallocalign(sizeof(FPsave), FPalign, 0, 0);
 		up->fpsave = up->fpslot[index];
 		up->fpstate = FPactive | (up->fpstate & (FPnouser|FPkernel|FPindexm));
 		break;
@@ -574,8 +574,8 @@
 	case FPinactive	| FPpush:
 	case FPinactive:
 		while(p->fpslot[0] == nil)
-			p->fpslot[0] = mallocalign(m->fpsavesz, FPalign, 0, 0);
-		memmove(p->fpsave = p->fpslot[0], up->fpslot[0], m->fpsavesz);
+			p->fpslot[0] = mallocalign(sizeof(FPsave), FPalign, 0, 0);
+		memmove(p->fpsave = p->fpslot[0], up->fpslot[0], sizeof(FPsave));
 		p->fpstate = FPinactive;
 	}
 	splx(s);