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