ref: fcb9abccbbc73a4f449d55c2c7fb369db2ad139d
parent: 63879193e7e0d271daa215b02d6c4f64c98dc6ae
author: cinap_lenrek <[email protected]>
date: Tue Jul 7 22:13:16 EDT 2015
5e: enable VFP emulation by default, doubles only need to be 4 byte aligned this adds -F flag to 5e (same as 5l) to disable VFP emulation and makes VFP emulation the default.
--- a/sys/man/1/5e
+++ b/sys/man/1/5e
@@ -4,7 +4,7 @@
.SH SYNOPSIS
.B 5e
[
-.B -npb
+.B -npbF
]
.I text
[
@@ -92,6 +92,9 @@
instead of
.I sysfatal.
See below.
+.TP
+.B -F
+Disable emulation of VFP floating point instructions.
.SH SOURCE
.B /sys/src/cmd/5e
.SH SEE ALSO
@@ -108,13 +111,6 @@
notes.
Obscure opcodes, in particular uncommon operations on R15, are not implemented.
-Careless use of the
-.B LDREX
-and
-.B STREX
-instructions can lead to deadlock, while the
-.I ARM Architecture Reference Manual
-indicates a real processor will exhibit undefined behavior in these cases.
Accesses spanning segment boundaries will be treated as page faults.
Many syscalls such as
--- a/sys/src/cmd/5e/5e.c
+++ b/sys/src/cmd/5e/5e.c
@@ -4,6 +4,7 @@
#include "dat.h"
#include "fns.h"
+int vfp = 1;
int nflag, pflag, bflag;
Ref nproc;
@@ -49,7 +50,7 @@
static void
usage(void)
{
- fprint(2, "usage: 5e [-npbf] text [...]\n");
+ fprint(2, "usage: 5e [-npbF] text [...]\n");
exits(nil);
}
@@ -105,6 +106,7 @@
case 'p': pflag++; break;
case 'b': bflag++; break;
case 'f': vfp = 1; break;
+ case 'F': vfp = 0; break;
default: usage();
} ARGEND;
if(argc < 1)
--- a/sys/src/cmd/5e/vfp.c
+++ b/sys/src/cmd/5e/vfp.c
@@ -55,7 +55,7 @@
sz = instr & (1<<8);
if((instr & (1<<23)) == 0)
off = -off;
- ea = vaddr(evenaddr(P->R[n] + off, sz ? 7 : 3), 8, &seg);
+ ea = vaddr(evenaddr(P->R[n] + off, 3), sz ? 8 : 4, &seg);
switch((instr>>20)&0x3){
case 0:
if(sz)