X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fvfpu.h;h=d77c1e330383d2082118d8aed94256e2ebb8b9f3;hp=12ac9bc389ffc0126ea668fc15c296a32d62a40f;hb=35e78b378435e37ffdb6e53a97f6fa0998999f67;hpb=7fc41b098090ad2d365ef34700542656947aa8ff diff --git a/src/vfpu.h b/src/vfpu.h index 12ac9bc..d77c1e3 100644 --- a/src/vfpu.h +++ b/src/vfpu.h @@ -1,31 +1,19 @@ -#ifndef _VFPU_H -#define _VFPU_H - /** - * Implements a terrible and hacky interface to use a virtual FPU to do floating point operations + * @file vfpu.h + * @brief Implements a terrible and hacky interface to use a virtual FPU to do floating point operations */ -#include +#ifndef _VFPU_H +#define _VFPU_H +#include namespace VFPU { extern int Start(const char * vcd_output = NULL); // Starts the VFPU extern int Halt(); // Halts the VFPU - -/** - -- 000 = add, - -- 001 = substract, - -- 010 = multiply, - -- 011 = divide, - -- 100 = square root - -- 101 = unused - -- 110 = unused - -- 111 = unused - */ typedef enum {ADD=0x000, SUB=0x001, MULT=0x010, DIV=0x011, SQRT=0x100} Opcode; - typedef enum {EVEN=0x00, ZERO=0x01, UP=0x10, DOWN=0x11} Rmode; + typedef enum {EVEN=0x00, ZERO=0x01, UP=0x10, DOWN=0x11} Rmode; // Rounding mode; to even, towards zero, always up, always down typedef std::bitset<32> Register; - extern Register Exec(const Register & a, const Register & b, Opcode op, Rmode rmode = EVEN); // operate with registers extern float Exec(float a, float b, Opcode op, Rmode rmode = EVEN); //converts floats into registers and back }