/* ** emfloat.h ** Header for emfloat.c ** ** BYTEmark (tm) ** BYTE Magazine's Native Mode benchmarks ** Rick Grehan, BYTE Magazine ** ** Create: ** Revision: 3/95 ** ** DISCLAIMER ** The source, executable, and documentation files that comprise ** the BYTEmark benchmarks are made available on an "as is" basis. ** This means that we at BYTE Magazine have made every reasonable ** effort to verify that the there are no errors in the source and ** executable code. We cannot, however, guarantee that the programs ** are error-free. Consequently, McGraw-HIll and BYTE Magazine make ** no claims in regard to the fitness of the source code, executable ** code, and documentation of the BYTEmark. ** Furthermore, BYTE Magazine, McGraw-Hill, and all employees ** of McGraw-Hill cannot be held responsible for any damages resulting ** from the use of this code or the results obtained from using ** this code. */ #include #include #define MAX_EXP 32767L #define MIN_EXP (-32767L) #define IFPF_IS_ZERO 0 #define IFPF_IS_SUBNORMAL 1 #define IFPF_IS_NORMAL 2 #define IFPF_IS_INFINITY 3 #define IFPF_IS_NAN 4 #define IFPF_TYPE_COUNT 5 #define ZERO_ZERO 0 #define ZERO_SUBNORMAL 1 #define ZERO_NORMAL 2 #define ZERO_INFINITY 3 #define ZERO_NAN 4 #define SUBNORMAL_ZERO 5 #define SUBNORMAL_SUBNORMAL 6 #define SUBNORMAL_NORMAL 7 #define SUBNORMAL_INFINITY 8 #define SUBNORMAL_NAN 9 #define NORMAL_ZERO 10 #define NORMAL_SUBNORMAL 11 #define NORMAL_NORMAL 12 #define NORMAL_INFINITY 13 #define NORMAL_NAN 14 #define INFINITY_ZERO 15 #define INFINITY_SUBNORMAL 16 #define INFINITY_NORMAL 17 #define INFINITY_INFINITY 18 #define INFINITY_NAN 19 #define NAN_ZERO 20 #define NAN_SUBNORMAL 21 #define NAN_NORMAL 22 #define NAN_INFINITY 23 #define NAN_NAN 24 #define OPERAND_ZERO 0 #define OPERAND_SUBNORMAL 1 #define OPERAND_NORMAL 2 #define OPERAND_INFINITY 3 #define OPERAND_NAN 4 #define INTERNAL_FPF_PRECISION 4 typedef struct { uint8_t type; /* Indicates, NORMAL, SUBNORMAL, etc. */ uint8_t sign; /* Mantissa sign */ short exp; /* Signed exponent...no bias */ uint16_t mantissa[INTERNAL_FPF_PRECISION]; } InternalFPF; void AddSubInternalFPF(unsigned char operation,InternalFPF *x, InternalFPF *y, InternalFPF *z); void MultiplyInternalFPF(InternalFPF *x,InternalFPF *y, InternalFPF *z); void DivideInternalFPF(InternalFPF *x,InternalFPF *y, InternalFPF *z); void Int32ToInternalFPF(int32_t mylong, InternalFPF *dest);