scale.backend.alpha
Class AlphaMachine

java.lang.Object
  extended by scale.common.Machine
      extended by scale.backend.alpha.AlphaMachine

public class AlphaMachine
extends Machine

This is the base class for all Alpha specific information.

$Id: AlphaMachine.java,v 1.40 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
static int FU_BRANCH
           
static int FU_FPALU
           
static int FU_INTALU
           
static int FU_LDST
           
static int FU_NONE
           
 
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
AlphaMachine()
          Create a Machine instance for an alpha.
 
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 getAssemblerCommand(int backendFeatures)
          Return the assembler command appropriate to the architecture.
 byte[] getFunctionalUnitDescriptions()
          Return the functional unit information.
 java.lang.String getGenericArchitectureName()
          Return the name of the generic target architecture.
 boolean hasBWX()
          Return true if processor has the BWX extensions.
 boolean hasCIX()
          Return true if processor has the CIX extensions.
 boolean hasFIX()
          Return true if processor has the FIX extensions.
 boolean hasMVI()
          Return true if processor has the MVI extensions.
 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 maxBitFieldSize()
          Return the maximum bit field size (64) in bits.
protected  void setup()
          Setup this instance of the machine.
 boolean simpleInteger(long value)
          Return true if it is faster to generate the integer value than to load it.
 int stackAlignment(Type type)
          Return the alignment of things stored on the stack.
 
Methods inherited from class scale.common.Machine
alignTo, getAsmFileExtension, getAssemblerCommand, getCacheSize, getCodeGenerator, getDoubleType, getFloatType, getInstructionCountEstimator, getIntegerCalcType, getLongDoubleType, getMaxBlockSize, getPtrdifftType, getRealCalcType, getSignedCharType, getSignedIntType, getSignedLongLongType, getSignedLongType, getSignedShortType, getSizetType, getSmallestAddressableUnitType, getUnsignedCharType, getUnsignedIntType, getUnsignedLongLongType, getUnsignedLongType, getUnsignedShortType, getVaListType, getVoidStarType, getWchartType, hasCapabilities, hasCapability, setup, sGetInstructionCountEstimator
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

FU_NONE

public static final int FU_NONE
See Also:
Constant Field Values

FU_LDST

public static final int FU_LDST
See Also:
Constant Field Values

FU_INTALU

public static final int FU_INTALU
See Also:
Constant Field Values

FU_FPALU

public static final int FU_FPALU
See Also:
Constant Field Values

FU_BRANCH

public static final int FU_BRANCH
See Also:
Constant Field Values
Constructor Detail

AlphaMachine

public AlphaMachine()
Create a Machine instance for an alpha.

Method Detail

setup

protected void setup()
Description copied from class: Machine
Setup this instance of the machine. Each code generator should implement this method. For example
   protected void setup()
   {
     super.setup(); // Initialize type, etc that are not set here.
 
     // Specify the types that are different.
 
     PointerType.setMinBitSize(64);
     intCalcType = scale.clef.type.SignedIntegerType.create(64);
     ....
   }
 

Overrides:
setup in class Machine

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

hasBWX

public final boolean hasBWX()
Return true if processor has the BWX extensions.


hasFIX

public final boolean hasFIX()
Return true if processor has the FIX extensions.


hasCIX

public final boolean hasCIX()
Return true if processor has the CIX extensions.


hasMVI

public final boolean hasMVI()
Return true if processor has the MVI extensions.


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

simpleInteger

public boolean simpleInteger(long value)
Return true if it is faster to generate the integer value than to load it.


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

maxBitFieldSize

public int maxBitFieldSize()
Return the maximum bit field size (64) in bits. Also, bit fields can not be split over this boundary.

Overrides:
maxBitFieldSize 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 final 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

getAssemblerCommand

public java.lang.String getAssemblerCommand(int backendFeatures)
Return the assembler command appropriate to the architecture.

Overrides:
getAssemblerCommand in class Machine
Parameters:
backendFeatures - specifies code generation flags such as -g

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

getFunctionalUnitDescriptions

public byte[] getFunctionalUnitDescriptions()
Return the functional unit information. This information is an array where each element of the array is the number of instructions that can be issued to the corresponding functional unit.

Overrides:
getFunctionalUnitDescriptions in class Machine
See Also:
Instruction.getFunctionalUnit()