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.ia32;
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_LowTableSwitch InstructionFormat */
053  public static final byte MIR_LowTableSwitch_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+0;
054  /** Typecode for the MIR_Move InstructionFormat */
055  public static final byte MIR_Move_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+1;
056  /** Typecode for the MIR_CondMove InstructionFormat */
057  public static final byte MIR_CondMove_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+2;
058  /** Typecode for the MIR_Lea InstructionFormat */
059  public static final byte MIR_Lea_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+3;
060  /** Typecode for the MIR_BinaryAcc InstructionFormat */
061  public static final byte MIR_BinaryAcc_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+4;
062  /** Typecode for the MIR_Divide InstructionFormat */
063  public static final byte MIR_Divide_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+5;
064  /** Typecode for the MIR_Multiply InstructionFormat */
065  public static final byte MIR_Multiply_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+6;
066  /** Typecode for the MIR_ConvertDW2QW InstructionFormat */
067  public static final byte MIR_ConvertDW2QW_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+7;
068  /** Typecode for the MIR_UnaryAcc InstructionFormat */
069  public static final byte MIR_UnaryAcc_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+8;
070  /** Typecode for the MIR_Compare InstructionFormat */
071  public static final byte MIR_Compare_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+9;
072  /** Typecode for the MIR_CompareExchange InstructionFormat */
073  public static final byte MIR_CompareExchange_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+10;
074  /** Typecode for the MIR_CompareExchange8B InstructionFormat */
075  public static final byte MIR_CompareExchange8B_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+11;
076  /** Typecode for the MIR_Trap InstructionFormat */
077  public static final byte MIR_Trap_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+12;
078  /** Typecode for the MIR_TrapIf InstructionFormat */
079  public static final byte MIR_TrapIf_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+13;
080  /** Typecode for the MIR_Branch InstructionFormat */
081  public static final byte MIR_Branch_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+14;
082  /** Typecode for the MIR_CondBranch InstructionFormat */
083  public static final byte MIR_CondBranch_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+15;
084  /** Typecode for the MIR_CondBranch2 InstructionFormat */
085  public static final byte MIR_CondBranch2_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+16;
086  /** Typecode for the MIR_Call InstructionFormat */
087  public static final byte MIR_Call_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+17;
088  /** Typecode for the MIR_Empty InstructionFormat */
089  public static final byte MIR_Empty_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+18;
090  /** Typecode for the MIR_Return InstructionFormat */
091  public static final byte MIR_Return_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+19;
092  /** Typecode for the MIR_Set InstructionFormat */
093  public static final byte MIR_Set_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+20;
094  /** Typecode for the MIR_Test InstructionFormat */
095  public static final byte MIR_Test_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+21;
096  /** Typecode for the MIR_Nullary InstructionFormat */
097  public static final byte MIR_Nullary_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+22;
098  /** Typecode for the MIR_UnaryNoRes InstructionFormat */
099  public static final byte MIR_UnaryNoRes_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+23;
100  /** Typecode for the MIR_Unary InstructionFormat */
101  public static final byte MIR_Unary_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+24;
102  /** Typecode for the MIR_XChng InstructionFormat */
103  public static final byte MIR_XChng_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+25;
104  /** Typecode for the MIR_DoubleShift InstructionFormat */
105  public static final byte MIR_DoubleShift_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+26;
106  /** Typecode for the MIR_CaseLabel InstructionFormat */
107  public static final byte MIR_CaseLabel_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+27;
108  /** Typecode for the MIR_FSave InstructionFormat */
109  public static final byte MIR_FSave_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+28;
110  /** Typecode for the MIR_RDTSC InstructionFormat */
111  public static final byte MIR_RDTSC_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+29;
112  /** Typecode for the MIR_CacheOp InstructionFormat */
113  public static final byte MIR_CacheOp_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+30;
114
115  /** Shared traits for operators of the MIR_LowTableSwitch InstructionFormat */
116  public static final int MIR_LowTableSwitch_traits = Operator.varUses;
117  /** Shared traits for operators of the MIR_Move InstructionFormat */
118  public static final int MIR_Move_traits = Operator.none;
119  /** Shared traits for operators of the MIR_CondMove InstructionFormat */
120  public static final int MIR_CondMove_traits = Operator.none;
121  /** Shared traits for operators of the MIR_Lea InstructionFormat */
122  public static final int MIR_Lea_traits = Operator.none;
123  /** Shared traits for operators of the MIR_BinaryAcc InstructionFormat */
124  public static final int MIR_BinaryAcc_traits = Operator.none;
125  /** Shared traits for operators of the MIR_Divide InstructionFormat */
126  public static final int MIR_Divide_traits = Operator.none;
127  /** Shared traits for operators of the MIR_Multiply InstructionFormat */
128  public static final int MIR_Multiply_traits = Operator.none;
129  /** Shared traits for operators of the MIR_ConvertDW2QW InstructionFormat */
130  public static final int MIR_ConvertDW2QW_traits = Operator.none;
131  /** Shared traits for operators of the MIR_UnaryAcc InstructionFormat */
132  public static final int MIR_UnaryAcc_traits = Operator.none;
133  /** Shared traits for operators of the MIR_Compare InstructionFormat */
134  public static final int MIR_Compare_traits = Operator.none;
135  /** Shared traits for operators of the MIR_CompareExchange InstructionFormat */
136  public static final int MIR_CompareExchange_traits = Operator.none;
137  /** Shared traits for operators of the MIR_CompareExchange8B InstructionFormat */
138  public static final int MIR_CompareExchange8B_traits = Operator.none;
139  /** Shared traits for operators of the MIR_Trap InstructionFormat */
140  public static final int MIR_Trap_traits = Operator.none;
141  /** Shared traits for operators of the MIR_TrapIf InstructionFormat */
142  public static final int MIR_TrapIf_traits = Operator.none;
143  /** Shared traits for operators of the MIR_Branch InstructionFormat */
144  public static final int MIR_Branch_traits = Operator.none;
145  /** Shared traits for operators of the MIR_CondBranch InstructionFormat */
146  public static final int MIR_CondBranch_traits = Operator.none;
147  /** Shared traits for operators of the MIR_CondBranch2 InstructionFormat */
148  public static final int MIR_CondBranch2_traits = Operator.none;
149  /** Shared traits for operators of the MIR_Call InstructionFormat */
150  public static final int MIR_Call_traits = Operator.varUses;
151  /** Shared traits for operators of the MIR_Empty InstructionFormat */
152  public static final int MIR_Empty_traits = Operator.none;
153  /** Shared traits for operators of the MIR_Return InstructionFormat */
154  public static final int MIR_Return_traits = Operator.none;
155  /** Shared traits for operators of the MIR_Set InstructionFormat */
156  public static final int MIR_Set_traits = Operator.none;
157  /** Shared traits for operators of the MIR_Test InstructionFormat */
158  public static final int MIR_Test_traits = Operator.none;
159  /** Shared traits for operators of the MIR_Nullary InstructionFormat */
160  public static final int MIR_Nullary_traits = Operator.none;
161  /** Shared traits for operators of the MIR_UnaryNoRes InstructionFormat */
162  public static final int MIR_UnaryNoRes_traits = Operator.none;
163  /** Shared traits for operators of the MIR_Unary InstructionFormat */
164  public static final int MIR_Unary_traits = Operator.none;
165  /** Shared traits for operators of the MIR_XChng InstructionFormat */
166  public static final int MIR_XChng_traits = Operator.none;
167  /** Shared traits for operators of the MIR_DoubleShift InstructionFormat */
168  public static final int MIR_DoubleShift_traits = Operator.none;
169  /** Shared traits for operators of the MIR_CaseLabel InstructionFormat */
170  public static final int MIR_CaseLabel_traits = Operator.none;
171  /** Shared traits for operators of the MIR_FSave InstructionFormat */
172  public static final int MIR_FSave_traits = Operator.none;
173  /** Shared traits for operators of the MIR_RDTSC InstructionFormat */
174  public static final int MIR_RDTSC_traits = Operator.none;
175  /** Shared traits for operators of the MIR_CacheOp InstructionFormat */
176  public static final int MIR_CacheOp_traits = Operator.none;
177
178}
179