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.
This commit is contained in:
cinap_lenrek 2015-07-08 02:13:16 +02:00
parent 63879193e7
commit fcb9abccbb
3 changed files with 8 additions and 10 deletions

View file

@ -4,7 +4,7 @@
.SH SYNOPSIS
.B 5e
[
.B -npb
.B -npbF
]
.I text
[
@ -92,6 +92,9 @@ causes failing processes to call
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 @@ The emulator does not post
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

View file

@ -4,6 +4,7 @@
#include "dat.h"
#include "fns.h"
int vfp = 1;
int nflag, pflag, bflag;
Ref nproc;
@ -49,7 +50,7 @@ cleanup(void)
static void
usage(void)
{
fprint(2, "usage: 5e [-npbf] text [...]\n");
fprint(2, "usage: 5e [-npbF] text [...]\n");
exits(nil);
}
@ -105,6 +106,7 @@ main(int argc, char **argv)
case 'p': pflag++; break;
case 'b': bflag++; break;
case 'f': vfp = 1; break;
case 'F': vfp = 0; break;
default: usage();
} ARGEND;
if(argc < 1)

View file

@ -55,7 +55,7 @@ vfprmtransfer(u32int instr)
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)