001 002 /* 003 * THIS FILE IS MACHINE_GENERATED. DO NOT EDIT. 004 * See InstructionFormats.template, InstructionFormatList.dat, 005 * OperatorList.dat, etc. 006 */ 007 008 package org.jikesrvm.compilers.opt.ir; 009 010 import org.jikesrvm.VM; 011 import org.jikesrvm.compilers.opt.OptimizingCompilerException; 012 import org.jikesrvm.compilers.opt.ir.operand.*; 013 014 /** 015 * Abstract parent class of all InstructionFormat classes. 016 * 017 * The header comment for {@link Instruction} contains 018 * an explanation of the role of InstructionFormats in the 019 * opt compiler's IR. 020 */ 021 public abstract class InstructionFormat { 022 023 /** 024 * Make all operand arrays created via the InstructionFormat constructors 025 * at least this big to reduce the chance of having to resize the array 026 * if the instruction is mutated. 027 */ 028 static final int MIN_OPERAND_ARRAY_LENGTH = 5; 029 030 /** Typecode for the Unassigned InstructionFormat */ 031 public static final byte Unassigned_format = 0; 032 /** Typecode for the Move InstructionFormat */ 033 public static final byte Move_format = 1; 034 /** Typecode for the Return InstructionFormat */ 035 public static final byte Return_format = 2; 036 /** Typecode for the Prologue InstructionFormat */ 037 public static final byte Prologue_format = 3; 038 /** Typecode for the InstrumentedCounter InstructionFormat */ 039 public static final byte InstrumentedCounter_format = 4; 040 /** Typecode for the Empty InstructionFormat */ 041 public static final byte Empty_format = 5; 042 /** Typecode for the Nullary InstructionFormat */ 043 public static final byte Nullary_format = 6; 044 /** Typecode for the New InstructionFormat */ 045 public static final byte New_format = 7; 046 /** Typecode for the NewArray InstructionFormat */ 047 public static final byte NewArray_format = 8; 048 /** Typecode for the Multianewarray InstructionFormat */ 049 public static final byte Multianewarray_format = 9; 050 /** Typecode for the Athrow InstructionFormat */ 051 public static final byte Athrow_format = 10; 052 /** Typecode for the MonitorOp InstructionFormat */ 053 public static final byte MonitorOp_format = 11; 054 /** Typecode for the CacheOp InstructionFormat */ 055 public static final byte CacheOp_format = 12; 056 /** Typecode for the NullCheck InstructionFormat */ 057 public static final byte NullCheck_format = 13; 058 /** Typecode for the ZeroCheck InstructionFormat */ 059 public static final byte ZeroCheck_format = 14; 060 /** Typecode for the BoundsCheck InstructionFormat */ 061 public static final byte BoundsCheck_format = 15; 062 /** Typecode for the StoreCheck InstructionFormat */ 063 public static final byte StoreCheck_format = 16; 064 /** Typecode for the TypeCheck InstructionFormat */ 065 public static final byte TypeCheck_format = 17; 066 /** Typecode for the InstanceOf InstructionFormat */ 067 public static final byte InstanceOf_format = 18; 068 /** Typecode for the Trap InstructionFormat */ 069 public static final byte Trap_format = 19; 070 /** Typecode for the TrapIf InstructionFormat */ 071 public static final byte TrapIf_format = 20; 072 /** Typecode for the IfCmp InstructionFormat */ 073 public static final byte IfCmp_format = 21; 074 /** Typecode for the IfCmp2 InstructionFormat */ 075 public static final byte IfCmp2_format = 22; 076 /** Typecode for the InlineGuard InstructionFormat */ 077 public static final byte InlineGuard_format = 23; 078 /** Typecode for the BooleanCmp InstructionFormat */ 079 public static final byte BooleanCmp_format = 24; 080 /** Typecode for the CondMove InstructionFormat */ 081 public static final byte CondMove_format = 25; 082 /** Typecode for the Goto InstructionFormat */ 083 public static final byte Goto_format = 26; 084 /** Typecode for the Label InstructionFormat */ 085 public static final byte Label_format = 27; 086 /** Typecode for the BBend InstructionFormat */ 087 public static final byte BBend_format = 28; 088 /** Typecode for the Unary InstructionFormat */ 089 public static final byte Unary_format = 29; 090 /** Typecode for the GuardedUnary InstructionFormat */ 091 public static final byte GuardedUnary_format = 30; 092 /** Typecode for the Binary InstructionFormat */ 093 public static final byte Binary_format = 31; 094 /** Typecode for the GuardedBinary InstructionFormat */ 095 public static final byte GuardedBinary_format = 32; 096 /** Typecode for the GuardedSet InstructionFormat */ 097 public static final byte GuardedSet_format = 33; 098 /** Typecode for the ALoad InstructionFormat */ 099 public static final byte ALoad_format = 34; 100 /** Typecode for the GetField InstructionFormat */ 101 public static final byte GetField_format = 35; 102 /** Typecode for the GetStatic InstructionFormat */ 103 public static final byte GetStatic_format = 36; 104 /** Typecode for the Load InstructionFormat */ 105 public static final byte Load_format = 37; 106 /** Typecode for the AStore InstructionFormat */ 107 public static final byte AStore_format = 38; 108 /** Typecode for the PutField InstructionFormat */ 109 public static final byte PutField_format = 39; 110 /** Typecode for the PutStatic InstructionFormat */ 111 public static final byte PutStatic_format = 40; 112 /** Typecode for the Store InstructionFormat */ 113 public static final byte Store_format = 41; 114 /** Typecode for the Prepare InstructionFormat */ 115 public static final byte Prepare_format = 42; 116 /** Typecode for the Attempt InstructionFormat */ 117 public static final byte Attempt_format = 43; 118 /** Typecode for the Call InstructionFormat */ 119 public static final byte Call_format = 44; 120 /** Typecode for the TableSwitch InstructionFormat */ 121 public static final byte TableSwitch_format = 45; 122 /** Typecode for the LookupSwitch InstructionFormat */ 123 public static final byte LookupSwitch_format = 46; 124 /** Typecode for the LowTableSwitch InstructionFormat */ 125 public static final byte LowTableSwitch_format = 47; 126 /** Typecode for the Phi InstructionFormat */ 127 public static final byte Phi_format = 48; 128 /** Typecode for the OsrBarrier InstructionFormat */ 129 public static final byte OsrBarrier_format = 49; 130 /** Typecode for the OsrPoint InstructionFormat */ 131 public static final byte OsrPoint_format = 50; 132 /** Typecode for the ARCH_INDEPENDENT_INSTR_FORMAT_END InstructionFormat */ 133 public static final byte ARCH_INDEPENDENT_INSTR_FORMAT_END_format = 51; 134 /** Typecode for the MIR_LowTableSwitch InstructionFormat */ 135 public static final byte MIR_LowTableSwitch_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+0; 136 /** Typecode for the MIR_Move InstructionFormat */ 137 public static final byte MIR_Move_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+1; 138 /** Typecode for the MIR_CondMove InstructionFormat */ 139 public static final byte MIR_CondMove_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+2; 140 /** Typecode for the MIR_Lea InstructionFormat */ 141 public static final byte MIR_Lea_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+3; 142 /** Typecode for the MIR_BinaryAcc InstructionFormat */ 143 public static final byte MIR_BinaryAcc_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+4; 144 /** Typecode for the MIR_Divide InstructionFormat */ 145 public static final byte MIR_Divide_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+5; 146 /** Typecode for the MIR_Multiply InstructionFormat */ 147 public static final byte MIR_Multiply_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+6; 148 /** Typecode for the MIR_ConvertDW2QW InstructionFormat */ 149 public static final byte MIR_ConvertDW2QW_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+7; 150 /** Typecode for the MIR_UnaryAcc InstructionFormat */ 151 public static final byte MIR_UnaryAcc_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+8; 152 /** Typecode for the MIR_Compare InstructionFormat */ 153 public static final byte MIR_Compare_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+9; 154 /** Typecode for the MIR_CompareExchange InstructionFormat */ 155 public static final byte MIR_CompareExchange_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+10; 156 /** Typecode for the MIR_CompareExchange8B InstructionFormat */ 157 public static final byte MIR_CompareExchange8B_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+11; 158 /** Typecode for the MIR_Trap InstructionFormat */ 159 public static final byte MIR_Trap_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+12; 160 /** Typecode for the MIR_TrapIf InstructionFormat */ 161 public static final byte MIR_TrapIf_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+13; 162 /** Typecode for the MIR_Branch InstructionFormat */ 163 public static final byte MIR_Branch_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+14; 164 /** Typecode for the MIR_CondBranch InstructionFormat */ 165 public static final byte MIR_CondBranch_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+15; 166 /** Typecode for the MIR_CondBranch2 InstructionFormat */ 167 public static final byte MIR_CondBranch2_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+16; 168 /** Typecode for the MIR_Call InstructionFormat */ 169 public static final byte MIR_Call_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+17; 170 /** Typecode for the MIR_Empty InstructionFormat */ 171 public static final byte MIR_Empty_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+18; 172 /** Typecode for the MIR_Return InstructionFormat */ 173 public static final byte MIR_Return_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+19; 174 /** Typecode for the MIR_Set InstructionFormat */ 175 public static final byte MIR_Set_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+20; 176 /** Typecode for the MIR_Test InstructionFormat */ 177 public static final byte MIR_Test_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+21; 178 /** Typecode for the MIR_Nullary InstructionFormat */ 179 public static final byte MIR_Nullary_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+22; 180 /** Typecode for the MIR_UnaryNoRes InstructionFormat */ 181 public static final byte MIR_UnaryNoRes_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+23; 182 /** Typecode for the MIR_Unary InstructionFormat */ 183 public static final byte MIR_Unary_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+24; 184 /** Typecode for the MIR_XChng InstructionFormat */ 185 public static final byte MIR_XChng_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+25; 186 /** Typecode for the MIR_DoubleShift InstructionFormat */ 187 public static final byte MIR_DoubleShift_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+26; 188 /** Typecode for the MIR_CaseLabel InstructionFormat */ 189 public static final byte MIR_CaseLabel_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+27; 190 /** Typecode for the MIR_FSave InstructionFormat */ 191 public static final byte MIR_FSave_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+28; 192 /** Typecode for the MIR_RDTSC InstructionFormat */ 193 public static final byte MIR_RDTSC_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+29; 194 /** Typecode for the MIR_CacheOp InstructionFormat */ 195 public static final byte MIR_CacheOp_format = ARCH_INDEPENDENT_INSTR_FORMAT_END_format+30; 196 197 /** Shared traits for operators of the Move InstructionFormat */ 198 public static final int Move_traits = Operator.none; 199 /** Shared traits for operators of the Return InstructionFormat */ 200 public static final int Return_traits = Operator.none; 201 /** Shared traits for operators of the Prologue InstructionFormat */ 202 public static final int Prologue_traits = Operator.varDefs; 203 /** Shared traits for operators of the InstrumentedCounter InstructionFormat */ 204 public static final int InstrumentedCounter_traits = Operator.none; 205 /** Shared traits for operators of the Empty InstructionFormat */ 206 public static final int Empty_traits = Operator.none; 207 /** Shared traits for operators of the Nullary InstructionFormat */ 208 public static final int Nullary_traits = Operator.none; 209 /** Shared traits for operators of the New InstructionFormat */ 210 public static final int New_traits = Operator.none; 211 /** Shared traits for operators of the NewArray InstructionFormat */ 212 public static final int NewArray_traits = Operator.none; 213 /** Shared traits for operators of the Multianewarray InstructionFormat */ 214 public static final int Multianewarray_traits = Operator.varUses; 215 /** Shared traits for operators of the Athrow InstructionFormat */ 216 public static final int Athrow_traits = Operator.none; 217 /** Shared traits for operators of the MonitorOp InstructionFormat */ 218 public static final int MonitorOp_traits = Operator.none; 219 /** Shared traits for operators of the CacheOp InstructionFormat */ 220 public static final int CacheOp_traits = Operator.none; 221 /** Shared traits for operators of the NullCheck InstructionFormat */ 222 public static final int NullCheck_traits = Operator.none; 223 /** Shared traits for operators of the ZeroCheck InstructionFormat */ 224 public static final int ZeroCheck_traits = Operator.none; 225 /** Shared traits for operators of the BoundsCheck InstructionFormat */ 226 public static final int BoundsCheck_traits = Operator.none; 227 /** Shared traits for operators of the StoreCheck InstructionFormat */ 228 public static final int StoreCheck_traits = Operator.none; 229 /** Shared traits for operators of the TypeCheck InstructionFormat */ 230 public static final int TypeCheck_traits = Operator.none; 231 /** Shared traits for operators of the InstanceOf InstructionFormat */ 232 public static final int InstanceOf_traits = Operator.none; 233 /** Shared traits for operators of the Trap InstructionFormat */ 234 public static final int Trap_traits = Operator.none; 235 /** Shared traits for operators of the TrapIf InstructionFormat */ 236 public static final int TrapIf_traits = Operator.none; 237 /** Shared traits for operators of the IfCmp InstructionFormat */ 238 public static final int IfCmp_traits = Operator.none; 239 /** Shared traits for operators of the IfCmp2 InstructionFormat */ 240 public static final int IfCmp2_traits = Operator.none; 241 /** Shared traits for operators of the InlineGuard InstructionFormat */ 242 public static final int InlineGuard_traits = Operator.none; 243 /** Shared traits for operators of the BooleanCmp InstructionFormat */ 244 public static final int BooleanCmp_traits = Operator.none; 245 /** Shared traits for operators of the CondMove InstructionFormat */ 246 public static final int CondMove_traits = Operator.none; 247 /** Shared traits for operators of the Goto InstructionFormat */ 248 public static final int Goto_traits = Operator.none; 249 /** Shared traits for operators of the Label InstructionFormat */ 250 public static final int Label_traits = Operator.none; 251 /** Shared traits for operators of the BBend InstructionFormat */ 252 public static final int BBend_traits = Operator.none; 253 /** Shared traits for operators of the Unary InstructionFormat */ 254 public static final int Unary_traits = Operator.none; 255 /** Shared traits for operators of the GuardedUnary InstructionFormat */ 256 public static final int GuardedUnary_traits = Operator.none; 257 /** Shared traits for operators of the Binary InstructionFormat */ 258 public static final int Binary_traits = Operator.none; 259 /** Shared traits for operators of the GuardedBinary InstructionFormat */ 260 public static final int GuardedBinary_traits = Operator.none; 261 /** Shared traits for operators of the GuardedSet InstructionFormat */ 262 public static final int GuardedSet_traits = Operator.none; 263 /** Shared traits for operators of the ALoad InstructionFormat */ 264 public static final int ALoad_traits = Operator.none; 265 /** Shared traits for operators of the GetField InstructionFormat */ 266 public static final int GetField_traits = Operator.none; 267 /** Shared traits for operators of the GetStatic InstructionFormat */ 268 public static final int GetStatic_traits = Operator.none; 269 /** Shared traits for operators of the Load InstructionFormat */ 270 public static final int Load_traits = Operator.none; 271 /** Shared traits for operators of the AStore InstructionFormat */ 272 public static final int AStore_traits = Operator.none; 273 /** Shared traits for operators of the PutField InstructionFormat */ 274 public static final int PutField_traits = Operator.none; 275 /** Shared traits for operators of the PutStatic InstructionFormat */ 276 public static final int PutStatic_traits = Operator.none; 277 /** Shared traits for operators of the Store InstructionFormat */ 278 public static final int Store_traits = Operator.none; 279 /** Shared traits for operators of the Prepare InstructionFormat */ 280 public static final int Prepare_traits = Operator.none; 281 /** Shared traits for operators of the Attempt InstructionFormat */ 282 public static final int Attempt_traits = Operator.none; 283 /** Shared traits for operators of the Call InstructionFormat */ 284 public static final int Call_traits = Operator.varUses; 285 /** Shared traits for operators of the TableSwitch InstructionFormat */ 286 public static final int TableSwitch_traits = Operator.varUses; 287 /** Shared traits for operators of the LookupSwitch InstructionFormat */ 288 public static final int LookupSwitch_traits = Operator.varUses; 289 /** Shared traits for operators of the LowTableSwitch InstructionFormat */ 290 public static final int LowTableSwitch_traits = Operator.varUses; 291 /** Shared traits for operators of the Phi InstructionFormat */ 292 public static final int Phi_traits = Operator.varUses; 293 /** Shared traits for operators of the OsrBarrier InstructionFormat */ 294 public static final int OsrBarrier_traits = Operator.varUses; 295 /** Shared traits for operators of the OsrPoint InstructionFormat */ 296 public static final int OsrPoint_traits = Operator.varUses; 297 /** Shared traits for operators of the MIR_LowTableSwitch InstructionFormat */ 298 public static final int MIR_LowTableSwitch_traits = Operator.varUses; 299 /** Shared traits for operators of the MIR_Move InstructionFormat */ 300 public static final int MIR_Move_traits = Operator.none; 301 /** Shared traits for operators of the MIR_CondMove InstructionFormat */ 302 public static final int MIR_CondMove_traits = Operator.none; 303 /** Shared traits for operators of the MIR_Lea InstructionFormat */ 304 public static final int MIR_Lea_traits = Operator.none; 305 /** Shared traits for operators of the MIR_BinaryAcc InstructionFormat */ 306 public static final int MIR_BinaryAcc_traits = Operator.none; 307 /** Shared traits for operators of the MIR_Divide InstructionFormat */ 308 public static final int MIR_Divide_traits = Operator.none; 309 /** Shared traits for operators of the MIR_Multiply InstructionFormat */ 310 public static final int MIR_Multiply_traits = Operator.none; 311 /** Shared traits for operators of the MIR_ConvertDW2QW InstructionFormat */ 312 public static final int MIR_ConvertDW2QW_traits = Operator.none; 313 /** Shared traits for operators of the MIR_UnaryAcc InstructionFormat */ 314 public static final int MIR_UnaryAcc_traits = Operator.none; 315 /** Shared traits for operators of the MIR_Compare InstructionFormat */ 316 public static final int MIR_Compare_traits = Operator.none; 317 /** Shared traits for operators of the MIR_CompareExchange InstructionFormat */ 318 public static final int MIR_CompareExchange_traits = Operator.none; 319 /** Shared traits for operators of the MIR_CompareExchange8B InstructionFormat */ 320 public static final int MIR_CompareExchange8B_traits = Operator.none; 321 /** Shared traits for operators of the MIR_Trap InstructionFormat */ 322 public static final int MIR_Trap_traits = Operator.none; 323 /** Shared traits for operators of the MIR_TrapIf InstructionFormat */ 324 public static final int MIR_TrapIf_traits = Operator.none; 325 /** Shared traits for operators of the MIR_Branch InstructionFormat */ 326 public static final int MIR_Branch_traits = Operator.none; 327 /** Shared traits for operators of the MIR_CondBranch InstructionFormat */ 328 public static final int MIR_CondBranch_traits = Operator.none; 329 /** Shared traits for operators of the MIR_CondBranch2 InstructionFormat */ 330 public static final int MIR_CondBranch2_traits = Operator.none; 331 /** Shared traits for operators of the MIR_Call InstructionFormat */ 332 public static final int MIR_Call_traits = Operator.varUses; 333 /** Shared traits for operators of the MIR_Empty InstructionFormat */ 334 public static final int MIR_Empty_traits = Operator.none; 335 /** Shared traits for operators of the MIR_Return InstructionFormat */ 336 public static final int MIR_Return_traits = Operator.none; 337 /** Shared traits for operators of the MIR_Set InstructionFormat */ 338 public static final int MIR_Set_traits = Operator.none; 339 /** Shared traits for operators of the MIR_Test InstructionFormat */ 340 public static final int MIR_Test_traits = Operator.none; 341 /** Shared traits for operators of the MIR_Nullary InstructionFormat */ 342 public static final int MIR_Nullary_traits = Operator.none; 343 /** Shared traits for operators of the MIR_UnaryNoRes InstructionFormat */ 344 public static final int MIR_UnaryNoRes_traits = Operator.none; 345 /** Shared traits for operators of the MIR_Unary InstructionFormat */ 346 public static final int MIR_Unary_traits = Operator.none; 347 /** Shared traits for operators of the MIR_XChng InstructionFormat */ 348 public static final int MIR_XChng_traits = Operator.none; 349 /** Shared traits for operators of the MIR_DoubleShift InstructionFormat */ 350 public static final int MIR_DoubleShift_traits = Operator.none; 351 /** Shared traits for operators of the MIR_CaseLabel InstructionFormat */ 352 public static final int MIR_CaseLabel_traits = Operator.none; 353 /** Shared traits for operators of the MIR_FSave InstructionFormat */ 354 public static final int MIR_FSave_traits = Operator.none; 355 /** Shared traits for operators of the MIR_RDTSC InstructionFormat */ 356 public static final int MIR_RDTSC_traits = Operator.none; 357 /** Shared traits for operators of the MIR_CacheOp InstructionFormat */ 358 public static final int MIR_CacheOp_traits = Operator.none; 359 360 /** 361 * Called to generate a (possibly fatal) error message 362 * when it is detected that an InstructionFormat method 363 * was invoked on an instruction/operator that does not 364 * conform to that format. 365 * @param i the instruction that failed to conform to the 366 * expected format. 367 * @param name the name of the instruction format that the 368 * instruction was expected to conform to. 369 */ 370 protected static void fail(Instruction i, String name) { 371 VM.sysWrite("Instruction "+i+" improperly accessed as "+name+"\n"); 372 throw new OptimizingCompilerException(); 373 } 374 375 /** 376 * Called to generate a (possibly fatal) error message 377 * when it is detected that an InstructionFormat method 378 * was invoked on an operator that does not 379 * conform to that format. 380 * @param op the operator that failed to conform to the 381 * expected format. 382 * @param name the name of the instruction format that the 383 * operator was expected to conform to. 384 */ 385 protected static void fail(Operator op, String name) { 386 VM.sysWrite("Improper attempt to create/mutate as "+name+"\n"); 387 throw new OptimizingCompilerException(); 388 } 389 } 390