001
002/*
003 *  This file is part of the Jikes RVM project (http://jikesrvm.org).
004 *
005 *  This file is licensed to You under the Eclipse Public License (EPL);
006 *  You may not use this file except in compliance with the License. You
007 *  may obtain a copy of the License at
008 *
009 *      http://www.opensource.org/licenses/eclipse-1.0.php
010 *
011 *  See the COPYRIGHT.txt file distributed with this work for information
012 *  regarding copyright ownership.
013 */
014package org.jikesrvm.compilers.opt.ir.ppc;
015
016import org.jikesrvm.VM;
017import org.jikesrvm.compilers.opt.OptimizingCompilerException;
018import org.jikesrvm.compilers.opt.ir.operand.*;
019import org.jikesrvm.compilers.opt.ir.InstructionFormat;
020import org.jikesrvm.compilers.opt.ir.Operator;
021
022/**
023 * Abstract parent class of all InstructionFormat classes.<p>
024 *
025 * The header comment for {@link org.jikesrvm.compilers.opt.ir.Instruction} contains
026 * an explanation of the role of InstructionFormats in the
027 * opt compiler's IR.<p>
028 *
029 * NOTE: We currently only support a subset of cases of variable operands.
030 * <ul>
031 *  <li>instructions with 0+ defs, 0+ def/uses, 0+ uses, and a variable number of uses
032 *  <li>instructions with 0+ defs and variable number of defs.
033 * Variable number of def/uses and variable number of defs with non-zero
034 * number of def/uses or uses are not supported (and will generate java code
035 * for the instruction format that doesn't compile).  Fully general support would
036 * be a pain in the butt and since it currently isn't required, we don't do it.
037 * </ul>
038 * <p>
039 *
040 * THIS FILE IS MACHINE_GENERATED. DO NOT EDIT.
041 * See ArchInstructionFormats.template, InstructionFormatList.dat,
042 * OperatorList.dat, etc
043 */
044public abstract class ArchInstructionFormat extends InstructionFormat {
045
046  static {
047    if (MIN_OPERAND_ARRAY_LENGTH != 5) {
048      throw new Error("Disagreement between architecture and common instruction formats on minimum operands");
049    }
050  }
051
052  /** Typecode for the MIR_Load InstructionFormat */
053  public static final byte MIR_Load_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+0;
054  /** Typecode for the MIR_LoadUpdate InstructionFormat */
055  public static final byte MIR_LoadUpdate_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+1;
056  /** Typecode for the MIR_Store InstructionFormat */
057  public static final byte MIR_Store_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+2;
058  /** Typecode for the MIR_StoreUpdate InstructionFormat */
059  public static final byte MIR_StoreUpdate_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+3;
060  /** Typecode for the MIR_CacheOp InstructionFormat */
061  public static final byte MIR_CacheOp_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+4;
062  /** Typecode for the MIR_Move InstructionFormat */
063  public static final byte MIR_Move_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+5;
064  /** Typecode for the MIR_Trap InstructionFormat */
065  public static final byte MIR_Trap_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+6;
066  /** Typecode for the MIR_DataInt InstructionFormat */
067  public static final byte MIR_DataInt_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+7;
068  /** Typecode for the MIR_DataLabel InstructionFormat */
069  public static final byte MIR_DataLabel_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+8;
070  /** Typecode for the MIR_Branch InstructionFormat */
071  public static final byte MIR_Branch_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+9;
072  /** Typecode for the MIR_CondBranch InstructionFormat */
073  public static final byte MIR_CondBranch_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+10;
074  /** Typecode for the MIR_CondBranch2 InstructionFormat */
075  public static final byte MIR_CondBranch2_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+11;
076  /** Typecode for the MIR_Call InstructionFormat */
077  public static final byte MIR_Call_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+12;
078  /** Typecode for the MIR_CondCall InstructionFormat */
079  public static final byte MIR_CondCall_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+13;
080  /** Typecode for the MIR_Return InstructionFormat */
081  public static final byte MIR_Return_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+14;
082  /** Typecode for the MIR_Empty InstructionFormat */
083  public static final byte MIR_Empty_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+15;
084  /** Typecode for the MIR_Nullary InstructionFormat */
085  public static final byte MIR_Nullary_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+16;
086  /** Typecode for the MIR_Unary InstructionFormat */
087  public static final byte MIR_Unary_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+17;
088  /** Typecode for the MIR_Binary InstructionFormat */
089  public static final byte MIR_Binary_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+18;
090  /** Typecode for the MIR_Condition InstructionFormat */
091  public static final byte MIR_Condition_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+19;
092  /** Typecode for the MIR_Ternary InstructionFormat */
093  public static final byte MIR_Ternary_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+20;
094  /** Typecode for the MIR_LowTableSwitch InstructionFormat */
095  public static final byte MIR_LowTableSwitch_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+21;
096  /** Typecode for the MIR_RotateAndMask InstructionFormat */
097  public static final byte MIR_RotateAndMask_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+22;
098
099  /** Shared traits for operators of the MIR_Load InstructionFormat */
100  public static final int MIR_Load_traits = Operator.none;
101  /** Shared traits for operators of the MIR_LoadUpdate InstructionFormat */
102  public static final int MIR_LoadUpdate_traits = Operator.none;
103  /** Shared traits for operators of the MIR_Store InstructionFormat */
104  public static final int MIR_Store_traits = Operator.none;
105  /** Shared traits for operators of the MIR_StoreUpdate InstructionFormat */
106  public static final int MIR_StoreUpdate_traits = Operator.none;
107  /** Shared traits for operators of the MIR_CacheOp InstructionFormat */
108  public static final int MIR_CacheOp_traits = Operator.none;
109  /** Shared traits for operators of the MIR_Move InstructionFormat */
110  public static final int MIR_Move_traits = Operator.none;
111  /** Shared traits for operators of the MIR_Trap InstructionFormat */
112  public static final int MIR_Trap_traits = Operator.none;
113  /** Shared traits for operators of the MIR_DataInt InstructionFormat */
114  public static final int MIR_DataInt_traits = Operator.none;
115  /** Shared traits for operators of the MIR_DataLabel InstructionFormat */
116  public static final int MIR_DataLabel_traits = Operator.none;
117  /** Shared traits for operators of the MIR_Branch InstructionFormat */
118  public static final int MIR_Branch_traits = Operator.none;
119  /** Shared traits for operators of the MIR_CondBranch InstructionFormat */
120  public static final int MIR_CondBranch_traits = Operator.none;
121  /** Shared traits for operators of the MIR_CondBranch2 InstructionFormat */
122  public static final int MIR_CondBranch2_traits = Operator.none;
123  /** Shared traits for operators of the MIR_Call InstructionFormat */
124  public static final int MIR_Call_traits = Operator.varUses;
125  /** Shared traits for operators of the MIR_CondCall InstructionFormat */
126  public static final int MIR_CondCall_traits = Operator.varUses;
127  /** Shared traits for operators of the MIR_Return InstructionFormat */
128  public static final int MIR_Return_traits = Operator.none;
129  /** Shared traits for operators of the MIR_Empty InstructionFormat */
130  public static final int MIR_Empty_traits = Operator.none;
131  /** Shared traits for operators of the MIR_Nullary InstructionFormat */
132  public static final int MIR_Nullary_traits = Operator.none;
133  /** Shared traits for operators of the MIR_Unary InstructionFormat */
134  public static final int MIR_Unary_traits = Operator.none;
135  /** Shared traits for operators of the MIR_Binary InstructionFormat */
136  public static final int MIR_Binary_traits = Operator.none;
137  /** Shared traits for operators of the MIR_Condition InstructionFormat */
138  public static final int MIR_Condition_traits = Operator.none;
139  /** Shared traits for operators of the MIR_Ternary InstructionFormat */
140  public static final int MIR_Ternary_traits = Operator.none;
141  /** Shared traits for operators of the MIR_LowTableSwitch InstructionFormat */
142  public static final int MIR_LowTableSwitch_traits = Operator.varUses;
143  /** Shared traits for operators of the MIR_RotateAndMask InstructionFormat */
144  public static final int MIR_RotateAndMask_traits = Operator.none;
145
146}
147