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.Configuration; 011 import org.jikesrvm.compilers.opt.ir.operand.ia32.IA32ConditionOperand; //NOPMD 012 import org.jikesrvm.compilers.opt.ir.operand.*; 013 014 /** 015 * The Load InstructionFormat class. 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 @SuppressWarnings("unused") // Machine generated code is never 100% clean 022 public final class Load extends InstructionFormat { 023 /** 024 * InstructionFormat identification method for Load. 025 * @param i an instruction 026 * @return <code>true</code> if the InstructionFormat of the argument 027 * instruction is Load or <code>false</code> 028 * if it is not. 029 */ 030 public static boolean conforms(Instruction i) { 031 return conforms(i.operator); 032 } 033 /** 034 * InstructionFormat identification method for Load. 035 * @param o an instruction 036 * @return <code>true</code> if the InstructionFormat of the argument 037 * operator is Load or <code>false</code> 038 * if it is not. 039 */ 040 public static boolean conforms(Operator o) { 041 return o.format == Load_format; 042 } 043 044 /** 045 * Get the operand called Result from the 046 * argument instruction. Note that the returned operand 047 * will still point to its containing instruction. 048 * @param i the instruction to fetch the operand from 049 * @return the operand called Result 050 */ 051 public static RegisterOperand getResult(Instruction i) { 052 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 053 return (RegisterOperand) i.getOperand(0); 054 } 055 /** 056 * Get the operand called Result from the argument 057 * instruction clearing its instruction pointer. The returned 058 * operand will not point to any containing instruction. 059 * @param i the instruction to fetch the operand from 060 * @return the operand called Result 061 */ 062 public static RegisterOperand getClearResult(Instruction i) { 063 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 064 return (RegisterOperand) i.getClearOperand(0); 065 } 066 /** 067 * Set the operand called Result in the argument 068 * instruction to the argument operand. The operand will 069 * now point to the argument instruction as its containing 070 * instruction. 071 * @param i the instruction in which to store the operand 072 * @param Result the operand to store 073 */ 074 public static void setResult(Instruction i, RegisterOperand Result) { 075 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 076 i.putOperand(0, Result); 077 } 078 /** 079 * Return the index of the operand called Result 080 * in the argument instruction. 081 * @param i the instruction to access. 082 * @return the index of the operand called Result 083 * in the argument instruction 084 */ 085 public static int indexOfResult(Instruction i) { 086 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 087 return 0; 088 } 089 /** 090 * Does the argument instruction have a non-null 091 * operand named Result? 092 * @param i the instruction to access. 093 * @return <code>true</code> if the instruction has an non-null 094 * operand named Result or <code>false</code> 095 * if it does not. 096 */ 097 public static boolean hasResult(Instruction i) { 098 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 099 return i.getOperand(0) != null; 100 } 101 102 /** 103 * Get the operand called Address from the 104 * argument instruction. Note that the returned operand 105 * will still point to its containing instruction. 106 * @param i the instruction to fetch the operand from 107 * @return the operand called Address 108 */ 109 public static Operand getAddress(Instruction i) { 110 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 111 return (Operand) i.getOperand(1); 112 } 113 /** 114 * Get the operand called Address from the argument 115 * instruction clearing its instruction pointer. The returned 116 * operand will not point to any containing instruction. 117 * @param i the instruction to fetch the operand from 118 * @return the operand called Address 119 */ 120 public static Operand getClearAddress(Instruction i) { 121 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 122 return (Operand) i.getClearOperand(1); 123 } 124 /** 125 * Set the operand called Address in the argument 126 * instruction to the argument operand. The operand will 127 * now point to the argument instruction as its containing 128 * instruction. 129 * @param i the instruction in which to store the operand 130 * @param Address the operand to store 131 */ 132 public static void setAddress(Instruction i, Operand Address) { 133 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 134 i.putOperand(1, Address); 135 } 136 /** 137 * Return the index of the operand called Address 138 * in the argument instruction. 139 * @param i the instruction to access. 140 * @return the index of the operand called Address 141 * in the argument instruction 142 */ 143 public static int indexOfAddress(Instruction i) { 144 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 145 return 1; 146 } 147 /** 148 * Does the argument instruction have a non-null 149 * operand named Address? 150 * @param i the instruction to access. 151 * @return <code>true</code> if the instruction has an non-null 152 * operand named Address or <code>false</code> 153 * if it does not. 154 */ 155 public static boolean hasAddress(Instruction i) { 156 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 157 return i.getOperand(1) != null; 158 } 159 160 /** 161 * Get the operand called Offset from the 162 * argument instruction. Note that the returned operand 163 * will still point to its containing instruction. 164 * @param i the instruction to fetch the operand from 165 * @return the operand called Offset 166 */ 167 public static Operand getOffset(Instruction i) { 168 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 169 return (Operand) i.getOperand(2); 170 } 171 /** 172 * Get the operand called Offset from the argument 173 * instruction clearing its instruction pointer. The returned 174 * operand will not point to any containing instruction. 175 * @param i the instruction to fetch the operand from 176 * @return the operand called Offset 177 */ 178 public static Operand getClearOffset(Instruction i) { 179 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 180 return (Operand) i.getClearOperand(2); 181 } 182 /** 183 * Set the operand called Offset in the argument 184 * instruction to the argument operand. The operand will 185 * now point to the argument instruction as its containing 186 * instruction. 187 * @param i the instruction in which to store the operand 188 * @param Offset the operand to store 189 */ 190 public static void setOffset(Instruction i, Operand Offset) { 191 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 192 i.putOperand(2, Offset); 193 } 194 /** 195 * Return the index of the operand called Offset 196 * in the argument instruction. 197 * @param i the instruction to access. 198 * @return the index of the operand called Offset 199 * in the argument instruction 200 */ 201 public static int indexOfOffset(Instruction i) { 202 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 203 return 2; 204 } 205 /** 206 * Does the argument instruction have a non-null 207 * operand named Offset? 208 * @param i the instruction to access. 209 * @return <code>true</code> if the instruction has an non-null 210 * operand named Offset or <code>false</code> 211 * if it does not. 212 */ 213 public static boolean hasOffset(Instruction i) { 214 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 215 return i.getOperand(2) != null; 216 } 217 218 /** 219 * Get the operand called Location from the 220 * argument instruction. Note that the returned operand 221 * will still point to its containing instruction. 222 * @param i the instruction to fetch the operand from 223 * @return the operand called Location 224 */ 225 public static LocationOperand getLocation(Instruction i) { 226 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 227 return (LocationOperand) i.getOperand(3); 228 } 229 /** 230 * Get the operand called Location from the argument 231 * instruction clearing its instruction pointer. The returned 232 * operand will not point to any containing instruction. 233 * @param i the instruction to fetch the operand from 234 * @return the operand called Location 235 */ 236 public static LocationOperand getClearLocation(Instruction i) { 237 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 238 return (LocationOperand) i.getClearOperand(3); 239 } 240 /** 241 * Set the operand called Location in the argument 242 * instruction to the argument operand. The operand will 243 * now point to the argument instruction as its containing 244 * instruction. 245 * @param i the instruction in which to store the operand 246 * @param Location the operand to store 247 */ 248 public static void setLocation(Instruction i, LocationOperand Location) { 249 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 250 i.putOperand(3, Location); 251 } 252 /** 253 * Return the index of the operand called Location 254 * in the argument instruction. 255 * @param i the instruction to access. 256 * @return the index of the operand called Location 257 * in the argument instruction 258 */ 259 public static int indexOfLocation(Instruction i) { 260 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 261 return 3; 262 } 263 /** 264 * Does the argument instruction have a non-null 265 * operand named Location? 266 * @param i the instruction to access. 267 * @return <code>true</code> if the instruction has an non-null 268 * operand named Location or <code>false</code> 269 * if it does not. 270 */ 271 public static boolean hasLocation(Instruction i) { 272 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 273 return i.getOperand(3) != null; 274 } 275 276 /** 277 * Get the operand called Guard from the 278 * argument instruction. Note that the returned operand 279 * will still point to its containing instruction. 280 * @param i the instruction to fetch the operand from 281 * @return the operand called Guard 282 */ 283 public static Operand getGuard(Instruction i) { 284 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 285 return (Operand) i.getOperand(4); 286 } 287 /** 288 * Get the operand called Guard from the argument 289 * instruction clearing its instruction pointer. The returned 290 * operand will not point to any containing instruction. 291 * @param i the instruction to fetch the operand from 292 * @return the operand called Guard 293 */ 294 public static Operand getClearGuard(Instruction i) { 295 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 296 return (Operand) i.getClearOperand(4); 297 } 298 /** 299 * Set the operand called Guard in the argument 300 * instruction to the argument operand. The operand will 301 * now point to the argument instruction as its containing 302 * instruction. 303 * @param i the instruction in which to store the operand 304 * @param Guard the operand to store 305 */ 306 public static void setGuard(Instruction i, Operand Guard) { 307 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 308 i.putOperand(4, Guard); 309 } 310 /** 311 * Return the index of the operand called Guard 312 * in the argument instruction. 313 * @param i the instruction to access. 314 * @return the index of the operand called Guard 315 * in the argument instruction 316 */ 317 public static int indexOfGuard(Instruction i) { 318 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 319 return 4; 320 } 321 /** 322 * Does the argument instruction have a non-null 323 * operand named Guard? 324 * @param i the instruction to access. 325 * @return <code>true</code> if the instruction has an non-null 326 * operand named Guard or <code>false</code> 327 * if it does not. 328 */ 329 public static boolean hasGuard(Instruction i) { 330 if (Configuration.ExtremeAssertions && !conforms(i)) fail(i, "Load"); 331 return i.getOperand(4) != null; 332 } 333 334 335 /** 336 * Create an instruction of the Load instruction format. 337 * @param o the instruction's operator 338 * @param Result the instruction's Result operand 339 * @param Address the instruction's Address operand 340 * @param Offset the instruction's Offset operand 341 * @param Location the instruction's Location operand 342 * @param Guard the instruction's Guard operand 343 * @return the newly created Load instruction 344 */ 345 public static Instruction create(Operator o 346 , RegisterOperand Result 347 , Operand Address 348 , Operand Offset 349 , LocationOperand Location 350 , Operand Guard 351 ) 352 { 353 if (Configuration.ExtremeAssertions && !conforms(o)) fail(o, "Load"); 354 Instruction i = new Instruction(o, 5); 355 i.putOperand(0, Result); 356 i.putOperand(1, Address); 357 i.putOperand(2, Offset); 358 i.putOperand(3, Location); 359 i.putOperand(4, Guard); 360 return i; 361 } 362 363 /** 364 * Mutate the argument instruction into an instruction of the 365 * Load instruction format having the specified 366 * operator and operands. 367 * @param i the instruction to mutate 368 * @param o the instruction's operator 369 * @param Result the instruction's Result operand 370 * @param Address the instruction's Address operand 371 * @param Offset the instruction's Offset operand 372 * @param Location the instruction's Location operand 373 * @param Guard the instruction's Guard operand 374 * @return the mutated instruction 375 */ 376 public static Instruction mutate(Instruction i, Operator o 377 , RegisterOperand Result 378 , Operand Address 379 , Operand Offset 380 , LocationOperand Location 381 , Operand Guard 382 ) 383 { 384 if (Configuration.ExtremeAssertions && !conforms(o)) fail(o, "Load"); 385 i.operator = o; 386 i.putOperand(0, Result); 387 i.putOperand(1, Address); 388 i.putOperand(2, Offset); 389 i.putOperand(3, Location); 390 i.putOperand(4, Guard); 391 return i; 392 } 393 /** 394 * Create an instruction of the Load instruction format. 395 * @param o the instruction's operator 396 * @param Result the instruction's Result operand 397 * @param Address the instruction's Address operand 398 * @param Offset the instruction's Offset operand 399 * @param Location the instruction's Location operand 400 * @return the newly created Load instruction 401 */ 402 public static Instruction create(Operator o 403 , RegisterOperand Result 404 , Operand Address 405 , Operand Offset 406 , LocationOperand Location 407 ) 408 { 409 if (Configuration.ExtremeAssertions && !conforms(o)) fail(o, "Load"); 410 Instruction i = new Instruction(o, 5); 411 i.putOperand(0, Result); 412 i.putOperand(1, Address); 413 i.putOperand(2, Offset); 414 i.putOperand(3, Location); 415 return i; 416 } 417 418 /** 419 * Mutate the argument instruction into an instruction of the 420 * Load instruction format having the specified 421 * operator and operands. 422 * @param i the instruction to mutate 423 * @param o the instruction's operator 424 * @param Result the instruction's Result operand 425 * @param Address the instruction's Address operand 426 * @param Offset the instruction's Offset operand 427 * @param Location the instruction's Location operand 428 * @return the mutated instruction 429 */ 430 public static Instruction mutate(Instruction i, Operator o 431 , RegisterOperand Result 432 , Operand Address 433 , Operand Offset 434 , LocationOperand Location 435 ) 436 { 437 if (Configuration.ExtremeAssertions && !conforms(o)) fail(o, "Load"); 438 i.operator = o; 439 i.putOperand(0, Result); 440 i.putOperand(1, Address); 441 i.putOperand(2, Offset); 442 i.putOperand(3, Location); 443 i.putOperand(4, null); 444 return i; 445 } 446 } 447