1 /* $OpenBSD: md.h,v 1.7 2003/04/10 17:27:58 mickey 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 * Muliply/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