Browse Source

Plan 9 from Bell Labs 2012-03-24

David du Colombier 12 years ago
parent
commit
c5f2912d29

+ 11 - 11
arm/include/u.h

@@ -21,17 +21,17 @@ 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 FCR */
+#define	FPINEX	(1<<12)
+#define	FPUNFL	(1<<11)
+#define	FPOVFL	(1<<10)
+#define	FPZDIV	(1<<9)
+#define	FPINVAL	(1<<8)
+#define	FPRNR	(0<<22)
+#define	FPRZ	(1<<22)
+#define	FPRPINF	(2<<22)
+#define	FPRNINF	(3<<22)
+#define	FPRMASK	(3<<22)
 #define	FPPEXT	0
 #define	FPPSGL	0
 #define	FPPDBL	0

+ 2 - 1
sys/src/9/boot/parts.c

@@ -111,7 +111,8 @@ sdaddpart(SDunit* unit, char* name, uvlong start, uvlong end)
 
 	/* update devsd's in-memory partition table */
 	if (fprint(unit->ctl, "part %s %lld %lld\n", name, start, end) < 0)
-		fprint(2, "can't update devsd's partition table\n");
+		fprint(2, "can't update %s's devsd partition table for %s: %r\n",
+			unit->name, name);
 	if (debugboot)
 		print("part %s %lld %lld\n", name, start, end);
 }

+ 3 - 0
sys/src/cmd/5c/mkfile

@@ -36,3 +36,6 @@ t:V:	$O.out
 	$O.out -S t
 	$LD -o t.out t.$O
 	t.out
+
+enam.c: 5.out.h
+	rc mkenam

+ 3 - 0
sys/src/cmd/5l/mkfile

@@ -19,6 +19,9 @@ HFILES=\
 BIN=/$objtype/bin
 </sys/src/cmd/mkone
 
+../5c/enam.c: ../5c/5.out.h
+	@ { cd ../5c; mk enam.c }
+
 enam.$O:	../5c/enam.c
 	$CC $CFLAGS ../5c/enam.c
 

+ 10 - 1
sys/src/libc/arm/getfcr.s

@@ -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
-

+ 22 - 1
sys/src/libc/arm/vlrt.c

@@ -15,7 +15,7 @@ struct	Vlong
 
 void	abort(void);
 
-/* needed by profiler; can't be profiled */
+/* needed by profiler (notably ../port/profile.c); can't be profiled */
 #pragma profile off
 
 void
@@ -129,6 +129,8 @@ _v2f(Vlong x)
 }
 
 
+#pragma profile off		/* needed by profiler; can't be profiled */
+
 static void
 dodiv(Vlong num, Vlong den, Vlong *q, Vlong *r)
 {
@@ -201,6 +203,8 @@ _divvu(Vlong *q, Vlong n, Vlong d)
 	dodiv(n, d, q, 0);
 }
 
+#pragma profile on
+
 void
 _modvu(Vlong *r, Vlong n, Vlong d)
 {
@@ -213,6 +217,8 @@ _modvu(Vlong *r, Vlong n, Vlong d)
 	dodiv(n, d, 0, r);
 }
 
+#pragma profile off		/* needed by profiler; can't be profiled */
+
 static void
 vneg(Vlong *v)
 {
@@ -246,6 +252,9 @@ _divv(Vlong *q, Vlong n, Vlong d)
 		vneg(q);
 }
 
+#pragma profile on
+
+
 void
 _modv(Vlong *r, Vlong n, Vlong d)
 {
@@ -503,6 +512,8 @@ _sl2v(Vlong *ret, long sl)
 	ret->hi = t >> 31;
 }
 
+#pragma profile off		/* needed by profiler; can't be profiled */
+
 void
 _ul2v(Vlong *ret, ulong ul)
 {
@@ -513,6 +524,8 @@ _ul2v(Vlong *ret, ulong ul)
 	ret->hi = 0;
 }
 
+#pragma profile on
+
 void
 _si2v(Vlong *ret, int si)
 {
@@ -605,6 +618,8 @@ _v2uh(Vlong rv)
 	return rv.lo & 0xffff;
 }
 
+#pragma profile off		/* needed by profiler; can't be profiled */
+
 long
 _v2sl(Vlong rv)
 {
@@ -619,6 +634,8 @@ _v2ul(Vlong rv)
 	return rv.lo;
 }
 
+#pragma profile on
+
 long
 _v2si(Vlong rv)
 {
@@ -645,12 +662,16 @@ _eqv(Vlong lv, Vlong rv)
 	return lv.lo == rv.lo && lv.hi == rv.hi;
 }
 
+#pragma profile off		/* needed by profiler; can't be profiled */
+
 int
 _nev(Vlong lv, Vlong rv)
 {
 	return lv.lo != rv.lo || lv.hi != rv.hi;
 }
 
+#pragma profile on
+
 int
 _ltv(Vlong lv, Vlong rv)
 {

+ 11 - 0
sys/src/libmach/mkfile

@@ -55,3 +55,14 @@ UPDATE=mkfile\
 </sys/src/cmd/mksyslib
 
 CFLAGS=$CFLAGS -I/sys/src/cmd
+
+2obj.$O: /sys/src/cmd/2c/2.out.h
+5obj.$O: /sys/src/cmd/5c/5.out.h
+6obj.$O: /sys/src/cmd/6c/6.out.h
+7obj.$O: /sys/src/cmd/7c/7.out.h
+8obj.$O: /sys/src/cmd/8c/8.out.h
+9obj.$O: /sys/src/cmd/9c/9.out.h
+kobj.$O: /sys/src/cmd/kc/k.out.h
+qobj.$O: /sys/src/cmd/qc/q.out.h
+uobj.$O: uc/u.out.h
+vobj.$O: /sys/src/cmd/vc/v.out.h