xref: /netbsd-src/sys/arch/hppa/spmath/setovfl.c (revision d72340ff8e2fb5c3ca49ab85c798389cda4408d6)
1*d72340ffSskrll /*	$NetBSD: setovfl.c,v 1.7 2012/02/04 17:03:10 skrll Exp $	*/
2f4f0d8a3Sfredette 
3f4f0d8a3Sfredette /*	$OpenBSD: setovfl.c,v 1.4 2001/03/29 03:58:19 mickey Exp $	*/
4f4f0d8a3Sfredette 
5f4f0d8a3Sfredette /*
6f4f0d8a3Sfredette  * Copyright 1996 1995 by Open Software Foundation, Inc.
7f4f0d8a3Sfredette  *              All Rights Reserved
8f4f0d8a3Sfredette  *
9f4f0d8a3Sfredette  * Permission to use, copy, modify, and distribute this software and
10f4f0d8a3Sfredette  * its documentation for any purpose and without fee is hereby granted,
11f4f0d8a3Sfredette  * provided that the above copyright notice appears in all copies and
12f4f0d8a3Sfredette  * that both the copyright notice and this permission notice appear in
13f4f0d8a3Sfredette  * supporting documentation.
14f4f0d8a3Sfredette  *
15f4f0d8a3Sfredette  * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
16f4f0d8a3Sfredette  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
17f4f0d8a3Sfredette  * FOR A PARTICULAR PURPOSE.
18f4f0d8a3Sfredette  *
19f4f0d8a3Sfredette  * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
20f4f0d8a3Sfredette  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
21f4f0d8a3Sfredette  * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
22f4f0d8a3Sfredette  * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
23f4f0d8a3Sfredette  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
24f4f0d8a3Sfredette  *
25f4f0d8a3Sfredette  */
26f4f0d8a3Sfredette /*
27f4f0d8a3Sfredette  * pmk1.1
28f4f0d8a3Sfredette  */
29f4f0d8a3Sfredette /*
30f4f0d8a3Sfredette  * (c) Copyright 1986 HEWLETT-PACKARD COMPANY
31f4f0d8a3Sfredette  *
32f4f0d8a3Sfredette  * To anyone who acknowledges that this file is provided "AS IS"
33f4f0d8a3Sfredette  * without any express or implied warranty:
34f4f0d8a3Sfredette  *     permission to use, copy, modify, and distribute this file
35f4f0d8a3Sfredette  * for any purpose is hereby granted without fee, provided that
36f4f0d8a3Sfredette  * the above copyright notice and this notice appears in all
37f4f0d8a3Sfredette  * copies, and that the name of Hewlett-Packard Company not be
38f4f0d8a3Sfredette  * used in advertising or publicity pertaining to distribution
39f4f0d8a3Sfredette  * of the software without specific, written prior permission.
40f4f0d8a3Sfredette  * Hewlett-Packard Company makes no representations about the
41f4f0d8a3Sfredette  * suitability of this software for any purpose.
42f4f0d8a3Sfredette  */
43f4f0d8a3Sfredette 
440c82163cSlukem #include <sys/cdefs.h>
45*d72340ffSskrll __KERNEL_RCSID(0, "$NetBSD: setovfl.c,v 1.7 2012/02/04 17:03:10 skrll Exp $");
46f4f0d8a3Sfredette 
47f4f0d8a3Sfredette #include "../spmath/float.h"
48f4f0d8a3Sfredette #include "../spmath/sgl_float.h"
49f4f0d8a3Sfredette #include "../spmath/dbl_float.h"
50f4f0d8a3Sfredette 
511dc67abbSmatt sgl_floating_point
sgl_setoverflow(unsigned int sign)52454af1c0Sdsl sgl_setoverflow(unsigned int sign)
53f4f0d8a3Sfredette {
54f4f0d8a3Sfredette 	sgl_floating_point result;
55f4f0d8a3Sfredette 
56f4f0d8a3Sfredette 	/* set result to infinity or largest number */
571dc67abbSmatt #if 0
58f4f0d8a3Sfredette 	switch (Rounding_mode()) {
59f4f0d8a3Sfredette 		case ROUNDPLUS:
60f4f0d8a3Sfredette 			if (sign) {
61f4f0d8a3Sfredette 				Sgl_setlargestnegative(result);
621dc67abbSmatt 			} else {
63f4f0d8a3Sfredette 				Sgl_setinfinitypositive(result);
64f4f0d8a3Sfredette 			}
65f4f0d8a3Sfredette 			break;
66f4f0d8a3Sfredette 		case ROUNDMINUS:
67f4f0d8a3Sfredette 			if (sign==0) {
68f4f0d8a3Sfredette 				Sgl_setlargestpositive(result);
691dc67abbSmatt 			} else {
70f4f0d8a3Sfredette 				Sgl_setinfinitynegative(result);
71f4f0d8a3Sfredette 			}
72f4f0d8a3Sfredette 			break;
73f4f0d8a3Sfredette 		case ROUNDNEAREST:
74f4f0d8a3Sfredette 			Sgl_setinfinity(result,sign);
75f4f0d8a3Sfredette 			break;
761dc67abbSmatt 		default:
77f4f0d8a3Sfredette 		case ROUNDZERO:
78f4f0d8a3Sfredette 			Sgl_setlargest(result,sign);
791dc67abbSmatt 			break;
80f4f0d8a3Sfredette 	}
811dc67abbSmatt #endif
821dc67abbSmatt 	Sgl_setinfinity(result,sign);
83f4f0d8a3Sfredette 	return(result);
84f4f0d8a3Sfredette }
85f4f0d8a3Sfredette 
dbl_setoverflow(unsigned int sign)86*d72340ffSskrll dbl_floating_point dbl_setoverflow(unsigned int sign)
87f4f0d8a3Sfredette {
88f4f0d8a3Sfredette 	dbl_floating_point result;
89f4f0d8a3Sfredette 
90f4f0d8a3Sfredette 	/* set result to infinity or largest number */
91f4f0d8a3Sfredette 	/* ignore for now
92f4f0d8a3Sfredette 	switch (Rounding_mode()) {
93f4f0d8a3Sfredette 		case ROUNDPLUS:
94f4f0d8a3Sfredette 			if (sign) {
95f4f0d8a3Sfredette 				Dbl_setlargestnegative(result);
96f4f0d8a3Sfredette 			}
97f4f0d8a3Sfredette 			else {
98f4f0d8a3Sfredette 				Dbl_setinfinitypositive(result);
99f4f0d8a3Sfredette 			}
100f4f0d8a3Sfredette 			break;
101f4f0d8a3Sfredette 		case ROUNDMINUS:
102f4f0d8a3Sfredette 			if (sign==0) {
103f4f0d8a3Sfredette 				Dbl_setlargestpositive(result);
104f4f0d8a3Sfredette 			}
105f4f0d8a3Sfredette 			else {
106f4f0d8a3Sfredette 				Dbl_setinfinitynegative(result);
107f4f0d8a3Sfredette 			}
108f4f0d8a3Sfredette 			break;
109f4f0d8a3Sfredette 		case ROUNDNEAREST:
110f4f0d8a3Sfredette 			Dbl_setinfinity(result,sign);
111f4f0d8a3Sfredette 			break;
112f4f0d8a3Sfredette 		case ROUNDZERO:
113f4f0d8a3Sfredette 			Dbl_setlargest(result,sign);
114f4f0d8a3Sfredette 	}
115f4f0d8a3Sfredette 	*/
1166cff9cd2Sskrll 	Dbl_setinfinity(result.wd0,result.wd1,sign);
117f4f0d8a3Sfredette 	return(result);
118f4f0d8a3Sfredette }
119