mars.mips.hardware
Class Coprocessor1

java.lang.Object
  |
  +--mars.mips.hardware.Coprocessor1

public class Coprocessor1
extends java.lang.Object

Represents Coprocessor 1, the Floating Point Unit (FPU)


Constructor Summary
Coprocessor1()
           
 
Method Summary
static void addRegistersObserver(java.util.Observer observer)
          Each individual register is a separate object and Observable.
static int clearConditionFlag(int flag)
          Set condition flag to 0 (false).
static void clearConditionFlags()
          Clear all condition flags (0-7).
static int getConditionFlag(int flag)
          Get value of specified condition flag (0-7).
static int getConditionFlagCount()
          Get count of condition flags.
static int getConditionFlags()
          Get array of condition flags (0-7).
static double getDoubleFromRegister(int reg)
          Gets the double value stored in the given FPU register.
static double getDoubleFromRegister(java.lang.String reg)
          Gets the double value stored in the given FPU register.
static float getFloatFromRegister(int reg)
          Gets the float value stored in the given FPU register.
static float getFloatFromRegister(java.lang.String reg)
          Gets the float value stored in the given FPU register.
static Register getRegister(java.lang.String rName)
          Get register object corresponding to given name.
static int getRegisterNumber(java.lang.String n)
          For getting the number representation of the FPU register.
static Register[] getRegisters()
          For returning the set of registers.
static int getValue(int num)
          Returns the value of the FPU register who's number is num.
static void resetRegisters()
          Method to reinitialize the values of the registers.
static int setConditionFlag(int flag)
          Set condition flag to 1 (true).
static void setConditionFlags()
          Set all condition flags (0-7).
static void setRegisterToDouble(int reg, double val)
          Sets the value of the FPU register given to the double value given.
static void setRegisterToDouble(java.lang.String reg, double val)
          Sets the value of the FPU register given to the double value given.
static void setRegisterToFloat(int reg, float val)
          Sets the value of the FPU register given to the value given.
static void setRegisterToFloat(java.lang.String reg, float val)
          Sets the value of the FPU register given to the value given.
static void showRegisters()
          Method for displaying the register values for debugging.
static int updateRegister(int num, int val)
          This method updates the FPU register value who's number is num.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Coprocessor1

public Coprocessor1()
Method Detail

showRegisters

public static void showRegisters()
Method for displaying the register values for debugging.


setRegisterToFloat

public static void setRegisterToFloat(java.lang.String reg,
                                      float val)
Sets the value of the FPU register given to the value given.

Parameters:
reg - Register to set the value of.
val - The desired float value for the register.

setRegisterToFloat

public static void setRegisterToFloat(int reg,
                                      float val)
Sets the value of the FPU register given to the value given.

Parameters:
reg - Register to set the value of.
val - The desired float value for the register.

setRegisterToDouble

public static void setRegisterToDouble(int reg,
                                       double val)
                                throws InvalidRegisterAccessException
Sets the value of the FPU register given to the double value given. The register must be even-numbered, and the low order 32 bits are placed in it. The high order 32 bits are placed in the (odd numbered) register that follows it.

Parameters:
reg - Register to set the value of.
val - The desired double value for the register.
Throws:
InvalidRegisterAccessException - if register ID is invalid or odd-numbered.

setRegisterToDouble

public static void setRegisterToDouble(java.lang.String reg,
                                       double val)
                                throws InvalidRegisterAccessException
Sets the value of the FPU register given to the double value given. The register must be even-numbered, and the low order 32 bits are placed in it. The high order 32 bits are placed in the (odd numbered) register that follows it.

Parameters:
reg - Register to set the value of.
val - The desired double value for the register.
Throws:
InvalidRegisterAccessException - if register ID is invalid or odd-numbered.

getFloatFromRegister

public static float getFloatFromRegister(int reg)
Gets the float value stored in the given FPU register.

Parameters:
reg - Register to get the value of.
Returns:
The float value stored by that register.

getFloatFromRegister

public static float getFloatFromRegister(java.lang.String reg)
Gets the float value stored in the given FPU register.

Parameters:
reg - Register to get the value of.
Returns:
The float value stored by that register.

getDoubleFromRegister

public static double getDoubleFromRegister(int reg)
                                    throws InvalidRegisterAccessException
Gets the double value stored in the given FPU register. The register must be even-numbered.

Parameters:
reg - Register to get the value of.
Throws:
InvalidRegisterAccessException - if register ID is invalid or odd-numbered.

getDoubleFromRegister

public static double getDoubleFromRegister(java.lang.String reg)
                                    throws InvalidRegisterAccessException
Gets the double value stored in the given FPU register. The register must be even-numbered.

Parameters:
reg - Register to get the value of.
Throws:
InvalidRegisterAccessException - if register ID is invalid or odd-numbered.

updateRegister

public static int updateRegister(int num,
                                 int val)
This method updates the FPU register value who's number is num. Note the registers themselves hold an int value. There are helper methods available to which you can give a float or double to store.

Parameters:
num - FPU register to set the value of.
val - The desired int value for the register.

getValue

public static int getValue(int num)
Returns the value of the FPU register who's number is num. Returns the raw int value actually stored there. If you need a float, use Float.intBitsToFloat() to get the equivent float.

Parameters:
num - The FPU register number.
Returns:
The int value of the given register.

getRegisterNumber

public static int getRegisterNumber(java.lang.String n)
For getting the number representation of the FPU register.

Parameters:
n - The string formatted register name to look for.
Returns:
The number of the register represented by the string.

getRegisters

public static Register[] getRegisters()
For returning the set of registers.

Returns:
The set of registers.

getRegister

public static Register getRegister(java.lang.String rName)
Get register object corresponding to given name. If no match, return null.

Parameters:
rName - The FPU register name, must be "$f0" through "$f31".
Returns:
The register object,or null if not found.

resetRegisters

public static void resetRegisters()
Method to reinitialize the values of the registers.


addRegistersObserver

public static void addRegistersObserver(java.util.Observer observer)
Each individual register is a separate object and Observable. This handy method will add the given Observer to each one.


setConditionFlag

public static int setConditionFlag(int flag)
Set condition flag to 1 (true).

Parameters:
flag - condition flag number (0-7)
Returns:
previous flag setting (0 or 1)

clearConditionFlag

public static int clearConditionFlag(int flag)
Set condition flag to 0 (false).

Parameters:
flag - condition flag number (0-7)
Returns:
previous flag setting (0 or 1)

getConditionFlag

public static int getConditionFlag(int flag)
Get value of specified condition flag (0-7).

Parameters:
flag - condition flag number (0-7)
Returns:
0 if condition is false, 1 if condition is true

getConditionFlags

public static int getConditionFlags()
Get array of condition flags (0-7).

Returns:
array of int condition flags

clearConditionFlags

public static void clearConditionFlags()
Clear all condition flags (0-7).


setConditionFlags

public static void setConditionFlags()
Set all condition flags (0-7).


getConditionFlagCount

public static int getConditionFlagCount()
Get count of condition flags.

Returns:
number of condition flags