scale.backend.ppc
Class PPCMachine

java.lang.Object
  extended by scale.common.Machine
      extended by scale.backend.ppc.PPCMachine

public class PPCMachine
extends Machine

This is the base class for all PPC specific information.

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

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


Field Summary
static int G4
          Specifies the G4 32-bit PowerPC.
static int G5
          Specifies the G5 64-bit PowerPC.
static int LINUX
          Specifies the linux operating system.
static int MACOSX
          Specifies the mac os x operating system.
 
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
PPCMachine()
          Create a Machine instance for an PPC.
 
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.
 int getISA()
          Return the specific instruction set architecture.
 int getOS()
          Return the specific operating system.
 boolean keepTypeInRegister(Type type, boolean temporary)
          Should a value of this type be allocated to a register?
 boolean littleEndian()
          Return true if the machine is little-endian.
protected  void setup()
          Setup this instance of the machine.
 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, sGetInstructionCountEstimator
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

G4

public static final int G4
Specifies the G4 32-bit PowerPC.

See Also:
Constant Field Values

G5

public static final int G5
Specifies the G5 64-bit PowerPC.

See Also:
Constant Field Values

LINUX

public static final int LINUX
Specifies the linux operating system.

See Also:
Constant Field Values

MACOSX

public static final int MACOSX
Specifies the mac os x operating system.

See Also:
Constant Field Values
Constructor Detail

PPCMachine

public PPCMachine()
Create a Machine instance for an PPC.

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

getISA

public final int getISA()
Return the specific instruction set architecture.


getOS

public final int getOS()
Return the specific operating system.


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)
Should a value of this type be allocated to a register?

Overrides:
keepTypeInRegister in class Machine
Parameters:
type - is the type
temporary - is true if the duration will be short super.keepTypeInRegister() takes care of what we need to do. We only need to ensure that aggregates (structs, unions, etc.) are not put in registers.

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