xref: /openbsd/sys/arch/hppa/spmath/md.h (revision 9593dc34)
1 /*	$OpenBSD: md.h,v 1.8 2024/09/04 07:54:51 mglocker Exp $	*/
2 /*
3   (c) Copyright 1986 HEWLETT-PACKARD COMPANY
4   To anyone who acknowledges that this file is provided "AS IS"
5   without any express or implied warranty:
6       permission to use, copy, modify, and distribute this file
7   for any purpose is hereby granted without fee, provided that
8   the above copyright notice and this notice appears in all
9   copies, and that the name of Hewlett-Packard Company not be
10   used in advertising or publicity pertaining to distribution
11   of the software without specific, written prior permission.
12   Hewlett-Packard Company makes no representations about the
13   suitability of this software for any purpose.
14 */
15 /* @(#)md.h: Revision: 1.8.88.1 Date: 93/12/07 15:06:33 */
16 
17 #include <sys/cdefs.h>
18 
19 /*****************************************************************
20  * Multiply/Divide SFU Internal State                            *
21  *****************************************************************/
22 struct mdsfu_register {
23     int rslt_hi,
24 	rslt_lo,
25 	ovflow;
26     };
27 
28 #define result_hi result->rslt_hi
29 #define result_lo result->rslt_lo
30 #define overflow result->ovflow
31 
32 /*
33  *  Constants
34  */
35 
36 #undef FALSE
37 #define FALSE 0
38 
39 #undef TRUE
40 #define TRUE (!FALSE)
41 
42 #undef NIL
43 #define NIL 0
44 
45 #define WORD_LEN 32
46 #define BIT0 1<<31
47 #define BIT28 0x8
48 #define BIT29 0x4
49 #define BIT30 0x2
50 #define BIT31 0x1
51 
52 	/* Simply copy the arguments to the emulated copies of the registers */
53 #define	mdrr(reg1,reg2,result)	{result_hi = reg1;result_lo = reg2;}
54 
55 /*
56  *  Structures
57  */
58 
59 struct md_state {
60 	int resulthi,	/* high word of result */
61 	    resultlo;	/* low word of result */
62 };
63 
64 void divsfm(int, int, struct mdsfu_register *);
65 void divsfr(int, int, struct mdsfu_register *);
66 void divsim(int, int, struct mdsfu_register *);
67 void divsir(int, int, struct mdsfu_register *);
68 
69 void divu(int, int, int, struct mdsfu_register *);
70 void divufr(unsigned int, unsigned int, struct mdsfu_register *);
71 void divuir(unsigned int, unsigned int, struct mdsfu_register *);
72 
73 void mpyaccs(int, int, struct mdsfu_register *);
74 void mpyaccu(unsigned int, unsigned int, struct mdsfu_register *);
75 void mpys(int, int, struct mdsfu_register *);
76 void mpyscv(int, int, struct mdsfu_register *);
77 void mpyu(unsigned int, unsigned int, struct mdsfu_register *);
78 void mpyucv(unsigned int, unsigned int, struct mdsfu_register *);
79 
80 int s_xmpy(int *, int *, struct mdsfu_register *);
81 int u_xmpy(int *, int *, struct mdsfu_register *);
82