Newsgroups: fj.sys.news
Path: galaxy.trc.rwcp.or.jp!jaist-news!cs.titech!nirvana.cs.titech!wnoc-tyo-news!scslwide!wsgw!wsservra!sakamoto
From: sakamoto@sm.sony.co.jp (Tomohiko Sakamoto)
Subject: Re: mathtrap
Message-ID: <CLpsz6.5Ms@wsservra.sm.sony.co.jp>
Sender: news@wsservra.sm.sony.co.jp (Usenet News System)
Nntp-Posting-Host: sak3
Reply-To: sakamoto@sm.sony.co.jp
Organization: Workstation Div., Supermicro Systems Group, Sony Corporation
References: <MURAKAMI.94Feb22180604@peterson.itakura.nuee.nagoya-u.ac.jp>
Date: Thu, 24 Feb 1994 06:06:41 GMT
Lines: 96
Xref: galaxy.trc.rwcp.or.jp fj.sys.news:2837
X-originally-archived-at: http://galaxy.rwcp.or.jp/text/cgi-bin/newsarticle2?ng=fj.sys.news&nb=2837&hd=a
X-reformat-date: Mon, 18 Oct 2004 15:18:22 +0900
X-reformat-comment: Tabs were expanded into 4 column tabstops by the Galaxy's archiver. See http://katsu.watanabe.name/ancientfj/galaxy-format.html for more info.

In article <MURAKAMI.94Feb22180604@peterson.itakura.nuee.nagoya-u.ac.jp>,
        murakami@itakura.nuee.nagoya-u.ac.jp (Takuya Murakami) says:
>   RISC NEWS $B$G$OIbF0>.?tE@Nc30$O07$($J$$$N$G$7$g$&$+!)(B

floating point coprocessor $B$N(B control/status register $B$K@_Dj$r$9$l$P(B
$B$G$-$^$9!#(B
NEWS-OS 4.2.1R $B$G!"F~NO$7$??t$N5U?t$r5a$a$k%W%m%0%i%`$r<($7$^$9!#(B

% cat inv.c
#include <signal.h>
#include <setjmp.h>
#include <machine/fpu.h>

jmp_buf begin;

trap_enable()
{
union fpc_csr csr;

csr.fc_word = get_fpc_csr();
csr.fc_struct.en_divide0 = 1;
csr.fc_struct.en_overflow = 1;
csr.fc_struct.en_underflow = 1;
set_fpc_csr(csr.fc_word);
}

fpe_handler()
{
union fpc_csr csr;

csr.fc_word = get_fpc_csr();
if (csr.fc_struct.se_divide0)
printf("\tdivision by zero\n");
else if (csr.fc_struct.se_overflow)
printf("\toverflow\n");
else if (csr.fc_struct.se_underflow)
printf("\tunderflow\n");
longjmp(begin, 0);
}

main()
{
double a;

trap_enable();
setjmp(begin);
signal(SIGFPE, fpe_handler);
while (scanf("%lf", &a) == 1) {
printf("\t%e\n", a);
printf("\t%e\n", 1.0 / a);
}
}
% cat fpc_csr.s
.globlget_fpc_csr
.globlset_fpc_csr

get_fpc_csr:
cfc1$2, $31
j$31

set_fpc_csr:
ctc1$4, $31
j$31
% cc inv.c fpc_csr.s
inv.c:
fpc_csr.s:
% a.out
3
3.000000e+00
3.333333e-01
2
2.000000e+00
5.000000e-01
1
1.000000e+00
1.000000e+00
0
0.000000e+00
division by zero
1e-309
1.000000e-309
overflow
1e308
1.000000e+308
underflow
^D
% 


>   $B$b$707$($J$$$N$G$"$l$P!"$;$a$F$"$kJQ?t$,(B Not a Number, Overflow $B$+(B
> $B$I$&$+Ey$NH=JL$r$7$?$$$N$G$9$,!"$=$N$h$&$JJ}K!$O$"$k$N$G$7$g$&$+!)(B

fp_class(3) $B$r;2>H$7$F$/$@$5$$!#(B

--
$B:dK\CRI'(Bsakamoto@sm.sony.co.jp
