]> git.lizzy.rs Git - plan9front.git/commitdiff
getfcr: change getfcr/setfcr to use VFP
authorcinap_lenrek <cinap_lenrek@felloff.net>
Thu, 25 Dec 2014 16:44:49 +0000 (17:44 +0100)
committercinap_lenrek <cinap_lenrek@felloff.net>
Thu, 25 Dec 2014 16:44:49 +0000 (17:44 +0100)
arm/include/u.h
sys/src/ape/lib/ap/arm/getfcr.s
sys/src/libc/arm/getfcr.s
sys/src/libc/arm/getfcr.vfp.S [deleted file]

index 916b8cc6f26ba6e0d28534a50b1cd90dba5d629e..5a86e34d88d6239ea3c88fc86e830584a86d5e4c 100644 (file)
@@ -21,27 +21,32 @@ typedef unsigned short u16int;
 typedef unsigned int   u32int;
 typedef unsigned long long u64int;
 
-/* FCR */
-#define        FPINEX  (1<<20)
-#define        FPUNFL  (1<<19)
-#define        FPOVFL  (1<<18)
-#define        FPZDIV  (1<<17)
-#define        FPINVAL (1<<16)
-#define        FPRNR   (0<<0)
-#define        FPRZ    (1<<0)
-#define        FPRPINF (2<<0)
-#define        FPRNINF (3<<0)
-#define        FPRMASK (3<<0)
+/* VFP FPSCR (exceptions) */
+#define        FPINEX          (1<<12)
+#define        FPUNFL          (1<<11)
+#define        FPOVFL          (1<<10)
+#define        FPZDIV          (1<<9)
+#define        FPINVAL         (1<<8)
+
+/* VFP FPSCR (rounding) */
+#define        FPRNR           (0<<22)
+#define        FPRPINF         (1<<22)
+#define        FPRNINF         (2<<22)
+#define        FPRZ            (3<<22)
+
+#define        FPRMASK         (3<<22)
+
+/* VFP FPSCR (status) */
 #define        FPPEXT  0
 #define        FPPSGL  0
 #define        FPPDBL  0
 #define        FPPMASK 0
-/* FSR */
-#define        FPAINEX (1<<4)
-#define        FPAUNFL (1<<3)
-#define        FPAOVFL (1<<2)
-#define        FPAZDIV (1<<1)
+#define        FPAINEX         (1<<4)
+#define        FPAUNFL         (1<<3)
+#define        FPAOVFL         (1<<2)
+#define        FPAZDIV         (1<<1)
 #define        FPAINVAL        (1<<0)
+
 union FPdbleword
 {
        double  x;
index b27c7f08279f67e7b85c911a47406b86e9243344..4822a5f5bf70c55ebd1e7e49f9158cfb7401ca72 100644 (file)
@@ -1,16 +1,21 @@
+/* for VFP */
+#define VMRS(fp, cpu) WORD $(0xeef00a10 | (fp)<<16 | (cpu)<<12) /* FP → arm */
+#define VMSR(cpu, fp) WORD $(0xeee00a10 | (fp)<<16 | (cpu)<<12) /* arm → FP */
 
-TEXT   setfcr(SB), $4
-       MOVW    R0, FPCR
+#define Fpscr 1
+
+TEXT   setfcr(SB), $0
+       VMSR(0, Fpscr)
        RET
 
-TEXT   getfcr(SB), $4
-       MOVW    FPCR, R0
+TEXT   getfcr(SB), $0
+       VMRS(Fpscr, 0)
        RET
 
 TEXT   getfsr(SB), $0
-       MOVW    FPSR, R0
+       VMSR(0, Fpscr)
        RET
 
 TEXT   setfsr(SB), $0
-       MOVW    R0, FPSR
+       VMRS(Fpscr, 0)
        RET
index dc9a207bcd04cbd38ec14c078e2734ecb1b425e5..4822a5f5bf70c55ebd1e7e49f9158cfb7401ca72 100644 (file)
@@ -1,12 +1,21 @@
+/* for VFP */
+#define VMRS(fp, cpu) WORD $(0xeef00a10 | (fp)<<16 | (cpu)<<12) /* FP → arm */
+#define VMSR(cpu, fp) WORD $(0xeee00a10 | (fp)<<16 | (cpu)<<12) /* arm → FP */
+
+#define Fpscr 1
+
 TEXT   setfcr(SB), $0
+       VMSR(0, Fpscr)
        RET
 
 TEXT   getfcr(SB), $0
+       VMRS(Fpscr, 0)
        RET
 
 TEXT   getfsr(SB), $0
+       VMSR(0, Fpscr)
        RET
 
 TEXT   setfsr(SB), $0
+       VMRS(Fpscr, 0)
        RET
-
diff --git a/sys/src/libc/arm/getfcr.vfp.S b/sys/src/libc/arm/getfcr.vfp.S
deleted file mode 100644 (file)
index 4822a5f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* for VFP */
-#define VMRS(fp, cpu) WORD $(0xeef00a10 | (fp)<<16 | (cpu)<<12) /* FP → arm */
-#define VMSR(cpu, fp) WORD $(0xeee00a10 | (fp)<<16 | (cpu)<<12) /* arm → FP */
-
-#define Fpscr 1
-
-TEXT   setfcr(SB), $0
-       VMSR(0, Fpscr)
-       RET
-
-TEXT   getfcr(SB), $0
-       VMRS(Fpscr, 0)
-       RET
-
-TEXT   getfsr(SB), $0
-       VMSR(0, Fpscr)
-       RET
-
-TEXT   setfsr(SB), $0
-       VMRS(Fpscr, 0)
-       RET