001
002 /*
003 * THIS FILE IS MACHINE_GENERATED. DO NOT EDIT.
004 * See InstructionFormats.template, CommonOperands.dat,
005 * OperatorList.dat, etc.
006 */
007
008 package org.jikesrvm.compilers.opt.ir;
009
010 import org.jikesrvm.Configuration;
011 import org.jikesrvm.compilers.opt.ir.operand.*;
012
013 /**
014 * InstructionFormats that have a GuardResult (which is RegisterOperand)
015 */
016 public final class GuardResultCarrier extends InstructionFormat {
017 private static final int[] _index = {
018 -1 // Unassigned
019 , -1 // Move
020 , -1 // Return
021 , -1 // Prologue
022 , -1 // InstrumentedCounter
023 , -1 // Empty
024 , -1 // Nullary
025 , -1 // New
026 , -1 // NewArray
027 , -1 // Multianewarray
028 , -1 // Athrow
029 , -1 // MonitorOp
030 , -1 // CacheOp
031 , 0 // NullCheck
032 , 0 // ZeroCheck
033 , 0 // BoundsCheck
034 , 0 // StoreCheck
035 , -1 // TypeCheck
036 , -1 // InstanceOf
037 , 0 // Trap
038 , 0 // TrapIf
039 , 0 // IfCmp
040 , 0 // IfCmp2
041 , -1 // InlineGuard
042 , -1 // BooleanCmp
043 , -1 // CondMove
044 , -1 // Goto
045 , -1 // Label
046 , -1 // BBend
047 , -1 // Unary
048 , -1 // GuardedUnary
049 , -1 // Binary
050 , -1 // GuardedBinary
051 , -1 // GuardedSet
052 , -1 // ALoad
053 , -1 // GetField
054 , -1 // GetStatic
055 , -1 // Load
056 , -1 // AStore
057 , -1 // PutField
058 , -1 // PutStatic
059 , -1 // Store
060 , -1 // Prepare
061 , -1 // Attempt
062 , -1 // Call
063 , -1 // TableSwitch
064 , -1 // LookupSwitch
065 , -1 // LowTableSwitch
066 , -1 // Phi
067 , -1 // OsrBarrier
068 , -1 // OsrPoint
069 , -1 // MIR_LowTableSwitch
070 , -1 // MIR_Move
071 , -1 // MIR_CondMove
072 , -1 // MIR_Lea
073 , -1 // MIR_BinaryAcc
074 , -1 // MIR_Divide
075 , -1 // MIR_Multiply
076 , -1 // MIR_ConvertDW2QW
077 , -1 // MIR_UnaryAcc
078 , -1 // MIR_Compare
079 , -1 // MIR_CompareExchange
080 , -1 // MIR_CompareExchange8B
081 , 0 // MIR_Trap
082 , 0 // MIR_TrapIf
083 , -1 // MIR_Branch
084 , -1 // MIR_CondBranch
085 , -1 // MIR_CondBranch2
086 , -1 // MIR_Call
087 , -1 // MIR_Empty
088 , -1 // MIR_Return
089 , -1 // MIR_Set
090 , -1 // MIR_Test
091 , -1 // MIR_Nullary
092 , -1 // MIR_UnaryNoRes
093 , -1 // MIR_Unary
094 , -1 // MIR_XChng
095 , -1 // MIR_DoubleShift
096 , -1 // MIR_CaseLabel
097 , -1 // MIR_FSave
098 , -1 // MIR_RDTSC
099 , -1 // MIR_CacheOp
100 };
101
102 /**
103 * Does the instruction belong to an instruction format that
104 * has an operand called GuardResult?
105 * @param i the instruction to test
106 * @return <code>true</code> if the instruction's instruction
107 * format has an operand called GuardResult and
108 * <code>false</code> if it does not.
109 */
110 public static boolean conforms(Instruction i) {
111 return conforms(i.operator);
112 }
113 /**
114 * Does the operator belong to an instruction format that
115 * has an operand called GuardResult?
116 * @param o the operator to test
117 * @return <code>true</code> if the instruction's instruction
118 * format has an operand called GuardResult and
119 * <code>false</code> if it does not.
120 */
121 public static boolean conforms(Operator o) {
122 return _index[o.format] != -1;
123 }
124
125 /**
126 * Get the operand called GuardResult from the
127 * argument instruction. Note that the returned operand
128 * will still point to its containing instruction.
129 * @param i the instruction to fetch the operand from
130 * @return the operand called GuardResult
131 */
132 public static RegisterOperand getGuardResult(Instruction i) {
133 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "GuardResultCarrier");
134 int index = _index[i.operator.format];
135 return (RegisterOperand) i.getOperand(index);
136 }
137 /**
138 * Get the operand called GuardResult from the argument
139 * instruction clearing its instruction pointer. The returned
140 * operand will not point to any containing instruction.
141 * @param i the instruction to fetch the operand from
142 * @return the operand called GuardResult
143 */
144 public static RegisterOperand getClearGuardResult(Instruction i) {
145 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "GuardResultCarrier");
146 int index = _index[i.operator.format];
147 return (RegisterOperand) i.getClearOperand(index);
148 }
149 /**
150 * Set the operand called GuardResult in the argument
151 * instruction to the argument operand. The operand will
152 * now point to the argument instruction as its containing
153 * instruction.
154 * @param i the instruction in which to store the operand
155 * @param op the operand to store
156 */
157 public static void setGuardResult(Instruction i, RegisterOperand op) {
158 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "GuardResultCarrier");
159 int index = _index[i.operator.format];
160 i.putOperand(index, op);
161 }
162 /**
163 * Return the index of the operand called GuardResult
164 * in the argument instruction.
165 * @param i the instruction to access.
166 * @return the index of the operand called GuardResult
167 * in the argument instruction
168 */
169 public static int indexOfGuardResult(Instruction i) {
170 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "GuardResultCarrier");
171 return _index[i.operator.format];
172 }
173 /**
174 * Does the argument instruction have a non-null
175 * operand named GuardResult?
176 * @param i the instruction to access.
177 * @return <code>true</code> if the instruction has an non-null
178 * operand named GuardResult or <code>false</code>
179 * if it does not.
180 */
181 public static boolean hasGuardResult(Instruction i) {
182 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "GuardResultCarrier");
183 int index = _index[i.operator.format];
184 return i.getOperand(index) != null;
185 }
186 }
187