scale.backend.mips
Class MipsMachine

java.lang.Object
  extended by scale.common.Machine
      extended by scale.backend.mips.MipsMachine

public class MipsMachine
extends Machine

This is the base class for all Mips specific information.

$Id: MipsMachine.java,v 1.20 2007-11-01 16:52:28 burrill Exp $

Copyright 2008 by the Scale Compiler Group,
Department of Computer Science
University of Massachusetts,
Amherst MA. 01003, USA
All Rights Reserved.


Field Summary
 
Fields inherited from class scale.common.Machine
ALL_CONDITIONAL_MOVES, cacheLineSize, currentMachine, doubleType, floatCalcType, floatType, HAS_EXPENSIVE_SUBROUTINE_CALLS, HAS_FF_CONDITIONAL_MOVE, HAS_FI_CONDITIONAL_MOVE, HAS_IF_CONDITIONAL_MOVE, HAS_II_CONDITIONAL_MOVE, HAS_INT_FROM_FP_CMP, HAS_NO_FP_DIVIDE, HAS_NO_INT_DIVIDE, HAS_NON_VOLATILE_FP_REGS, HAS_PREDICATION, HAS_SIMPLE_FLOOR, HAS_WHILE_LOOP_UNROLL_BENEFIT, intCalcType, longDoubleType, ptrdifftType, signedCharType, signedIntType, signedLongLongType, signedLongType, signedShortType, sizetType, smallestAddressableUnitType, unsignedCharType, unsignedIntType, unsignedLongLongType, unsignedLongType, unsignedShortType, vaListType, voidStarType, wchartType
 
Constructor Summary
MipsMachine()
          Create a Machine instance for an mips.
 
Method Summary
 void addCPPFlags(Vector<java.lang.String> v)
          Add the flags necessary for the C preprocessor.
 int addressableMemoryUnits(int bitSize)
          Return the number of addressable units required
 int alignData(int dataSize)
          Return the integer value alignmentthat satisfies (0 == address % alignment) for the data size specified.
 java.lang.String determineArchitecture(java.lang.String architecture, java.lang.String extension)
          Determine the architecture sub-type.
 int executionCostEstimate(double value)
          Return an estimate of the execution cost to provide this value.
 int executionCostEstimate(long value)
          Return an estimate of the execution cost to provide this value.
 int generalAlignment()
          Return the most general purpose alignment in memory units.
 java.lang.String getArchitectureName()
          Return the name of the specific target architecture.
 java.lang.String getGenericArchitectureName()
          Return the name of the generic target architecture.
 boolean keepTypeInRegister(Type type, boolean temporary)
          Return true if a value of the type should be allocated to a register.
 boolean littleEndian()
          Return true if the machine is little-endian.
 int stackAlignment(Type type)
          Return the alignment of things stored on the stack.
 
Methods inherited from class scale.common.Machine
alignTo, getAsmFileExtension, getAssemblerCommand, getAssemblerCommand, getCacheSize, getCodeGenerator, getDoubleType, getFloatType, getFunctionalUnitDescriptions, getInstructionCountEstimator, getIntegerCalcType, getLongDoubleType, getMaxBlockSize, getPtrdifftType, getRealCalcType, getSignedCharType, getSignedIntType, getSignedLongLongType, getSignedLongType, getSignedShortType, getSizetType, getSmallestAddressableUnitType, getUnsignedCharType, getUnsignedIntType, getUnsignedLongLongType, getUnsignedLongType, getUnsignedShortType, getVaListType, getVoidStarType, getWchartType, hasCapabilities, hasCapability, maxBitFieldSize, setup, setup, sGetInstructionCountEstimator
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MipsMachine

public MipsMachine()
Create a Machine instance for an mips.

Method Detail

getGenericArchitectureName

public java.lang.String getGenericArchitectureName()
Return the name of the generic target architecture.

Specified by:
getGenericArchitectureName in class Machine

getArchitectureName

public java.lang.String getArchitectureName()
Return the name of the specific target architecture.

Specified by:
getArchitectureName in class Machine

determineArchitecture

public java.lang.String determineArchitecture(java.lang.String architecture,
                                              java.lang.String extension)
                                       throws java.lang.Exception
Determine the architecture sub-type.

Specified by:
determineArchitecture in class Machine
Parameters:
architecture - specifies the target architecture
extension - specifies an extension to the a target architecture
Returns:
the name of the specific target architecture generator class.
Throws:
java.lang.Exception - if the extension is not understood

alignData

public int alignData(int dataSize)
Return the integer value alignmentthat satisfies (0 == address % alignment) for the data size specified.

Specified by:
alignData in class Machine
Parameters:
dataSize - is the size of the data in addressable units.

addressableMemoryUnits

public int addressableMemoryUnits(int bitSize)
Return the number of addressable units required

Specified by:
addressableMemoryUnits in class Machine
Parameters:
bitSize - is the number of bits required for the data

executionCostEstimate

public int executionCostEstimate(long value)
Return an estimate of the execution cost to provide this value. The cost should be zero if the value can be represented as a hard-wired register or in the immediate field of an instruction. The cost is relative to the cost of other operations; a good metric is the number of cycles needed to generate the value or load it from memory.

Specified by:
executionCostEstimate in class Machine

executionCostEstimate

public int executionCostEstimate(double value)
Return an estimate of the execution cost to provide this value. The cost should be zero if the value can be represented as a hard-wired register or in the immediate field of an instruction. The cost is relative to the cost of other operations; a good metric is the number of cycles needed to generate the value or load it from memory.

Specified by:
executionCostEstimate in class Machine

addCPPFlags

public void addCPPFlags(Vector<java.lang.String> v)
Add the flags necessary for the C preprocessor.

Specified by:
addCPPFlags in class Machine

generalAlignment

public int generalAlignment()
Return the most general purpose alignment in memory units.

Specified by:
generalAlignment in class Machine

stackAlignment

public final int stackAlignment(Type type)
Return the alignment of things stored on the stack.

Specified by:
stackAlignment in class Machine

littleEndian

public boolean littleEndian()
Return true if the machine is little-endian.

Specified by:
littleEndian in class Machine

keepTypeInRegister

public boolean keepTypeInRegister(Type type,
                                  boolean temporary)
Return true if a value of the type should be allocated to a register. If it is volatile or not an atomic type, it probably should not be kept in a register.

Overrides:
keepTypeInRegister in class Machine
Parameters:
type - is the type
temporary - is true if the duration will be short