patch-2.1.44 linux/include/asm-sparc64/fpumacro.h
Next file: linux/include/asm-sparc64/fs_mount.h
Previous file: linux/include/asm-sparc64/fbio.h
Back to the patch index
Back to the overall index
-  Lines: 91
-  Date:
Mon Jul  7 08:18:55 1997
-  Orig file: 
v2.1.43/linux/include/asm-sparc64/fpumacro.h
-  Orig date: 
Mon Jun 16 16:36:00 1997
diff -u --recursive --new-file v2.1.43/linux/include/asm-sparc64/fpumacro.h linux/include/asm-sparc64/fpumacro.h
@@ -21,68 +21,44 @@
 	__asm__ __volatile__("wr %0, 0x0, %%fprs" : : "r" (val));
 }
 
-extern __inline__ void fpsave32(unsigned int *fpregs, unsigned long *fsr)
+extern __inline__ void fpsave(unsigned long *fpregs,
+			      unsigned long *fsr,
+			      unsigned long *gsr)
 {
 	__asm__ __volatile__ ("
-	wr	%%g0, %2, %%asi
-	stx	%%fsr, [%1]
-	stda	%%f0, [%0] %%asi
-	stda	%%f16, [%0 + 64] %%asi
-	" : : "r" (fpregs), "r" (fsr), "i" (ASI_BLK_P));
-}
-
-extern __inline__ void fpload32(unsigned int *fpregs, unsigned long *fsr)
-{
-	__asm__ __volatile__ ("
-	wr	%%g0, %2, %%asi
-	ldda	[%0] %%asi, %%f0
-	ldda	[%0 + 64] %%asi, %%f16
-	ldx	[%1], %%fsr
-	" : : "r" (fpregs), "r" (fsr), "i" (ASI_BLK_P));
-}
-
-extern __inline__ void fpsave64hi(unsigned int *fpregs, unsigned long *fsr)
-{
-	__asm__ __volatile__ ("
-	wr	%%g0, %2, %%asi
-	stx	%%fsr, [%1]
-	stda	%%f32, [%0 + 128] %%asi
-	stda	%%f48, [%0 + 192] %%asi
-	" : : "r" (fpregs), "r" (fsr), "i" (ASI_BLK_P));
-}
-
-extern __inline__ void fpload64hi(unsigned int *fpregs, unsigned long *fsr)
-{
-	__asm__ __volatile__ ("
-	wr	%%g0, %2, %%asi
-	ldda	[%0 + 128] %%asi, %%f32
-	ldda	[%0 + 192] %%asi, %%f48
-	ldx	[%1], %%fsr
-	" : : "r" (fpregs), "r" (fsr), "i" (ASI_BLK_P));
-}
-
-extern __inline__ void fpsave(unsigned int *fpregs, unsigned long *fsr)
-{
-	__asm__ __volatile__ ("
-	wr	%%g0, %2, %%asi
+	wr	%%g0, %3, %%asi
+	rd	%%gsr, %%g1
+	membar	#LoadStore | #StoreStore
 	stx	%%fsr, [%1]
+	stx	%%g1, [%2]
 	stda	%%f0, [%0] %%asi
 	stda	%%f16, [%0 + 64] %%asi
 	stda	%%f32, [%0 + 128] %%asi
 	stda	%%f48, [%0 + 192] %%asi
-	" : : "r" (fpregs), "r" (fsr), "i" (ASI_BLK_P));
+	membar	#Sync
+"	: /* No outputs */
+	: "r" (fpregs), "r" (fsr), "r" (gsr), "i" (ASI_BLK_P)
+	: "g1");
 }
 
-extern __inline__ void fpload(unsigned int *fpregs, unsigned long *fsr)
+extern __inline__ void fpload(unsigned long *fpregs,
+			      unsigned long *fsr,
+			      unsigned long *gsr)
 {
 	__asm__ __volatile__ ("
-	wr	%%g0, %2, %%asi
+	wr	%%g0, %3, %%asi
+	membar	#StoreLoad | #LoadLoad
 	ldda	[%0] %%asi, %%f0
 	ldda	[%0 + 64] %%asi, %%f16
 	ldda	[%0 + 128] %%asi, %%f32
 	ldda	[%0 + 192] %%asi, %%f48
 	ldx	[%1], %%fsr
-	" : : "r" (fpregs), "r" (fsr), "i" (ASI_BLK_P));
+	ldx	[%2], %%g1
+	wr	%%g1, 0, %%gsr
+	membar	#Sync
+"	: /* No outputs */
+	: "r" (fpregs), "r" (fsr), "r" (gsr), "i" (ASI_BLK_P)
+	: "g1");
 }
 
 #endif /* !(_SPARC64_FPUMACRO_H) */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov