]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/alphapc/fptrap.c
syscallfmt: use up->syserrstr instead of up->errstr (import from sources)
[plan9front.git] / sys / src / 9 / alphapc / fptrap.c
1 #include        "u.h"
2 #include        "../port/lib.h"
3 #include        "mem.h"
4 #include        "dat.h"
5 #include        "fns.h"
6 #include        "ureg.h"
7 #include        "io.h"
8 #include        "../port/error.h"
9
10 char *fpcause[] =
11 {
12         "invalid operation",
13         "division by zero",
14         "overflow",
15         "underflow",
16         "inexact operation",
17         "integer overflow",
18 };
19 char    *fpexcname(Ureg*, ulong, char*);
20
21 void
22 fptrap(Ureg *ur)
23 {
24         char buf[ERRMAX];
25         int i;
26         ulong reason;
27
28         ur->pc &= ~2;
29         reason = (ulong)ur->a0;
30         for (i = 1; i < 6; i++)
31                 if (reason & (1<<i)) {
32                         sprint(buf, "fp: %s", fpcause[i-1]);
33                         goto found;
34                 }
35         sprint(buf, "fp: code 0x%lux", reason);
36
37 found:
38         fataltrap(ur, buf);
39 }
40
41 char*
42 fpexcname(Ureg *ur, ulong fcr31, char *buf)
43 {
44         USED(ur, fcr31, buf);
45         return buf;
46 }