patch-2.1.43 linux/include/asm-sparc64/fpumacro.h

Next file: linux/include/asm-sparc64/head.h
Previous file: linux/include/asm-sparc64/checksum.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.42/linux/include/asm-sparc64/fpumacro.h linux/include/asm-sparc64/fpumacro.h
@@ -1,12 +1,27 @@
 /* fpumacro.h: FPU related macros.
  *
  * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
+ * Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
  */
 
 #ifndef _SPARC64_FPUMACRO_H
 #define _SPARC64_FPUMACRO_H
 
-extern __inline__ void fpsave32(unsigned long *fpregs, unsigned long *fsr)
+extern __inline__ unsigned long fprs_read(void)
+{
+	unsigned long retval;
+
+	__asm__ __volatile__("rd %%fprs, %0" : "=r" (retval));
+
+	return retval;
+}
+
+extern __inline__ void fprs_write(unsigned long val)
+{
+	__asm__ __volatile__("wr %0, 0x0, %%fprs" : : "r" (val));
+}
+
+extern __inline__ void fpsave32(unsigned int *fpregs, unsigned long *fsr)
 {
 	__asm__ __volatile__ ("
 	wr	%%g0, %2, %%asi
@@ -16,7 +31,7 @@
 	" : : "r" (fpregs), "r" (fsr), "i" (ASI_BLK_P));
 }
 
-extern __inline__ void fpload32(unsigned long *fpregs, unsigned long *fsr)
+extern __inline__ void fpload32(unsigned int *fpregs, unsigned long *fsr)
 {
 	__asm__ __volatile__ ("
 	wr	%%g0, %2, %%asi
@@ -26,7 +41,27 @@
 	" : : "r" (fpregs), "r" (fsr), "i" (ASI_BLK_P));
 }
 
-extern __inline__ void fpsave(unsigned long *fpregs, unsigned long *fsr)
+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
@@ -38,7 +73,7 @@
 	" : : "r" (fpregs), "r" (fsr), "i" (ASI_BLK_P));
 }
 
-extern __inline__ void fpload(unsigned long *fpregs, unsigned long *fsr)
+extern __inline__ void fpload(unsigned int *fpregs, unsigned long *fsr)
 {
 	__asm__ __volatile__ ("
 	wr	%%g0, %2, %%asi

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov